-
Hintergrund
-
Tiefe neuronale Netze (Deep Neural Networks (DNNs)) sind eine Klasse von neuronalen Netzen, die sich als Schlüsselansatz zur Lösung komplexer Probleme in verschiedenen technischen Bereichen etabliert hat. Ein „neuronales Netz“ bezieht sich auf einen Algorithmus oder ein Computersystem, das auf einer Sammlung von verbundenen Einheiten oder Knoten basiert, die künstliche Neuronen genannt werden, die 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 künstliche Neuronen signalisieren (die Ausgabeaktivierung), die mit ihm verbunden sind. Anwendungen von DNNs weisen je nach Implementierung unterschiedliche Leistungs-, Genauigkeits- und Energieverbrauchsbedingungen auf. Der Aufbau bestimmter DNNs für die Bedingungen bestimmter Implementierungen kann aufgrund der hohen Designkomplexität und der Herausforderungen in der Fertigung kostenintensiv sein.
-
Figurenliste
-
Um die Diskussion über ein bestimmtes Element oder einen bestimmten Vorgang leicht zu identifizieren, beziehen sich die höchstwertigsten Ziffern in einem Bezugszeichen auf die Figur, in der dieses Element zum ersten Mal eingeführt wird.
- 1 stellt einen skalierbaren neuronalen Prozessor 100 gemäß einer Ausführungsform dar.
- 2 stellt die Anforderungen an die Gewichtsspeicherung 200 für eine Vielzahl von DNN-Anwendungen dar.
- 3 stellt eine Multi-Die-Baueinheit 302 gemäß einer Ausführungsform dar.
- 4 stellt ein Die 400 gemäß einer Ausführungsform dar.
- 5 stellt ein Verarbeitungselement 500 gemäß einer Ausführungsform dar.
- 6 stellt ein Verarbeitungselement 600 gemäß einer Ausführungsform dar.
- 7 stellt einen exemplarischen Datenfluss zwischen den Verarbeitungselementen 306 auf verschiedenen Dies dar.
- 8 stellt eine Verbindung 102 gemäß einer Ausführungsform dar.
- 9 stellt eine kachelartige Anordnung zur Faltung 900 gemäß einer Ausführungsform dar.
- 10 stellt eine kachelartige Anordnung 1000 auf Baueinheitsniveau mit mehr Details gemäß einer Ausführungsform dar.
- 11 stellt eine kachelartige Anordnung 1100 auf Chipniveau gemäß einer Ausführungsform dar.
- 12 stellt eine kachelartige Anordnung 1200 auf Verarbeitungselementniveau gemäß einer Ausführungsform dar.
-
Detaillierte Beschreibung
-
Tiefe neuronale Netze bzw. Deep Neural Networks (DNNs) sind an sich skalierbar und ermöglichen eine einheitliche DNN-Architektur mit Nutzen für viele verschiedene Implementierungsbedingungen. Hierin wird ein effizienter kachelartig angeordneter DNN-Prozessor vorgestellt, der ein skalierbares Multi-Die-Baueinheits-Design verwendet. Die Dies (mehr als ein Die werden im Folgenden als „Dies“ bezeichnet) sind miteinander verbunden und kommunizieren über einen Pakete vermittelnden Network-on-a-Package-Router bzw. bzw. Router für ein Netzwerk auf einer Baueinheit, und die Verarbeitungselemente jedes Dies sind miteinander verbunden und kommunizieren über einen Network-on-a-Chip-Router bzw. Router für ein Netzwerk auf einem Chip.
-
Das offenbarte System umfasst vorteilhafte Merkmale, welche einschließen: 1) eine vollständig verteilte, auf einer kachelartigen Anordnung bzw. Tiling basierende Architektur, 2) eine Sende-/Empfangsvorrichtung bzw. einen Transceiver für eine Inter-Die-Kommunikation mit geringem Energieverbrauch und Masse bezogener Signalisierung mit hoher Bandbreite; und 3) eine flexible und effiziente kachelartige Anordnung für Gewichte und Aktivierungen auf Verarbeitungselement- (PE-) Niveau, Die-Niveau und Baueinheits-Niveau, wobei die Datenlokalisierung verbessert und die Kommunikationskosten reduziert werden.
-
1 stellt einen skalierbaren neuronalen Prozessor 100 in einer Ausführungsform dar. Die Gewichte für ein DNN sind räumlich über die On-Die-Speicher bzw. Speicher auf dem Die (Aktivierungsspeicher 104) verteilt. „Gewichte“ bezieht sich auf Werte, mit denen Aktivierungen multipliziert werden, um die Wirkung der Aktivierungswerte in einer Aktivierungsfunktion zu erhöhen oder zu verringern. Die Gewichte können auf beliebig viele Dies aufgeteilt werden, z.B. auf 1-36 Dies. Wie dargestellt ist, umfasst 1 36 Dies. Sende-/Empfangs-Vorrichtungen mit Masse bezogener Signalisierung (Ground Reference Signaling (GRS)) können verwendet werden, um eine Verbindung 102 zwischen Verarbeitungselementen 106 auf verschiedenen Dies zu implementieren. Der skalierbare neuronale Prozessor 100 kann durch mehrere Dies implementiert werden, die über eine Sende-/Empfangs-Vorrichtung in einer einzigen Baueinheit kommunizieren. Die Sende-/Empfangs-Vorrichtungen können auch zur Kommunikation zwischen Dies auf mehreren Baueinheiten verwendet werden.
-
DNN-Inferenz-Beschleuniger-Anwendungen können sich in ihren Anforderungen erheblich unterscheiden. Beispielsweise können typische Rechenzentrums-Inferenzanwendungen wie die Bilderkennung die Leistung und Skalierbarkeit bei niedriger Latenzzeit priorisieren und bereit sein, die Klassifizierungsgenauigkeit zu beeinträchtigen, während die DNN-Inferenz für Arbeitslasten beim autonomen Fahren die Energieeffizienz unter Echtzeitbedingungen priorisiert und gleichzeitig die bestmögliche Netzwerkgenauigkeit beibehalten kann. Da benutzerdefinierte Inferenzbeschleuniger erhebliche Leistungsverbrauchs- und Energieverbrauchsvorteile gegenüber Universalprozessoren und FPGAs bieten können, ist es wünschenswert, benutzerdefinierte Hardwareinstanzen für jeden Zielmarkt und eine Reihe von unterstützten Arbeitslasten zu ermöglichen. Die hohen Engineering-Kosten und die langen Designzyklen eines kundenspezifischen Hardwareentwurfs stellen jedoch große Herausforderungen dar.
-
2 stellt dar, wie sich die Anforderungen 200 bezüglich der Anzahl der Dies und der Gewichtsspeicher eines DNN-Prozessors über Anwendungen bezüglich eines Mobiltelefons, Automobils und Rechenzentrums hinweg skalieren lassen. So kann beispielsweise eine Baueinheit mit vier Dies (2 × 2-Anordnung) einen Gewichtsspeicher von etwa 2 MB auf dem Chip aufweisen. Ein „Chip“ bezieht sich auf eine Sammlung von Schaltungen in einer diskreten Baueinheit mit einem Satz von Pins (Eingangs- und Ausgangsanschlüssen, die typischerweise aus Metall gefertigt sind) zur Verbindung mit den Schaltungen innerhalb des Chips. Ein Chip wird hierin auch als „Die“ bezeichnet. Eine solche Baueinheit kann in Anwendungen für ein Mobiltelefon eingesetzt werden. Eine Baueinheit mit 16 Dies (4 × 4-Anordnung) kann einen Gewichtsspeicher von etwa 8 MB aufweisen. Eine solche Baueinheit kann in Anwendungen für ein Automobil eingesetzt werden. Eine Baueinheit mit 36 Dies (6 × 6 Anordnung) kann einen Gewichtsspeicher von ca. 18 MB aufweisen. Eine solche Baueinheit kann in Anwendungen für ein Rechenzentrum verwendet werden. Der Speicherbedarf ist somit im Wesentlichen linear zu der Anzahl der verwendeten Dies.
-
Unter Bezugnahme auf die Multi-Die-Baueinheit 302 der Ausführungsform von 3. Die Multi-Die-Baueinheit 302 kann eine Halbleiterbaueinheit sein, die eine Vielzahl von Dies 304 umfasst. Jeder der Dies 304 umfasst eine Vielzahl von Verarbeitungselementen 306, einen globalen Puffer 308 und eine Steuerung 310. Dabei wird der Begriff „Chip“ austauschbar mit dem Begriff „Die“ verwendet. Die Elemente jedes Chips/Dies kommunizieren über einen Router 312 für ein Netzwerk auf einem Chip. Die mehreren Chips in einer Baueinheit kommunizieren miteinander über einen Router 314 für ein Netzwerk auf einer Baueinheit und können auch mit einem Host-316-System, das einen DRAM 320 oder einen anderen Speicher umfasst, über ein Field Programmable Gate Array (FPGA 318), eine Logik der Joint Test Action Group (JTAG) oder eine andere Schnittstellentechnologie kommunizieren, wie sie in der Technik bekannt ist.
-
Jedes der Verarbeitungselemente umfasst einen Gewichtspuffer zum Empfangen und Speichern von Gewichtswerten für ein tiefes neuronales Netz. Ein „Gewichtspuffer“ bezieht sich auf einen Puffer, der Gewichtswerte speichert. Jedes der Verarbeitungselemente umfasst einen Aktivierungspuffer zum Empfangen von Aktivierungswerten für das tiefe neuronale Netz. Ein „Aktivierungspuffer“ bezieht sich auf einen Speicherpuffer, der zum Speichern von Aktivierungswerten (Aktivierungen) verwendet wird, die bei der Berechnung eines neuronalen Netzes verwendet werden. Aktivierungen werden von jedem Neuron in einer Schicht des neuronalen Netzes mit Hilfe einer Aktivierungsfunktion berechnet, die manchmal auch als „Übertragungsfunktion“ bezeichnet wird. Aktivierungen können einfache binäre Werte sein (z.B. „1“ oder „0“, die „EIN“ oder „AUS“ darstellen) oder sie können für einige Aktivierungsfunktionen einen Bereich von Werten annehmen. Der Gewichtspuffer und der Aktivierungspuffer können getrennte Elemente innerhalb jedes Verarbeitungselements sein. „Aktivierungen“ beziehen sich auf die Ausgabewerte von Neuronen in einem neuronalen Netz, die zumindest teilweise auf der Grundlage von Gewichten, die in das Neuron eingegeben werden, und einer Aktivierungsfunktion des Neurons berechnet werden. Aktivierungen werden auch als „Aktivierungswerte“ bezeichnet. Ein „Puffer“ bezieht sich auf einen Speicher, der Werte speichert, die Eingaben in eine Berechnung sind oder sich aus einer Berechnung ergeben. Jedes der Verarbeitungselemente umfasst ferner eine Vielzahl von Multiplikations-Akkumulations-Einheiten, um die Gewichtswerte und die Aktivierungswerte parallel zu kombinieren, um Teilsummen zu erzeugen.
-
Die Multi-Die-Baueinheit 302 ist ausgestaltet, um die Gewichtswerte und Aktivierungswerte räumlich um eine Tiefe einer Eingabe (z.B. die Farbtiefe eines digitalen Bildes) in das tiefe neuronale Netz und zeitlich (über die Zeit) um eine Höhe und eine Breite der Eingabe (z.B. die Höhe und Breite des digitalen Bildes) in das tiefe neuronale Netz zu verteilen. Der globale Speicherpuffer jedes Chips kann als Second-Level-Puffer bzw. Puffer der zweiten Ebene für die Aktivierungswerte während der Berechnung dienen. Ein „Second-Level-Puffer “ bezieht sich auf einen Speicher, in dem Werte gespeichert und abgerufen werden, wenn die Werte für die Berechnung benötigt werden, aber im First-Level-Puffer bzw. Puffer der ersten Ebene nicht verfügbar sind. Dabei kann der globale Puffer des Chips als Second-Level-Puffer für die First-Level-Aktivierungspuffer der Verarbeitungselemente des Chips fungieren. Ein „globaler Speicherpuffer“ bezieht sich auf einen Puffer, der für die Verwendung durch alle oder mindestens eine Vielzahl von Verarbeitungselementen auf einem Chip verfügbar ist. Die Verteilung der Gewichte und Aktivierungen während der Berechnung kann durch die Steuerung 310 des Chips vorgenommen werden.
-
4 stellt ein Die 400 in einer Ausführungsform dar, welche einen Pfad für 8-Bit-Festpunktdaten und eine Vielzahl (z.B. 16) von Verarbeitungselementen 306 einsetzt. Das Die 400 umfasst den vorab genannten globalen Puffer 308 und die Steuerung 310, die beispielsweise ein RISC-V-Prozessor sein kann. Die Verarbeitungselemente 306 und der globale Puffer 308 kommunizieren über den Router 312 für ein Netzwerk auf einem Chip, der zentral oder dezentral als Router auf jedem der Verarbeitungselemente 306 implementiert sein kann. Die Verarbeitungselemente 306 kommunizieren mit Verarbeitungselementen auf anderen Dies über den Router 314 für ein Netzwerk auf einer Baueinheit und verschiedene Sende-/Empfangs-Vorrichtungen - West-GRS-Empfänger 402, West-GRS-Sender 404, Nord-GRS-Sender 406, Süd-GRS-Empfänger 408, Nord-GRS-Empfänger 410, Süd-GRS-Sender 412, Ost-GRS-Sender 414 und Ost-GRS-Empfänger 416.
-
Die dargestellten Sende-/Empfangsvorrichtungen werden mit Sende-/Empfangs-Vorrichtungen implementiert, welche eine Masse bezogene Signalisierung (GRS) einsetzen, wobei vier als Empfänger (RX) und vier als Sender (TX) konfiguriert sind. In einer Ausführungsform kann jede Sende-/Empfangs-Vorrichtung vier Datenbahnen und eine Taktbahn umfassen. Jede Baueinheit kann beispielsweise ein bis 36 Dies aufweisen, die in einem Gitter-Netzwerk gekoppelt sind, wobei der Router 314 jedes Dies für ein Netzwerk auf einer Baueinheit direkt mit seinen vier benachbarten Dies kommuniziert. Wenn die Die-zu-Die-Kommunikationsverbindungen nicht aktiv sind, können sie in einen Ruhemodus versetzt werden, indem die Datenbahnen vollständig abgeschaltet werden, was Energie spart und zu einer geringen Aufwach-Wartezeit führt. Die Gitter-Topologie wird gegenüber komplexeren Topologien, wie beispielsweise einem gefalteten zweidimensionalen Torus, bevorzugt, was einen größeren Abstand zwischen den Dies erfordern würde, um die zusätzliche Verdrahtungslänge zu berücksichtigen.
-
5 stellt, von einem höheren Niveau aus betrachtet, ein beispielhaftes Verarbeitungselement 500 dar. Das Verarbeitungselement 500 beinhaltet eine Vielzahl von Multiplikations-Akkumulations-Einheiten 502, einen Gewichtspuffer 504, einen Aktivierungspuffer 506, einen Router 508, eine Steuerung 510, einen Akkumulations-Speicherpuffer 512 und einen neuronalen Prozessor 514. Der Aktivierungspuffer 506 kann in einer Ausführungsform als Dual-Ported-SRAM implementiert sein, um Aktivierungswerte von der zentralen Steuerung 310 des Chips oder von anderen Verarbeitungselementen über den Router 508 zu empfangen. Der Router 508 kann eine Komponente eines verteilten Routers 312 für ein Netzwerk auf einem Chip sein.
-
Der Gewichtspuffer 504 kann in einer Ausführungsform als Single-Ported 32KB-SRAM zum Speichern von Gewichtswerten implementiert sein. Die von den Multiplikations-Akkumulations-Einheiten 502 verwendeten Gewichtswerte können „gewichtsstationär“ sein, d.h. sie werden nicht bei jedem Taktzyklus aktualisiert, sondern erst, wenn die Aktivierungswerte der Ausgabe aktualisiert sind.
-
Der Akkumulations-Speicherpuffer 512 kann ein oder mehrere SRAM-Bauelemente umfassen, um die Ausgabeaktivierungen zu speichern, die mit den Multiplikations-Akkumulations-Einheiten 502 berechnet wurden. Der Router 508 übermittelt diese Ausgabeaktivierungen und Steuersignale vom Verarbeitungselement 500 an andere Verarbeitungselemente. Eine „Ausgabeaktivierung“ bezieht sich auf eine Aktivierungsausgabe durch ein Neuron in einem neuronalen Netz. Eine Ausgabeaktivierung wird typischerweise basierend auf den Eingabeaktivierungen für das Neuron und den Gewichten für die Eingabeaktivierungen berechnet. Eine „Eingabeaktivierung“ bezieht sich auf eine Aktivierung, die von einem Neuron in einem neuronalen Netz empfangen wird.
-
Das Verarbeitungselement 500 kann alle Operationen von Faltungs- und vollständig verbundenen Schichten eines DNN effizient durchführen, einschließlich einer Multiplikation-Akkumulation, eines Abschneidens, einer Skalierung, einer Bias-Addition, ReLU und Pooling (diese letzten fünf im neuronalen Prozessor 514). Die Multiplikations-Akkumulations-Einheiten 502 können an den gleichen Eingaben mit unterschiedlichen Filtern arbeiten. In einer Ausführungsform berechnet jede der Multiplikations-Akkumulations-Einheiten 502 ein Acht-Eingabe-Kanal-Punktprodukt und akkumuliert das Ergebnis bei jedem Taktzyklus in dem Akkumulations-Speicherpuffer 512. Die im Gewichtspuffer 504 gespeicherten Gewichte bleiben unverändert, bis die gesamte Berechnung der Ausgabeaktivierungen abgeschlossen ist. Jedes Verarbeitungselement 500 liest die Eingabeaktivierungen im Aktivierungspuffer 506, führt die Multiplikation-Akkumulation durch und schreibt bei jedem Taktzyklus Ausgabeaktivierungen in den Akkumulations-Speicherpuffer 512. Die Frequenz, mit der auf den Gewichtspuffer 504 zugegriffen wird, hängt von den Abmessungen der Eingabeaktivierungsmatrix und der Anzahl der verwendeten Filter ab.
-
Die Multiplikations-Akkumulations-Einheiten
502 jedes Verarbeitungselements
500 berechnen einen Teil einer großen Punktprodukt-Akkumulation als Teilergebnis und leiten das Teilergebnis an benachbarte Verarbeitungselemente weiter. Eine „Punktprodukt-Akkumulation“ bezieht sich auf die Berechnung eines Punktprodukts. Ein Punktprodukt ist die Summe der Produkte der entsprechenden Einträge der beiden Sequenzen (Vektoren) von Zahlen. Punktprodukte werden effizient mit Hilfe von Multiplikations-Akkumulations-Einheiten berechnet. Eine „Multiplikations-Akkumulations-Einheit“ bezieht sich auf eine Datenverarbeitungsschaltung, die Multiplikations-Akkumulations-Operationen durchführt, bei denen das Produkt aus zwei Zahlen berechnet und zu einem Akkumulator addiert wird. Multiplikations-Akkumulations-Einheiten können hierin mit ihrem Akronym, MAC oder MAC-Einheit bezeichnet werden.
-
Die Teilergebnisse werden von den Verarbeitungselementen in ein Endergebnis umgewandelt und an den globalen Puffer übermittelt. Der globale Puffer fungiert als Stufentrennbereich für die endgültigen Multiplikations-Akkumulations-Ergebnisse zwischen den Schichten des tiefen neuronalen Netzes.
-
Der Akkumulationsspeicherpuffer 512 empfängt Ausgaben von den Multiplikations-Akkumulations-Einheiten 502. Die zentrale Steuerung 310 verteilt die Gewichtswerte und Aktivierungswerte auf die Verarbeitungselemente und nutzt den globalen Speicherpuffer als Second-Level-Puffer für die Aktivierungswerte. Die Steuerung 310 zerlegt die Verarbeitung durch Schichten des tiefen neuronalen Netzes räumlich über die Verarbeitungselemente nach Ein-/Ausgabekanaldimensionen und zeitlich nach Bild-Höhe / -Breite.
-
Der globale Puffer 308 speichert sowohl Eingabeaktivierungen als auch Ausgabeaktivierungen von den Verarbeitungselementen 306 zur Verteilung durch die oben genannten Sende-/Empfangs-Vorrichtungen an die Verarbeitungselemente per Multicast. „Multicast“ bezieht sich auf einen Gruppenkommunikationsmechanismus, bei dem die Übertragung von Daten an eine Gruppe von Zielvorrichtungen (z.B. Verarbeitungselemente) gleichzeitig gerichtet wird. Multicast kann eine Oneto-Many oder Many-to-Many-Verteilung implementieren. Jedes der Verarbeitungselemente 306 beinhaltet einen Router 508, um in einer Ausführungsform eine Dateneingabe von 64 Bit und eine Datenausgabe von 64 Bit pro Taktzyklus zu übertragen. Dies ermöglicht die Akkumulation von Teilsummen für große Punktprodukte, deren Berechnung räumlich über die Verarbeitungselemente 306 verteilt ist.
-
6 stellt ein exemplarisches Verarbeitungselement 600 im Detail dar. Das Verarbeitungselement 600 beinhaltet die vorab genannten Vektor-MAC-Einheiten 602, Gewichtspuffer 604, Aktivierungspuffer 606, Router-Schnittstelle 608, Steuerung 610, Akkumulationsspeicherpuffer 612 und Postprozessor 614 (z.B. den neuronalen Prozessor 514). Ebenfalls dargestellt sind ein Gewichtssammler 636 zwischen dem Gewichtspuffer 604 und den Vektor-MAC-Einheiten 602 und ein Akkumulationssammler638 zwischen den Vektor-MAC-Einheiten 602 und dem Akkumulationsspeicherpuffer 612. Außerdem sind verschiedene Speicherpuffer-Manager dargestellt, die verwendet werden können (z.B. Gewichtsspeicherpuffer-Manager 626, Aktivierungsspeicher-Puffer-Manager 632 und Akkumulationsspeicherpuffer-Manager 634). „Speicherpuffer-Manager“ bezieht sich auf die Logik zur Verwaltung des Inhalts eines Speicherpuffers, z.B. zur Verwaltung der Verfügbarkeit bestimmter Daten (z.B. Gewichte, Aktivierungen) im Puffer, wenn sie von einem Verarbeitungselement angefordert werden.
-
Das Verarbeitungselement 600 beinhaltet mehrere Vektor-MAC-Einheiten 602, von denen eine Anzahl N für einen bestimmten Datenfluss betriebsbereit ist. Jede der Vektor-MAC-Einheiten 602 führt V Multiplikationen und Additionen pro Taktzyklus mit ihrer Multiplikations-Akkumulations-Einheit 640 durch. So kann das Verarbeitungselement 600 in jedem Taktzyklus eine Gewichtsmatrix der Abmessungen N × V mit einer Eingabeaktivierungsmatrix der Größe V multiplizieren, um einen Teilsummenvektor der Größe N zu erzeugen. Mit anderen Worten, jede der Vektor-MAC-Einheiten 602 kann eine V-große Punktproduktberechnung pro Taktzyklus durchführen. N und/oder V können an der Steuerung 310 konfigurierbar sein.
-
Der Eingabeaktivierungspuffer 606 hat eine Betriebsgröße IA und der Gewichtspuffer 604 hat eine Betriebsgröße W. W und/oder IA können an der Steuerung 310 konfiguriert werden. Der Akkumulationsspeicherpuffer 612 hat eine Betriebsgröße von A. Die „Betriebsgröße“ bezieht sich auf einen Ressourcenpool, der für Berechnungen während des Betriebs einer Vorrichtung zur Verfügung steht, die kleiner als die Gesamt- oder Maximalgröße des Ressourcenpools sein kann. Die Betriebsgröße kann über Register oder andere Einstellungen konfiguriert werden (z.B. für höhere Leistung oder geringeren Energieverbrauch).
-
Jede der Vektor-MAC-Einheiten 602 beinhaltet einen Gewichtssammler- 636 Puffer mit einer Tiefe (z.B. Anzahl der verschiedenen Register oder Adressen in einer Registerdatei) von WD und einer Breite WP (auch Gewichtsgenauigkeit genannt). Die Eingabeaktivierungen haben die Breite IAP. Jede der Vektor-MAC-Einheiten 602 beinhaltet auch einen Akkumulationssammler 638 mit einer Tiefe AD und Breite AP (auch Akkumulationsgenauigkeit genannt). Die V-großen Punktprodukte und der N-große Teilsummenvektor können somit mit jeder Multiplikations-Akkumulations-Einheit 640 mit gemischter Genauigkeit berechnet werden. Einige oder alle von WD, WP, IAP, AD und AP können an der Steuerung 310 konfiguriert werden.
-
Der Lese-(Ausgabe-) Anschluss des Gewichtspuffers 604 ist WP × N × V Bit breit und kann verschiedene Gewichtsvektoren an verschiedene der Vektor-MAC-Einheiten 602 liefern. Der Aktivierungspuffer 606 ist IAP × V Bit groß, da der gleiche IA-Vektor parallel zu allen N Vektor-MAC-Einheiten 602 bereitgestellt wird.
-
Die Werte von V und N können beispielsweise für mehr oder weniger Parallelität und Wiederverwendung von Gewichten angepasst werden. Basierend auf der Konfiguration von N und V können andere Parameter wie W, IA und A angepasst werden, um sicherzustellen, dass die Vektor-MAC-Einheiten 602 während der Faltungsberechnung beschäftigt bleiben.
-
Dem Gewichtspuffer 604 und dem Aktivierungspuffer 606 ist jeweils ein Adressgenerator (Adressgenerator 628 bzw. Adressgenerator 630) zugeordnet, der in jedem Zyklus eine Adresse erzeugt. Ein „Adressgenerator“ bezieht sich auf eine Logik, die Adresswerte in einem Speicher zum Lesen oder Schreiben von Daten von der Adresse berechnet. Die Reihenfolge der von den Vektor-MAC-Einheiten 602 ausgeführten Operationen wird durch diese Adressgeneratoren gesteuert, die konfigurierbar sind, um die zeitliche Wiederverwendung von Gewichten oder Ergebnissen im Akkumulationssammler 638 über Taktzyklen für verschiedene Arten von Datenflüssen zu unterstützen. Die Tiefe WD des Gewichtssammlers 636 kann konfiguriert werden, um je nach den Anforderungen des Datenflusses unterschiedliche Mengen an zeitlicher Wiederverwendung von Gewichtswerten zu ermöglichen. Ebenso kann die Tiefe AD des Akkumulationssammlers 638 konfiguriert werden, um je nach den Anforderungen des Datenflusses unterschiedliche Mengen an zeitlicher Wiederverwendung von Teilsummen zu ermöglichen.
-
Jeder der Gewichtspuffer 604 und Aktivierungspuffer 606 weist auch einen Puffermanager (Gewichtsspeicherpuffer-Manager 626 bzw. Aktivierungsspeicher-puffer-Manager 632) auf, der auf die Steuerung 610 reagiert und die Verfügbarkeit von Daten für die Vektor-MAC-Einheiten 602 bestimmt. Die Abmessungen der Adressgeneratoren und die Granularität der Datenbewegung vom Gewichtspuffer 604 und Aktivierungspuffer 606 zu den Vektor-MAC-Einheiten 602 können in einigen Ausführungsformen an der Steuerung 310 konfigurierbar sein oder automatisch basierend auf anderen Faktoren wie N und V bestimmt werden.
-
Der Akkumulationsspeicherpuffer 612 speichert Teilsummen von allen N Vektor-MAC-Einheiten 602 und kann optimiert werden, um bei jedem Zyklus Lese-Änderungs-Schreib-Vorgänge durchzuführen. Teilsummen von den N Vektor-MAC-Einheiten 602 werden in Vektoren der Breite AP × N verpackt und im Akkumulationsspeicherpuffer 612 gespeichert. Von dort aus können sie entweder direkt an ein anderes Verarbeitungselement zur Reduzierung eines Kreuzens von Verarbeitungselementen oder an den Postprozessor 614 gesendet werden, um endgültige Ausgabeaktivierungen zu erzeugen. Der Postprozessor 614 unterstützt nicht nur Skalierung und Quantisierung, sondern auch ReLU- und Poolingoperationen, um die Schichtfusion zu ermöglichen.
-
Die Eingabegewichte 616 kommen über die Router-Schnittstelle 608 an und werden im Gewichtspuffer 604 gespeichert. Eingangsaktivierungen 618, die auch über die Router-Schnittstelle 608 ankommen, werden im Aktivierungspuffer 606 gespeichert. Berechnete Ausgabeaktivierungen 620 (nach der Nachbearbeitung durch den Postprozessor 614) oder Teilsummen 622 aus dem Akkumulationsspeicherpuffer 612 werden über die Router-Schnittstelle 608 in den globalen Puffer 308 bzw. benachbarte Verarbeitungselemente ausgegeben. Cross-Verarbeitungselement-Reduzierungen 624 von den benachbarten Verarbeitungselementen können von der Router-Schnittstelle 608 empfangen werden und werden im Akkumulationsspeicherpuffer 612 gespeichert.
-
7 stellt exemplarische Eingabeaktivierungsströme in einer Multi-Die-Baueinheit 302 dar, welche einen ersten Die 702, einen zweiten Die 704, einen dritten Die 706 und einen vierten Die 708 umfasst. Eine exemplarische Verbindung 102 zwischen dem dritten Die 706 und dem vierten Die 708 ist in 8 dargestellt. Die Datenflüsse werden im Folgenden für Aktivierungswerte beschrieben; ein ähnlicher Vorgang kann verwendet werden, um Gewichtswerte auf die Verarbeitungselemente der verschiedenen Dies zu verteilen.
-
Der globale Puffer 308, die Steuerung 310 und die Verarbeitungselemente 306 können jeweils ein Netzwerk auf einem Chip (Network-on-a-Chip) umfassen. Die Kombination des West-GRS-Empfängers 402, des West-GRS-Senders 404, des Nord-GRS-Senders 406, des Süd-GRS-Empfängers 408, des Nord-GRS-Empfängers 410, des Süd-GRS-Senders 412, des Ost-GRS-Senders 414 und des Ost-GRS-Empfängers 416 aus jedem Chip kann einen Network-on-a-Package-Router 314 bilden.
-
Ein exemplarischer Multicast einer Eingabeaktivierung durch den ersten Die 702 ist dargestellt. Schritte mit der gleichen Zahl können ungefähr gleichzeitig auftreten, z.B. im gleichen Taktzyklus. Zunächst sendet der globale Puffer 308 des ersten Dies 702 Eingabeaktivierungen an den Router 314 für ein Netzwerk auf einer Baueinheit (Schritt 1a). Einige dieser Eingabeaktivierungen können über Multicast auf das zweite Die 704, das dritte Die 706 und das vierte Die 708 verteilt werden. Der globale Puffer 308 übermittelt gleichzeitig einige dieser Eingabeaktivierungen an die Verarbeitungselemente 306 des ersten Dies 702 (Schritt 1 b). Dies sind Eingabeaktivierungen, die von den Verarbeitungselementen 306 des ersten Dies 702 verarbeitet werden.
-
Der Router 314 des ersten Dies 702 für ein Netzwerk auf einer Baueinheit überträgt dann die Eingabeaktivierungen über den Ost-GRS-Sender 414 (Schritt 2a) und den Süd-GRS-Sender 412 (Schritt 2b). Die an den Ost-GRS-Sender 414 des ersten Dies 702 gesendeten Eingabeaktivierungen können die Eingabeaktivierungen für den vierten Die 708 und den dritten Die 706 sein. Die an den Süd-GRS-Sender 412 des ersten Dies 702 gesendeten Eingabeaktivierungen können die Eingabeaktivierungen für den zweiten Die 704 sein.
-
Der Ost-GRS-Sender 414 des ersten Dies 702 sendet die Eingabeaktivierungen an den West-GRS-Empfänger 402 des vierten Dies 708 (Schritt 3a), und der Süd-GRS-Sender 412 des ersten Dies 702 sendet die Eingabeaktivierungen an den Nord-GRS-Empfänger 410 des zweiten Dies 704 (Schritt 3b). Die Eingabeaktivierungen werden weiter vom West-GRS-Empfänger 402 des vierten Dies 708 an den Router 314 für ein Netzwerk auf einer Baueinheit (Schritt 4a) und vom Nord-GRS-Empfänger 410 des zweiten Dies 704 an den Router 314 für ein Netzwerk auf einer Baueinheit (Schritt 4b) gesendet.
-
Der Router 314 des vierten Dies 708 für ein Netzwerk auf einer Baueinheit sendet die Eingabeaktivierungen an die Verarbeitungselemente 306 des vierten Dies 708 (Schritt 5a) und an den Süd-GRS-Sender 412 des vierten Dies 708 (Schritt 5c). Die Eingabeaktivierungen, die an die Verarbeitungselemente 306 des vierten Dies 708 gesendet werden, können diejenigen Eingabeaktivierungen sein, die für die Verarbeitungselemente 306 des vierten Dies 708 verwendet werden sollen. Die Eingabeaktivierungen, die an den Süd-GRS-Sender 412 des vierten Dies 708 gesendet werden, können diejenigen Eingabeaktivierungen sein, die für die Verarbeitungselemente 306 des dritten Dies 706 verwendet werden. Der Router 314 für ein Netzwerk auf einer Baueinheit sendet die Eingabeaktivierungen auch an die Verarbeitungselemente 306 des zweiten Dies 704, um sie dort einzusetzen (Schritt 5b).
-
Der Süd-GRS-Sender 412 des vierten Dies 708 sendet die Eingabeaktivierungen an den Nord-GRS-Empfänger 410 des dritten Dies 706 (Schritt 6). Diese Eingabeaktivierungen werden dann an die Verarbeitungselemente 306 des dritten Dies 706 gesendet.
-
Innerhalb jedes Dies können die Eingabeaktivierungen über den Router des Dies für ein Netzwerk auf einem Chip an die Verarbeitungselemente des Dies verteilt werden.
-
Sobald die Verarbeitungselemente 306 die Eingabeaktivierungen empfangen haben, können die Verarbeitungselemente 306 die in ihrem Gewichtspuffer gespeicherten Gewichte zur Erzeugung der Ausgabeaktivierungen verwenden. Diese Ausgabeaktivierungen können dann in einem ähnlichen, vorstehend beschriebenen Vorgang, jedoch in umgekehrter Reihenfolge, an den globalen Puffer 308 jedes Dies zur Stufentrennung zwischen den Netzschichten zurückgesendet werden.
-
8 stellt eine exemplarische Verbindung 102 zwischen dem dritten Die 706 und dem vierten Die 708 dar. Die dargestellte Verbindung 102 besteht zwischen einem Sender des vierten Dies 708 und einem Empfänger des dritten Dies 706. Der Sender und der Empfänger können Daten-, Takt-, Masse- (GND-) und Versorgungs-(VDD-) Anschlüsse umfassen. Die Daten-Anschlüsse der Sende-/Empfangs-Vorrichtung können mit den Daten-Anschlüssen des Empfängers gekoppelt werden, um Datenbahnen zu bilden. Die Takt-Anschlüsse der Sende-/Empfangs-Vorrichtung können mit den Takt-Anschlüssen des Empfängers gekoppelt werden, um Taktbahnen zu bilden. In einer Ausführungsform gibt es vier Datenbahnen und eine Taktbahn. Die vier Datenbahnen und die Taktbahn können mit etwa 25 Gbps/Anschluss betrieben werden, für eine Gesamtbandbreite von etwa 768 Gbps (etwa 384 Gbps Inbound und etwa 384 Gbps Outbound) und eine Bandbreitendichte von etwa 369 Gbps/mm2. In einer weiteren Ausführungsform kann die Verbindung 102 mit einer Bandbreite von etwa 12,5 GB/s auf einer Bahn von etwa 3 mm - 7 mm übertragen werden. Dies sind natürlich nur Beispiele.
-
Die Multi-Die-Baueinheit 302 nutzt die Gebundenheit der DNN-Algorithmen aus. Die Berechnung durch die DNN-Schichten kann sowohl räumlich als auch zeitlich über mehrere Dies und mehrere Verarbeitungselemente 306 verteilt werden, um die Auslastung der Multiplikations-Akkumulations-Einheiten 502 zu maximieren, die Leistung zu maximieren, den Stromverbrauch oder eine Abstimmung dieser Faktoren zu minimieren, je nach den Anforderungen der Implementierung. Die jeweilige kachelartige Anordnung bzw. Tiling und der Datenfluss kann durch Einstellen eines oder mehrerer der in Verbindung mit 6 diskutierten konfigurierbaren Werte bestimmt werden.
-
9 bis 12 stellen eine Ausführungsform einer kachelartige Anordnung zur Faltung 900 dar, die verwendet werden kann. Diese Darstellung ist nur ein Beispiel, um die Flexibilität der Möglichkeiten einer kachelartigen Anordnung zu veranschaulichen.
-
Im Allgemeinen wird die Faltung der Eingabeaktivierungen 902 mit den Gewichten 904 durchgeführt, um die Ausgabeaktivierungen 906 zu erzeugen. Die Eingabeaktivierungen 902 können eine Anzahl von Eingangskanälen, C, sowie eine Eingabeaktivierungsgröße, H × B, aufweisen. Die Höhe H und die Breite W können Bildpunktdimensionen sein. Die Tiefe der Eingabe bezüglich der Multi-Die-Baueinheit 302 (z.B. Farbtiefe eines Bildes) kann die Kanaldimension der Eingabe C sein. Jedes der Gewichte 904 kann C Eingabekanäle und eine Gewichtskerngröße R × S aufweisen. Die Anzahl der Gewichte 904 kann der Anzahl der Ausgabekanäle K entsprechen. Die Ausgabeaktivierungen 906 können eine Anzahl von Ausgabekanälen K sowie Ausgabeaktivierungsdimensionen P × Q aufweisen. Auf Paketniveau können die Daten wie folgt verteilt werden: 1) Gewichte werden auf verschiedene Dies entlang der Eingabekanaldimension (C) und der Ausgabekanaldimension (K) verteilt; 2) Eingabeaktivierungen werden mittels Multicast entlang von Verarbeitungselement-Reihen der Dies mit einer passenden Dimension bzw. Abmessung C verteilt; und 3) Ausgabeaktivierungen werden entlang von Verarbeitungselement-Spalten der Dies reduziert. Innerhalb jedes Dies sind die Gewichte ähnlich entlang der C- und K-Dimension der Verarbeitungselemente 306 kachelartig angeordnet. Die Eingabeaktivierungen werden über den Router 312 für ein Netzwerk auf einem Chip per Multicast verteilt. Zusätzlich zu dem in 9 dargestellten C-K-Tiling kann die Multi-Die-Baueinheit 302 auch ein H-W-Tiling für Netzschichten mit einer kleineren Anzahl von Ein-/Ausgabekanälen implementieren.
-
Unter Bezugnahme auf 10 bis 12 stellt eine kachelartige Anordnung 1000 auf Baueinheitsniveau Eingabeaktivierungen dar, die auf Gewichte über verschiedene Chips (Chip 1004, Chip 1006, Chip 1008 und Chip 1010) angewendet werden.
-
Die gesamten Eingabeaktivierungen 902 können durch eine kachelartige Anordnung in die Vielzahl der Chip-Eingabeaktivierungen 1002 eingeteilt werden. Jede der Chip-Eingabeaktivierungen 1002 wird durch eine K tiefe Pipeline verarbeitet, die aus einer Reihe von Verarbeitungselementen eines Chips besteht, die jeweils einen Satz von Gewichten speichern. Wenn K, die Eingabetiefe, die Anzahl der Verarbeitungselemente in einer Chipreihe (Kchip) überschreitet, wird eine erweiterte Reihe von Verarbeitungselementen ausgebildet, die mehrere Chips (Chip 1004, Chip 1006, ....) überspannt.
-
Jede Reihe von Verarbeitungselementen in jedem Chip kann nur einen Teil des Ausgabeaktivierungs-Punktprodukts erzeugen. In diesem Fall werden die Teilprodukte an benachbarte Verarbeitungselemente in der gleichen Spalte des Chips übergeben. Wenn die Größe des Punktprodukts so ist, dass die Anzahl der Teilprodukte die Anzahl der Zeilen in einem Chip übersteigt, geben die Verarbeitungselemente in der letzten Zeile des Chips ihre Teilergebnisse an Verarbeitungselemente in einem benachbarten Chip weiter und bilden eine erweiterte Punktprodukt-Berechnungsspalte. Die Ausgaben des letzten Verarbeitungselements jeder Spalte sind die Chip-Ausgabeaktivierungen 1012, die kombiniert werden, um die endgültigen Ausgabeaktivierungen 906 zu erzeugen.
-
Unter Bezugnahme auf 11 umfasst eine kachelartige Anordnung 1100 auf Chipniveau eine Chip-Eingabeaktivierung 1102, Verarbeitungselement-Eingabeaktivierungen 1104, einen Chip 1106, Verarbeitungselement-Gewichte 1108, Verarbeitungselement-Ausgabeaktivierungen 1110 und eine Chip-Ausgabeaktivierung 1112.
-
Der Chip 1106 kann eine Anzahl von Eingabeaktivierungen 1104 für Verarbeitungselemente, Cchip, von der Chip-Eingabeaktivierung 1102 empfangen. Die Anzahl Cchip entspricht einer Anzahl von Zeilen des Chips 1106. Jede der Verarbeitungselement-Eingabeaktivierungen 1104 wird auf eine andere Reihe von Verarbeitungselementen auf dem Chip 1106 angewendet, wo sie durch Kpe Multiplikations-Akkumulations-Einheiten verarbeitet werden können.
-
Der Chip 1106 weist eine Anzahl von Verarbeitungselementen auf (z.B. 16). Jedes Verarbeitungselement speichert einen Teil der Verarbeitungselementgewichte 1108, beispielsweise einen Teil, der einem bestimmten Faltungsfilterfenster entspricht.
-
Jede Spalte von Verarbeitungselementen (es gibt Kchip solcher Spalten im Chip 1106) erzeugt eine der Verarbeitungselement-Ausgabeaktivierungen 1110, die jeweils ein Teil der Aktivierung 1112 der Chipausgabe sind. Die Verarbeitungselement-Ausgabeaktivierungen 1110 werden kombiniert, um die endgültige Chipausgabe-Aktivierung 1112 zu erzeugen. Jedes Verarbeitungselement kann eine zeitliche kachelartige Anordnung 1200 auf Verarbeitungselementniveau der Eingabeaktivierungen verwenden, um einen Teil einer der Verarbeitungselement-Ausgabeaktivierungen 1110 zu erzeugen, wie es in 12 dargestellt ist.
-
Unter Bezugnahme auf 12 umfasst eine kachelartige Anordnung 1200 auf Verarbeitungselementniveau eine Zeit-Kachel bzw. Tile 1202, eine Zeit-Kachel 1204, eine Zeit-Kachel 1206, eine Zeit-Kachel 1208, eine Zeit-Kachel 1210 und eine Zeit-Kachel 1212 - mit anderen Worten, eine zeitliche Progression. Jede Kachel der zeitlichen Progression zeigt eine Kopplung von Eingabeaktivierungen und Gewichten für die Punktprodukt-/Teilsummen-Berechnung durch die Vektor-MAC-Einheiten in einem bestimmten Verarbeitungselement bzw. PE bei einem anderen Taktzyklus. Eine „Teilsumme“ bezieht sich auf ein Zwischenergebnis einer Multiplikation-Akkumulation bei einer Punkt-Produkt-Akkumulations-Berechnung.
-
Die Multiplikations-Akkumulations-Einheiten des Verarbeitungselements berechnen einen Teil einer großen Punktprodukt-Akkumulation als Teilergebnis und speichern das Teilergebnis im Akkumulationsspeicherpuffer ab oder leiten das Teilergebnis an benachbarte Verarbeitungselemente weiter. Ein „Akkumulationsspeicherpuffer“ bezieht sich auf einen Speicherpuffer, der zum Speichern von Berechnungsergebnissen einer oder mehrerer Multiplikations-Akkumulations-Einheiten verwendet wird. Die Teilergebnisse werden von den Verarbeitungselementen in ein Endergebnis transformiert und an den globalen Puffer übermittelt. Der globale Puffer kann die Endergebnisse zwischen den Schichten des tiefen neuronalen Netzes trennen.
-
Die zeitliche Kachel 1202 stellt eine Anzahl von Berechnungen dar, die zur Zeit T = 0 durchgeführt werden. Ein erster Teil der Verarbeitungselement-Eingabeaktivierung wird mit einem ersten Teil der Verarbeitungselement-Gewichte gefaltet ist. Die zeitliche Kachel 1204 entspricht einer Anzahl von Berechnungen, die zur Zeit T = 1 durchgeführt werden. Ein zweiter Teil der Verarbeitungselement-Eingabeaktivierung wird mit dem ersten Teil der Verarbeitungselement-Gewichte gefaltet. Dieser Vorgang wird für jeden Teil der Verarbeitungselement-Eingabeaktivierung fortgesetzt, bis in der Kachel 1206 bei T = n - 1 alle Teile der Verarbeitungselement-Eingabeaktivierung mit einem ersten Teil der Verarbeitungselement-Gewichte gefaltet wurden. Der Wert „n“ kann der Anzahl der Teile entsprechen, in die die Verarbeitungselement-Eingabeaktivierung unterteilt ist. In einer Ausführungsform kann die Verarbeitungselement-Eingabeaktivierung in eine Anzahl von Zeilen und Spalten unterteilt werden, und jede Zeilen- , Spalten-Iteration wird während eines Taktzyklus berechnet, während eine nächste Iteration während des nächsten Taktzyklus berechnet wird.
-
Sobald die Iterationen für die Verarbeitungselement-Eingabeaktivierung für den ersten Teil der Verarbeitungselementgewichte abgeschlossen sind, iteriert die kachelartige Anordnung 1200 auf Verarbeitungselementniveau bei der Verarbeitungselement-Eingabeaktivierung mit einem zweiten Teil der Verarbeitungselement-Gewichte (die zeitliche Kachel 1208, die zeitliche Kachel 1210 und die zeitliche Kachel 1212). Die zeitliche Kachel 1208 entspricht einer Anzahl von Berechnungen, die zur Zeit T = n durchgeführt werden. Der erste Teil der Verarbeitungselement-Eingabeaktivierung wird mit dem zweiten Teil der Verarbeitungselement-Gewichte gefaltet. Die zeitliche Kachel 1210 entspricht einer Anzahl von Berechnungen, die bei T = n + 1 durchgeführt werden. Der zweite Teil der Verarbeitungselement-Eingabeaktivierung wird mit dem zweiten Teil der Verarbeitungselement-Gewichte gefaltet. Dieser Vorgang wird für jeden Teil der Verarbeitungselement-Eingabeaktivierung fortgesetzt, bis bei der zeitlichen Kachel 1212 bei T = 2n - 1 der letzte Teil der Verarbeitungselement- Eingabeaktivierung mit dem zweiten Teil der Verarbeitungselement-Gewichte gefaltet wird. Die Verarbeitungselement-Eingabeaktivierung kann ähnlich wie beim ersten Teil der Verarbeitungselement-Gewichte iteriert werden. Die kachelartige Anordnung 1200 auf Verarbeitungselementniveau kann fortgesetzt werden, bis jeder Teil der Verarbeitungselement- Eingabeaktivierung für jeden Teil der Verarbeitungselement-Gewichte fertig bearbeitet ist.
-
Verschiedene hierin beschriebene logische Funktionsoperationen können in einer Logik implementiert werden, die mit einem Substantiv oder einer Substantivphrase, die die Operation oder Funktion widerspiegelt, bezeichnet wird. So kann beispielsweise eine Assoziationsoperation von einem „Assoziator“ oder „Korrelator“ durchgeführt werden. Ebenso kann das Schalten durch einen „Schalter“, das Auswählen durch einen „Wähler“ usw. erfolgen.
-
„Logik“ wird hierin für Maschinenspeicherschaltungen, nicht-flüchtige, maschinenlesbare Medien und/oder Schaltungen verwendet, die in ihrer Material- und/oder Materialenergiekonfiguration Steuer- und/oder Verfahrenssignale und/oder Einstellungen und Werte (wie Widerstand, Impedanz, Kapazität, Induktivität, Strom/Spannungswerte usw.) umfassen, die angewendet werden können, um den Betrieb einer Vorrichtung zu beeinflussen. Magnetische Medien, elektronische Schaltungen, elektrische und optische Speicher (sowohl flüchtige als auch nicht-flüchtige) und Firmware sind Beispiele für Logik. Die Logik schließt insbesondere reine Signale oder Software an sich aus (schließt jedoch Maschinenspeicher, die Software umfassen und dadurch Materiekonfigurationen bilden, nicht aus).
-
Innerhalb dieser Offenbarung können verschiedene Einheiten (die unterschiedlich als „Einheiten“, „Schaltkreise“, andere Komponenten usw. bezeichnet werden können) als „ausgestaltet“ beschrieben oder beansprucht werden, um eine oder mehrere Aufgaben oder Operationen auszuführen. Diese Formulierung -[eine Entität], die ausgestaltet ist, um eine oder mehrere Aufgaben auszuführen - wird hierin verwendet, um sich auf eine Struktur zu beziehen (d.h. etwas Physisches, wie eine elektronische Schaltung). Genauer gesagt, wird diese Formulierung verwendet, um anzuzeigen, dass diese Struktur so angeordnet ist, dass sie eine oder mehrere Aufgaben während des Betriebs erfüllt. Eine Struktur kann als „ausgestaltet“ bezeichnet werden, um eine Aufgabe auszuführen, auch wenn die Struktur derzeit nicht betrieben wird. Eine „Kreditverteilungsschaltung, die ausgestaltet ist, um Kredite auf eine Vielzahl von Prozessorkernen zu verteilen“, soll beispielsweise eine integrierte Schaltung abdecken, die über eine Schaltung verfügt, die diese Funktion während des Betriebs erfüllt, auch wenn die betreffende integrierte Schaltung aktuell nicht eingesetzt wird (z.B. ist keine Stromversorgung angeschlossen). So bezieht sich eine Entität, die als „ausgestaltet“ beschrieben oder angegeben wird, um eine Aufgabe auszuführen, auf etwas Physisches, wie z.B. eine Vorrichtung, eine Schaltung, einen Speicher, der Programmanweisungen speichert, die ausführbar sind, um die Aufgabe auszuführen, usw. Dieser Ausdruck wird hierin nicht verwendet, um auf etwas Immaterielles hinzuweisen.
-
Der Begriff „ausgestaltet, um“ bedeutet nicht „ausgestaltbarbar, um“. Ein unprogrammiertes FPGA zum Beispiel würde nicht als „ausgestaltet, um“ angesehen, um eine bestimmte Funktion auszuführen, obwohl es „ausgestaltbar, um“ sein kann, um diese Funktion nach der Programmierung auszuführen.
-
Das Angeben in den beigefügten Ansprüchen, dass eine Struktur „ausgestaltet“ ist, um eine oder mehrere Aufgaben auszuführen, ist ausdrücklich dazu bestimmt, sich nicht auf 35 U.S.C. § 112(f) für dieses Anspruchselement zu berufen. Dementsprechend sollten Ansprüche in dieser Anmeldung, die nicht anderweitig das „Mittel zum“-Konstrukt [zur Ausführung einer Funktion] beinhalten, nicht gemäß 35 U.S.C. § 112(f) ausgelegt werden.
-
Wie es hier verwendet wird, 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 bestimmten Faktoren oder auf den bestimmten Faktoren sowie auf anderen, nicht spezifizierten Faktoren beruhen. Es wird der Ausdruck „Bestimmen von A basierend auf B“ betrachtet. Dieser Ausdruck beschreibt, dass B ein Faktor ist, der zur Bestimmung von A verwendet wird oder die Bestimmung von A beeinflusst. Dieser Ausdruck schließt nicht aus, dass die Bestimmung von A auch auf einem anderen Faktor basieren kann, wie beispielsweise auf C. Dieser Ausdruck soll auch eine Ausführungsform abdecken, in der A ausschließlich basierend auf B bestimmt wird. Wie es hier verwendet wird, ist der Ausdruck „basierend auf“ gleichbedeutend mit dem Ausdruck „zumindest teilweise basierend auf“.
-
Wie es hier verwendet wird, beschreibt der Ausdruck „abhängig von“ einen oder mehrere Faktoren, die einen Effekt auslösen. Dieser Ausdruck schließt die Möglichkeit nicht aus, dass zusätzliche Faktoren die Wirkung beeinflussen oder anderweitig auslösen können. Das heißt, eine Wirkung kann ausschließlich als Reaktion auf diese Faktoren erfolgen oder kann als Reaktion auf die spezifizierten Faktoren sowie andere, nicht spezifizierte Faktoren erfolgen. Es wird der Ausdruck „Ausführen von A abhängig von B“ betrachtet. Dieser Ausdruck besagt, dass B ein Faktor ist, der die Ausführung von A auslöst. Dieser Ausdruck schließt nicht aus, dass die Ausführung von A auch als Reaktion auf einen anderen Faktor, wie beispielsweise C, erfolgen kann. Dieser Ausdruck soll auch eine Ausführungsform abdecken, in der A ausschließlich abhängig von B ausgeführt wird.
-
Wie es hier verwendet wird, werden die Begriffe „erste,“ „zweite,“ usw. als Bezeichnungen für Substantive verwendet, denen sie vorausgehen, und implizieren keine Art von Ordnung (z.B. räumlich, zeitlich, logisch usw.), sofern nicht anders angegeben. So können beispielsweise in einer Registerdatei mit acht Registern die Begriffe „erstes Register“ und „zweites Register“ verwendet werden, um auf zwei beliebige der acht Register zu verweisen, und nicht beispielsweise nur auf die logischen Register 0 und 1.
-
Bei der Verwendung in den Ansprüchen wird der Begriff „oder“ als inklusives Oder und nicht als exklusives Oder verwendet. So bedeutet beispielsweise der Ausdruck „mindestens einer von x, y oder z“ einen von x, y und z sowie eine beliebige Kombination davon.
-
Nach der detaillierten Beschreibung der anschaulichen Ausführungsformen ist klar, dass Änderungen und Abweichungen möglich sind, ohne vom Umfang der beanspruchten Erfindung abzuweichen.