-
VERWANDTE ANMELDUNG
-
Dieses Patent beansprucht die Priorität und den Nutzen der indischen Patentanmeldung, Seriennummer 202141026534, die am 15. Juni 2021 eingereicht wurde. Die indische Patentanmeldung Nr. 202141026534 wird hiermit durch Bezugnahme in ihrer Gesamtheit aufgenommen.
-
GEBIET DER OFFENBARUNG
-
Diese Offenbarung betrifft allgemein maschinelles Lernen und insbesondere Verfahren und Einrichtungen zum Bestimmen von Gewichtungen neuronaler Netzwerke und Durchführen von Aktivierungskomprimierung und -dekomprimierung.
-
STAND DER TECHNIK
-
In den Anwendungsfällen für Deep-Learning besteht eine große Diversität, die anschließend zu einer Explosion beim Bedarf an beschleunigter Inferenz geführt hat. Mit zunehmender Diversität in den Anwendungsfällen befinden sich auch die Größen neuronaler Netzwerke auf einem konsistenten Aufwärtsverlauf, wobei die Modellkomplexität konsistent zunimmt.
-
Figurenliste
-
- 1 veranschaulicht ein beispielhaftes System gemäß den Lehren dieser Offenbarung.
- 2 veranschaulicht eine beispielhafte Matrixkomprimierungsschaltungsanordnung des Systems aus 1.
- 3 veranschaulicht eine beispielhafte Metadatenerzeugungsschaltungsanordnung der beispielhaften Matrixkomprimierungsschaltungsanordnung aus 2.
- 4 veranschaulicht eine beispielhafte Kachelkomprimierung, die durch die Matrixkomprimierungsschaltungsanordnung aus 2 ausgeführt wird.
- 5 veranschaulicht einen beispielhaften Speicher der beispielhaften Matrixkomprimierungsschaltungsanordnung aus 2.
- 6 veranschaulicht eine beispielhafte Matrixdekomprimierungsschaltungsanordnung des Systems aus 1.
- 7 veranschaulicht eine beispielhafte Implementierung der beispielhaften Matrixdekomprimierungsschaltungsanordnung aus 6 in einem beispielhaften Matrixbetriebssystem.
- 8 veranschaulicht eine andere beispielhafte Implementierung der beispielhaften Matrixdekomprimierungsschaltungsanordnung aus 6.
- 9 veranschaulicht beispielhaften Pseudocode, der repräsentativ für beispielhafte Dekomprimierungsoperationen ist, die durch die Matrixdekomprimierungsschaltungsanordnung aus 6 ausführbar sind.
- 10A veranschaulicht einen beispielhaften Datenfluss eines Systems nach dem Stand der Technik.
- 10B veranschaulicht einen beispielhaften Datenfluss des beispielhaften Matrixbetriebssystems aus 7.
- 11 ist ein Flussdiagramm, das repräsentativ für eine beispielhafte maschinenlesbare Anweisungen ist, die durch eine beispielhafte Prozessorschaltungsanordnung ausgeführt werden können, um die beispielhafte Matrixkomprimierungsschaltungsanordnung aus 2 zu implementieren.
- 12 ist ein Flussdiagramm, das repräsentativ für beispielhafte maschinenlesbare Anweisungen ist, die durch eine beispielhafte Prozessorschaltungsanordnung ausgeführt werden können, um die beispielhafte Metadatenerzeugungsschaltungsanordnung aus 3 zu implementieren.
- 13 ist ein Flussdiagramm, das repräsentativ für beispielhafte maschinenlesbare Anweisungen ist, die durch eine beispielhafte Prozessorschaltungsanordnung ausgeführt werden können, um die beispielhafte Matrixdekomprimierungsschaltungsanordnung aus 6 zu implementieren.
- 14 ist ein Blockdiagramm einer beispielhaften Verarbeitungsplattform, die eine Prozessorschaltungsanordnung beinhaltet, die zum Ausführen der beispielhaften maschinenlesbaren Anweisungen aus 11 und 12 strukturiert ist, um die beispielhafte Matrixkomprimierungsschaltungsanordnung aus 2 zu implementieren.
- 15 ist ein Blockdiagramm einer beispielhaften Verarbeitungsplattform, die eine Prozessorschaltungsanordnung beinhaltet, die zum Ausführen der beispielhaften maschinenlesbaren Anweisungen aus 13 strukturiert ist, um die beispielhafte Matrixdekomprimierungsschaltungsanordnung aus 6 zu implementieren.
- 16 ist ein Blockdiagramm einer beispielhaften Implementierung der Prozessorschaltungsanordnung aus 14 und 15.
- 17 ist ein Blockdiagramm einer anderen beispielhaften Implementierung der Prozessorschaltungsanordnung aus 14 und 15.
- 18 ist ein Blockdiagramm einer beispielhaften Softwareverteilungsplattform (z. B. ein oder mehrere Server) zum Verteilen von Software (z. B. Software, die den beispielhaften maschinenlesbaren Anweisungen aus 11, 12 und 13 entspricht) an Client-Vorrichtungen, die Endbenutzern und/oder Verbrauchern (z. B. für Lizenzierung, Verkauf und/oder Verwendung), Einzelhändlern (z. B. für Verkauf, Wiederverkauf, Lizenzierung und/oder Sublizenzierung) und/oder Originalgeräteherstellern (OEMs) (z. B. zur Aufnahme in Produkte, die zum Beispiel an Einzelhändler und/oder an andere Endbenutzer, wie Direktkaufkunden, zu verteilen sind) zugeordnet sind.
-
Allgemein werden die gleichen Bezugsziffern durchweg in der (den) Zeichnung(en) und der begleitenden schriftlichen Beschreibung verwendet, um auf die gleichen oder ähnliche Teile zu verweisen. Wie hierin verwendet, können Verbindungsbezüge (zum Beispiel angebracht, gekoppelt, verbunden und zusammengefügt) Zwischenglieder zwischen den Elementen, auf die von der Verbindungsreferenz verwiesen wird, und/oder eine Relativbewegung zwischen diesen Elementen beinhalten, sofern nichts anderes angegeben ist. Daher schließen Verbindungsbezüge nicht notwendigerweise aus, dass zwei Elemente direkt und/oder in fester Beziehung zueinander verbunden sind. Wie hier verwendet, ist die Angabe, dass sich irgendein Teil in „Kontakt“ mit einem anderen Teil befindet, so definiert, dass es keinen Zwischenteil zwischen den zwei Teilen gibt.
-
Sofern nicht explizit anders angegeben, werden Deskriptoren, wie etwa „erste/r/s“, „zweite/r/s“, „dritte/r/s“ usw., vorliegend verwendet, ohne irgendeine Bedeutung von Priorität, physischer Reihenfolge, Anordnung in einer Liste und/oder Reihenfolge auf irgendeine Weise zu unterstellen oder anderweitig anzugeben, sondern werden lediglich als Bezeichnungen und/oder willkürliche Namen verwendet, um Elemente zum einfachen Verständnis der offenbarten Beispiele zu unterscheiden. In einigen Beispielen kann der Deskriptor „erstes“ verwendet werden, um auf ein Element in der ausführlichen Beschreibung zu verweisen, während auf dasselbe Element in einem Anspruch mit einem unterschiedlichen Deskriptor, wie „zweites“ oder „drittes“, verwiesen wird. In derartigen Fällen versteht es sich, dass derartige Deskriptoren lediglich zum eindeutigen Identifizieren dieser Elemente verwendet werden, die zum Beispiel ansonsten einen gleichen Namen teilen könnten. Wie hier verwendet, ist „Prozessorschaltungsanordnung“ so definiert, dass sie (i) eine oder mehrere elektrische Spezialschaltungen beinhaltet, die zum Durchführen einer oder mehrerer spezifischer Operationen strukturiert sind und eine oder mehrere halbleiterbasierte Logikvorrichtungen (z. B. elektrische Hardware, die durch einen oder mehrere Transistoren implementiert wird) beinhalten, und/oder (ii) eine oder mehrere universelle halbleiterbasierte elektrische Schaltungen beinhaltet, die mit Anweisungen zum Durchführen spezifischer Operationen programmiert sind und eine oder mehrere halbleiterbasierte Logikvorrichtungen (z. B. elektrische Hardware, die durch einen oder mehrere Transistoren implementiert wird) beinhalten. Beispiele für Prozessorschaltlogik umfassen programmierte Mikroprozessoren, feldprogrammierbare Gate-Arrays (FPGAs), die Anweisungen instanziieren können, Zentralprozessoreinheiten (CPUs), Grafikprozessoreinheiten (GPUs), Digitalsignalprozessoren (DSPs), XPUs oder Mikrocontroller und integrierte Schaltungen wie anwendungsspezifische integrierte Schaltungen (ASICs). Zum Beispiel kann eine XPU durch ein heterogenes Datenverarbeitungssystem implementiert werden, das mehrere Typen von Prozessorschaltungsanordnungen (z. B. ein oder mehrere FPGAs, eine oder mehrere CPUs, eine oder mehrere GPUs, einen oder mehrere DSPs usw., und/oder eine Kombination aus diesen) und Anwendungsprogrammierschnittstelle(n) (API(s)) beinhaltet, die Datenverarbeitungsaufgabe(n) jedem der mehreren Typen von Verarbeitungsschaltungsanordnung zuweisen können, die am besten zum Ausführen der Datenverarbeitungsaufgabe(n) geeignet ist/sind.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Künstliche Intelligenz mit kleiner Batch-Größe nutzt eine signifikante Speicherbandbreite, wie etwa, wenn ein künstliches Intelligenzsysteme neuronale Netzwerkgewichte (z. B. eine Gewichtungsmatrix) aus einem dynamischen Direktzugriffsspeicher (DRAM) abruft, um eine Inferenz durchzuführen. Von daher kann die Gewichtungsmatrix eine Engstelle verursachen, die eine Rate begrenzt, mit der das neuronale Netzwerk eine Inferenz durchführt.
-
Um die Leistungsfähigkeitsengstelle zu adressieren, kann die Speicherbandbreite erhöht werden. Das Erhöhen der Speicherbandbreite führt jedoch zu erhöhten Gesamtbetriebskosten (TCO) und Gelegenheitskosten für einen Benutzer (z. B. Kosten, die mit dem Implementieren eines Speichers mit hoher Bandbreite (HBM), dem Hinzufügen von mehr Speicherkanälen oder Dual-In-Line-Speichermodulen (DIMMs) usw. assoziiert sind). Zusätzlich dazu können sich Bandbreitenprobleme immer noch mit der erhöhten Speicherbandbreite manifestieren, wenn die Gewichtungen des neuronalen Netzwerks zwischen den Schichten bewegt werden, infolge großer Gewichtungsmatrizen und/oder Gewichtungsmatrizen mit großer Spärlichkeit.
-
Vorherige Lösungen nutzen strukturierte Spärlichkeit, um zu ermöglichen, dass bestimmte Berechnungen übersprungen werden. Solche Lösungen beinhalten Neutrainieren des neuronalen Netzwerks zum Ausnullen bestimmter Faltungsfilter oder Überspringen großer kontinuierlicher Datenblöcke. Neutrainieren neuronaler Netzwerke zum Nutzen strukturierter Spärlichkeit ist jedoch nicht immer möglich, und Ressourcen und Anforderungen, die mit Neutrainieren assoziiert sind, können Implementierungsherausforderungen darstellen.
-
Hierin offenbarte Beispiele erzeugen Metadaten, die einer Matrix (z. B. einer Kachel) neuronaler Netzwerkgewichtungen entsprechen. In hierin offenbarten Beispielen geben die Metadaten an, ob die Matrix komprimiert ist. Als Reaktion darauf, dass die Matrix komprimiert wird, geben die Metadaten eine Cache-Größe der komprimierten Matrix und eine Komprimierungsoperation an, die zum Komprimieren der Matrix genutzt wird. Dementsprechend geben die Metadaten einen Ort der komprimierten Matrix und einen Prozess an, der zum Dekomprimieren der Matrix auszuführen ist.
-
Hierin offenbarte Beispiele nutzen unstrukturierte Spärlichkeit, was eine Sparsifizierung von über 80 % in neuronalen Netzwerken ermöglicht, während eine Genauigkeit davon beibehalten wird. Unstrukturierte Spärlichkeit kann genutzt werden, um Gewichtungen neuronaler Netzwerke zu komprimieren, während die Bandbreitennutzung zwischen einem dynamischen Direktzugriffsspeicher (DRAM) und einem Kern und/oder zwischen Kernen reduziert wird. Unstrukturierte Spärlichkeit ist ein allgemeinerer Ansatz zur Sparsifizierung neuronaler Netzwerke und fasst alle Verfahren zusammen, die sich auf strukturierte Spärlichkeit konzentrieren. Dementsprechend ist das hierin offenbarte beispielhafte Programm flexibel zur Verwendung mit einem gemischten spärlichen Modell. Im Gegenzug reduzieren die spärlichen neuronalen Netze eine Speicherbandbreitenanforderung, die mit dem Durchführen einer Inferenz assoziiert ist, während eine Genauigkeit davon beibehalten wird. Zusätzlich dazu kann das Durchführen einer unstrukturierten Sparsifizierung an den Gewichtungen des neuronalen Netzwerks eine Rate beschleunigen, mit der das neuronale Netzwerk eine Inferenz durchführt.
-
Darüber hinaus stellen hierin offenbarte Beispiele eine Methodik bereit, die AVX- (Advanced Vector Extension) und AMX-Technologie (Advanced Matrix Extension) nutzt, um eine Komprimierung quantisierter neuronaler Netzwerkgewichte mit unstrukturierter Spärlichkeit zu ermöglichen. Zum Beispiel kann ein beispielhaftes Programm (z. B. ein Maschinenlernprogramm), das AVX nutzt, Ersatzverarbeitungszyklen nutzen, um Gewichtungen neuronaler Netzwerke zu komprimieren und/oder zu dekomprimieren. Von daher verbessern hierin offenbarte Beispiele die Recheneffizienz (z. B. Kachelmatrixmultiplikation über AMX, Ausführungseinheiten auf GPUs) zusätzlich zur effizienten Nutzung der Bandbreite. Insbesondere kann das beispielhafte Programm die Dateneffizienz eines Caches verbessern, sodass sich der Cache von einem Cache auf niedriger Ebene (LLC) zu einem Cache auf mittlerer ebene (MLC) verbessert.
-
1 veranschaulicht ein beispielhaftes System 100 gemäß hierin offenbarten Beispielen. In 1 umfasst das System 100 eine neuronale Netzwerkschaltungsanordnung 102, eine Matrixkomprimierungsschaltungsanordnung 104 und eine Matrixdekomprimierungsschaltungsanordnung 106. In 1 sind die neuronale Netzwerkschaltungsanordnung 102, die Matrixkomprimierungsschaltungsanordnung 104 und die Matrixdekomprimierungsschaltungsanordnung 106 kommunikativ über einen Bus 108 gekoppelt.
-
In dem veranschaulichten Beispiel aus 1 beinhaltet die neuronale Netzwerkschaltungsanordnung 102 Gewichtungsmatrizen (z. B. Kacheln), die mit einem Deep-Learning-Modell assoziiert sind. Entsprechend kann die neuronale Netzwerkschaltungsanordnung 102 Inferenzen basierend auf den Gewichtungsmatrizen erhalten, die mit dem Deep-Learning-Modell assoziiert sind. In 1 sendet die neuronale Netzwerkschaltungsanordnung 102 als Reaktion darauf, dass das Deep-Learning-Modell trainiert wird, die Gewichtungsmatrizen an die Matrixkomprimierungsschaltungsanordnung 104.
-
In dem veranschaulichten Beispiel aus 1 führt die Matrixkomprimierungsschaltungsanordnung 104 einen Komprimierungsprozess aus, um komprimierte Daten zu erhalten, die Gewichtungen in den Gewichtungsmatrizen entsprechen. Außerdem bestimmt die Matrixkomprimierungsschaltungsanordnung 104 Metadaten, die mit den komprimierten Daten und/oder den Gewichtungsmatrizen assoziiert sind, wie ferner in hierin offenbarten Beispielen besprochen ist. In 1 sendet die Matrixkomprimierungsschaltungsanordnung 104 die komprimierten Daten und die Metadaten an die Matrixdekomprimierungsschaltungsanordnung 106.
-
In manchen Beispielen wird die Matrixkomprimierungsschaltungsanordnung 104 als Reaktion auf das Senden der komprimierten Daten und der Metadaten an die Matrixdekomprimierungsschaltungsanordnung 106 von dem Bus 108 getrennt. Zum Beispiel kann die Matrixkomprimierungsschaltungsanordnung 104 die Gewichtungsmatrizen während eines Installationsprozesses komprimieren, der mit der neuronalen Netzwerkschaltungsanordnung 102 assoziiert ist. Dementsprechend kann die Matrixdekomprimierungsschaltungsanordnung 106 die komprimierten Daten und die Metadaten zur Verwendung speichern.
-
In dem veranschaulichten Beispiel aus 1 dekomprimiert die Matrixdekomprimierungsschaltungsanordnung 106 als Reaktion auf eine Anforderung von der neuronalen Netzwerkschaltungsanordnung 102 zumindest einen Teil der komprimierten Daten, um eine oder mehrere der Gewichtungsmatrizen zu erhalten. Zum Beispiel kann die Anforderung von der neuronalen Netzwerkschaltungsanordnung 102 eine Adresse einer jeweiligen Gewichtungsmatrix beinhalten. In 1 dekomprimiert die Matrixdekomprimierungsschaltungsanordnung 106 die komprimierten Daten basierend auf den Metadaten, wie ferner in hierin offenbarten Beispielen besprochen. In 1 sendet die Matrixdekomprimierungsschaltungsanordnung 106 die unkomprimierten Daten an die neuronale Netzwerkschaltungsanordnung 102, die wiederum eine Inferenz basierend auf einer oder mehreren empfangenen Eingaben durchführen kann.
-
2 veranschaulicht die beispielhafte Matrixkomprimierungsschaltungsanordnung 104 aus 1. In 2 umfasst die Matrixkomprimierungsschaltungsanordnung 104 einen Datensendeempfänger 202, eine Abschneideschaltungsanordnung 204, eine Komprimierungsentscheidungsschaltungsanordnung 206, eine Komprimierungsschaltungsanordnung 208, eine Metadatenerzeugungsschaltungsanordnung 210 und einen Speicher (z. B. einen linearen Speicher, einen DRAM usw.) 212. In 1 sind der Datensendeempfänger 202, die Abschneideschaltungsanordnung 204, die Komprimierungsentscheidungsschaltungsanordnung 206, die Komprimierungsschaltungsanordnung 208, die Metadatenerzeugungsschaltungsanordnung 210 und der Speicher 212 kommunikativ über einen Bus 214 gekoppelt.
-
In dem veranschaulichten Beispiel aus 2 empfängt der Datensendeempfänger 202 Gewichtungsmatrizen von der neuronalen Netzwerkschaltungsanordnung 102. Im Gegenzug kann der Datensendeempfänger 202 die Gewichtungsmatrizen an die Abschneideschaltungsanordnung 204 senden. In 2 sendet der Datensendeempfänger 202 komprimierte Daten und Metadaten, die mit den komprimierten Daten assoziiert sind, an die Matrixdekomprimierungsschaltungsanordnung 106. Insbesondere sendet der Datensendeempfänger 202 im Speicher 212 gespeicherte Daten an die Matrixdekomprimierungsschaltungsanordnung 106.
-
In dem veranschaulichten Beispiel aus 2 schneidet die Abschneideschaltungsanordnung 204 Gewichtungen in den Gewichtungsmatrizen ab. Zum Beispiel kann die Abschneideschaltungsanordnung 204 die Gewichtungen in den Gewichtungsmatrizen abschneiden, die unterhalb eines Schwellenwerts liegen. Das Deep-Learning-Modell, das mit der neuronalen Netzwerkschaltungsanordnung 102 assoziiert ist, wird trainiert, die Gewichtungen, die unter der Schwelle liegen, während einer Trainingsperiode neu zu lernen. Von daher wird eine Genauigkeit des Deep-Learning-Modells beim Abschneiden beibehalten. In 2 sendet die Abschneideschaltungsanordnung 204 die Gewichtungsmatrizen an die Komprimierungsentscheidungsschaltungsanordnung 206.
-
In dem veranschaulichten Beispiel aus 2 bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206, ob die jeweiligen Gewichtungsmatrizen komprimierbar sind, und falls ja, welcher Komprimierungsprozess zu nutzen ist. Zum Beispiel kann die Komprimierungsentscheidungsschaltungsanordnung 206 basierend auf Gewichtungen in der Gewichtungsmatrix und/oder potenziellen Platzeinsparungen, die aus dem Komprimieren der Gewichtungsmatrix resultieren würden, bestimmen, ob eine Gewichtungsmatrix komprimierbar ist. In manchen Beispielen identifiziert die Komprimierungsentscheidungsschaltungsanordnung 206 eine Anzahl von Gewichtungen in der Gewichtungsmatrix mit einem Wert von null als Reaktion darauf, dass die Abschneideschaltungsanordnung 204 die Gewichtungsmatrix abschneidet. Zum Beispiel kann die Komprimierungsentscheidungsschaltungsanordnung 206 die Gewichtungen in der Gewichtungsmatrix mit einem Wert von null mit einer Gewichtungsschwelle (z. B. vier Gewichtungen, fünf Gewichtungen, sechs Gewichtungen usw.) vergleichen. Ferner kann die Komprimierungsentscheidungsschaltungsanordnung 206 entscheiden, die Gewichtungsmatrix nicht zu komprimieren, als Reaktion darauf, dass die Gewichtungsmatrix weniger Gewichtungen mit einem Wert von null als die Gewichtungsschwelle aufweist. Insbesondere bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206 Platzeinsparungen, die daraus resultieren würden, dass Komprimieren der Gewichtungsmatrix kleiner als eine Schwelle wäre (z. B. ein Byte). Im Gegenzug beschleunigt die Komprimierungsentscheidungsschaltungsanordnung 206 eine kollektive Komprimierung der Gewichtungsmatrizen durch Überspringen von Komprimierungsoperationen, die ansonsten zu unbedeutenden Platzeinsparungen führen würden (z. B. weniger als ein Byte). Im Gegenzug kann die Komprimierungsentscheidungsschaltungsanordnung 206 die Gewichtungsmatrix an die Metadatenerzeugungsschaltungsanordnung 210 und/oder den Speicher 212 senden. In einigen Beispielen sendet die Komprimierungsentscheidungsschaltungsanordnung 206 ein Signal, das angibt, dass die Gewichtungsmatrix unkomprimiert ist, an die Metadatenerzeugungsschaltungsanordnung 210.
-
In dem dargestellten Beispiel aus 2 bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206 einen Komprimierungsprozess, der durch die Komprimierungsschaltungsanordnung 208 auszuführen ist. In manchen Beispielen bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206 den Komprimierungsprozess, der durch die Komprimierungsschaltungsanordnung 208 auszuführen ist, basierend auf den Gewichtungen in der Gewichtungsmatrix. Zum Beispiel kann die Komprimierungsentscheidungsschaltungsanordnung 206 bestimmen, dass die Komprimierungsschaltungsanordnung 208 einen ersten Komprimierungsprozess (z. B. „Null-Komprimierung“) als Reaktion darauf ausführen soll, dass die Gewichtungsmatrix mindestens eine Gewichtung mit einem Nicht-Null-Wert beinhaltet. In einigen Beispielen bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206, dass die Komprimierungsschaltungsanordnung 208 einen zweiten Komprimierungsprozess (z. B. „alle Null“) ausführen soll, als Reaktion darauf, dass die Gewichtungen der Gewichtungsmatrix alle Werte von Null aufweisen. In 2 sendet die Komprimierungsentscheidungsschaltungsanordnung 206 ein Signal, das den auszuführenden Komprimierungsprozess angibt, an die Komprimierungsschaltungsanordnung 208 und die Metadatenerzeugungsschaltungsanordnung 210.
-
In dem dargestellten Beispiel aus 2 komprimiert die Komprimierungsschaltungsanordnung 208 die Gewichtungsmatrizen. In 2 führt die Komprimierungsschaltungsanordnung 208 den Komprimierungsprozess aus, der durch die Komprimierungsentscheidungsschaltungsanordnung 206 bestimmt wird, um die jeweiligen Gewichtungsmatrizen zu komprimieren. Zum Beispiel kann die Komprimierungsschaltungsanordnung 208 eine erste Funktion zum Implementieren des ersten Komprimierungsprozesses als Reaktion auf das Empfangen eines ersten Signals über die Komprimierungsentscheidungsschaltungsanordnung 206 ausführen. Ferner kann die Komprimierungsschaltungsanordnung 208 eine zweite Funktion zum Implementieren des zweiten Komprimierungsprozesses als Reaktion auf das Empfangen eines zweiten Signals über die Komprimierungsentscheidungsschaltungsanordnung 206 ausführen. In manchen Beispielen, wenn die Komprimierungsschaltungsanordnung 208 den ersten Komprimierungsprozess ausführt, soll die Komprimierungsschaltungsanordnung 208 eine Bitmap erzeugen, die jeweilige Orte der Gewichtungen in einer Gewichtungsmatrix angibt. Insbesondere wandelt die Komprimierungsschaltungsanordnung 208 jedes Byte in der Gewichtungsmatrix in ein jeweiliges Bit in der Bitmap um. Ferner soll die Komprimierungsschaltungsanordnung 208 Gewichte ungleich null in der Gewichtungsmatrix in ein komprimiertes Array packen.
-
In 2 sendet die Komprimierungsschaltungsanordnung 208 komprimierte Daten einschließlich der Bitmap und des dichten Arrays an die Metadatenerzeugungsschaltungsanordnung 210 und den Speicher 212. In 2 speichert die Komprimierungsschaltungsanordnung 208 die komprimierten Daten für aufeinanderfolgende Gewichtungsmatrizen in aufeinanderfolgenden Sätzen von Cachezeilen im Speicher 212. In einigen Beispielen speichert die Komprimierungsschaltungsanordnung 208 die Bitmap in einer anfänglichen Cachezeile eines Satzes von Cachezeilen für die jeweilige Gewichtungsmatrix. In solchen Beispielen speichert die Komprimierungsschaltungsanordnung 208 das dichte Array in einer oder mehreren Cachezeilen anschließend an die anfängliche Bitmap-Cachezeile in dem Satz von Cachezeilen für die jeweilige Gewichtungsmatrix.
-
In dem dargestellten Beispiel aus 2 bestimmt die Metadatenerzeugungsschaltungsanordnung 210 Metadaten für die komprimierten Daten. Zum Beispiel kann die Metadatenerzeugungsschaltungsanordnung 210 1 Byte Metadaten für die komprimierten Daten erzeugen, die mit den jeweiligen Gewichtungsmatrizen assoziiert sind. In einigen Beispielen gibt die Metadatenerzeugungsschaltungsanordnung 210 eine Größe der komprimierten Daten und/oder ein Verfahren an, gemäß dem die jeweilige Gewichtungsmatrix in den Metadaten komprimiert wurde, wie ferner in Verbindung mit 3 erörtert wird. In 2 speichert die Metadatenerzeugungsschaltungsanordnung 210 die Metadaten über den Speicher 212. Insbesondere speichert die Metadatenerzeugungsschaltungsanordnung 210 die Metadaten für die jeweiligen Gewichtungsmatrizen in einer führenden Cachezeile des Speichers 212.
-
In dem dargestellten Beispiel aus 2 speichert der Speicher 212 die Metadaten und die komprimierten Daten. In 2 ist der Speicher 212 ein linearer Speicher. In 2 organisiert der Speicher 212 die Metadaten und die komprimierten Daten nach Cachezeilen. Zum Beispiel kann eine erste Cachezeile des Speichers 212 die Metadaten für jede der jeweiligen Gewichtungsmatrizen beinhalten. Zusätzlich kann der Speicher 212 die komprimierten Daten umfassen, die mit einer ersten Gewichtungsmatrix in einem ersten Satz von Cachezeilen assoziiert sind, die nach der ersten Cachezeile positioniert sind. Gleichermaßen kann der Speicher 212 die komprimierten Daten beinhalten, die mit einer zweiten Gewichtungsmatrix in einem zweiten Satz von Cachezeilen assoziiert sind, die nach dem ersten Satz von Cachezeilen positioniert sind. Darüber hinaus beinhaltet die erste Cachezeile des Speichers 212 die Metadaten, die mit der ersten Gewichtungsmatrix assoziiert sind, gefolgt von den Metadaten für die zweite Gewichtungsmatrix, um eine Abbildung zwischen den Metadaten und den assoziierten komprimierten Daten zu ermöglichen.
-
3 veranschaulicht die Metadatenerzeugungsschaltungsanordnung 210 aus 2. In dem dargestellten Beispiel aus 3 umfasst die Metadatenerzeugungsschaltungsanordnung 210 eine Komprimierungsdatenidentifizierungsschaltungsanordnung 302, eine Datengrößenbestimmungsschaltungsanordnung 304, eine Komprimierungsprozessbestimmungsschaltungsanordnung 306 und eine Metadatenaufzeichnungsschaltungsanordnung 308. In dem dargestellten Beispiel aus 3 sind die Komprimierungsdatenidentifizierungsschaltungsanordnung 302, die Datengrößenbestimmungsschaltungsanordnung 304, die Komprimierungsprozessbestimmungsschaltungsanordnung 306 und die Metadatenaufzeichnungsschaltungsanordnung kommunikativ über einen Bus 310 gekoppelt.
-
In manchen Beispielen kann die Metadatenerzeugungsschaltungsanordnung 210 komprimierte Daten über die Komprimierungsschaltungsanordnung 208 empfangen und/oder greift als Reaktion darauf, dass eine Gewichtungsmatrix komprimiert wird, über den Speicher 212 auf die komprimierten Daten zu. In manchen Beispielen empfängt die Metadatenerzeugungsschaltungsanordnung 210 über die Komprimierungsentscheidungsschaltungsanordnung 206 ein Signal, das einen Komprimierungsprozess angibt, der ausgeführt wird, um die komprimierten Daten zu erhalten. In einigen Beispielen empfängt die Metadatenerzeugungsschaltungsanordnung 210 die Gewichtungsmatrix und/oder ein Signal, das angibt, dass die Gewichtungsmatrix unkomprimiert ist, über die Komprimierungsentscheidungsschaltungsanordnung 206.
-
In dem dargestellten Beispiel aus 3 bestimmt die Komprimierungsdatenidentifizierungsschaltungsanordnung 302, ob die empfangenen Daten komprimiert sind. In 3 kann die Komprimierungsdatenidentifizierungsschaltungsanordnung 302 bestimmen, dass die Daten als Reaktion auf das Empfangen der Daten über die Komprimierungsschaltungsanordnung 208 und/oder als Reaktion auf das Empfangen des Signals, das den Komprimierungsprozess angibt, über die Komprimierungsentscheidungsschaltungsanordnung 206 komprimiert werden. In 3 bestimmt die Komprimierungsdatenidentifizierungsschaltungsanordnung 302, als Reaktion auf das Empfangen der Daten über die Komprimierungsentscheidungsschaltungsanordnung 206 oder als Reaktion auf das Nichtempfangen der Daten über die Komprimierungsschaltungsanordnung 208, dass die Daten unkomprimiert sind. In manchen Beispielen bestimmt die Komprimierungsdatenidentifizierungsschaltungsanordnung 302, als Reaktion auf das Empfangen eines Signals, das angibt, dass die Gewichtungsmatrix unkomprimiert ist, über die Komprimierungsentscheidungsschaltungsanordnung 206, dass die Daten unkomprimiert sind. In 3 gibt die Komprimierungsdatenidentifizierungsschaltungsanordnung 302 der Metadatenaufzeichnungsschaltungsanordnung 308 an, ob die Daten komprimiert werden.
-
In dem dargestellten Beispiel aus 3 bestimmt die Datengrößenbestimmungsschaltungsanordnung 304 eine Größe der Daten als Reaktion darauf, dass die Daten komprimiert werden. In manchen Beispielen bestimmt die Datengrößenbestimmungsschaltungsanordnung 304, wenn die Daten komprimiert werden, eine Cachegröße der Daten als Reaktion auf das Empfangen der Daten über die Komprimierungsschaltungsanordnung 208 und/oder das Zugreifen auf die Daten über den Speicher 212. Zum Beispiel kann die Datengrößenbestimmungsschaltungsanordnung 304 eine Anzahl von Cachezeilen bestimmen, die durch die Daten belegt sind. In 3 sendet die Datengrößenbestimmungsschaltungsanordnung 304 ein Signal, das die Anzahl von Cachezeilen angibt, die von der Gewichtungsmatrix belegt werden, an die Metadatenaufzeichnungsschaltungsanordnung 308.
-
In einigen Beispielen bestimmt die Datengrößenbestimmungsschaltungsanordnung 304 basierend auf der Cachegröße der Daten, ob die Daten komprimiert sind. Zum Beispiel kann die Datengrößenbestimmungsschaltungsanordnung 304 bestimmen, dass die Daten unkomprimiert sind, als Reaktion darauf, dass die Daten eine vorbestimmte Cachegröße (z. B. eine ursprüngliche Größe der Gewichtungsmatrix) belegen, die mit einer unkomprimierten Gewichtungsmatrix assoziiert ist, wie etwa sechzehn Cachezeilen. Dementsprechend bestimmt die Datengrößenbestimmungsschaltungsanordnung 304, wenn die Cachegröße der Daten kleiner als die vorbestimmte Cachegröße ist, dass die Daten komprimiert sind. In einigen Beispielen sendet die Datengrößenbestimmungsschaltungsanordnung 304 ein Signal, das angibt, ob die Daten komprimiert sind, an die Metadatenaufzeichnungsschaltungsanordnung 308.
-
In dem dargestellten Beispiel aus 3 bestimmt die Komprimierungsprozessbestimmungsschaltungsanordnung 306 den Prozess, der zum Komprimieren der Gewichtungsmatrix ausgeführt wird. In 3 bestimmt die Komprimierungsprozessbestimmungsschaltungsanordnung 306 den ausgeführten Komprimierungsprozess basierend auf dem Signal, das den Komprimierungsprozess angibt, das über die Komprimierungsentscheidungsschaltungsanordnung 206 empfangen wird. In einigen Beispielen analysiert die Komprimierungsprozessbestimmungsschaltungsanordnung 306 die komprimierte Gewichtungsmatrix, um den ausgeführten Komprimierungsprozess zu bestimmen. Zum Beispiel kann die Komprimierungsprozessbestimmungsschaltungsanordnung 306 als Reaktion darauf, dass die Gewichtungsmatrix nur Gewichtungen mit einem Wert von Null beinhaltet, bestimmen, dass ein „Alle-Null“-Komprimierungsprozess ausgeführt wurde, um die komprimierte Gewichtungsmatrix zu erhalten. Ferner kann die Komprimierungsprozessbestimmungsschaltungsanordnung 306 als Reaktion darauf, dass die Daten eine Bitmap und/oder ein dichtes Array von Gewichtungen mit Werten ungleich null beinhalten, bestimmen, dass eine „Null-Komprimierungs“-Prozess ausgeführt wurde, um die komprimierte Gewichtungsmatrix zu erhalten. In 3 sendet die Komprimierungsprozessbestimmungsschaltungsanordnung 306 ein Signal, das den Komprimierungsprozess angibt, der ausgeführt wird, um die Daten zu erhalten, an die Metadatenaufzeichnungsschaltungsanordnung 308.
-
In 3 erzeugt die Metadatenaufzeichnungsschaltungsanordnung 308 Metadaten, die den Daten entsprechen. Insbesondere erzeugt die Metadatenaufzeichnungsschaltungsanordnung 308 ein Byte von Metadaten, um die Daten zu charakterisieren. In 3 bestimmt die Metadatenaufzeichnungsschaltungsanordnung 308 einen ersten Teil der Metadaten basierend darauf, ob die Daten komprimiert oder unkomprimiert sind. Zum Beispiel kann der erste Teil der Metadaten ein Header-Bit des Bytes sein. In einigen Beispielen zeichnet die Metadatenaufzeichnungsschaltungsanordnung 308 als Reaktion darauf, dass die Daten komprimiert werden, einen ersten Wert (z. B. 1) in dem Header-Bit auf und zeichnet als Reaktion darauf, dass die Daten nicht komprimiert werden, einen zweiten Wert (z. B. 0) in dem Header-Bit auf. In einigen Beispielen sendet die Metadatenaufzeichnungsschaltungsanordnung 308, wenn die Daten unkomprimiert sind, die Metadaten als Reaktion auf das Aufzeichnen des zweiten Werts in dem Header-Bit an den Speicher 212.
-
In dem dargestellten Beispiel aus 3 bestimmt die Metadatenaufzeichnungsschaltungsanordnung 308 einen zweiten Teil der Metadaten basierend auf einer Größe der Daten als Reaktion darauf, dass die Daten komprimiert werden. Zum Beispiel kann der zweite Teil der Metadaten vier Bits benachbart zu dem Header-Bit sein. In 3 zeichnet die Metadatenaufzeichnungsschaltungsanordnung 308 die Cache-Größe der komprimierten Daten in dem zweiten Teil der Metadaten auf. Zum Beispiel kann die Metadatenaufzeichnungsschaltungsanordnung 308 die Anzahl von Cachezeilen, die durch die komprimierten Daten belegt sind, in den vier Bits, die nach dem Header-Bit positioniert sind, über binäre numerische Werte aufzeichnen. Von daher kann die Metadatenaufzeichnungsschaltungsanordnung 308 angeben, dass die komprimierten Daten bis zu fünfzehn Cachezeilen in den vier Bits belegen, was angesichts dessen passend ist, dass die unkomprimierte Gewichtungsmatrix sechzehn Cachezeilen belegt.
-
In dem dargestellten Beispiel aus 3 bestimmt die Metadatenaufzeichnungsschaltungsanordnung 308 einen dritten Teil der Metadaten basierend auf einem Komprimierungsprozess, der ausgeführt wird, um die Daten zu erhalten. Zum Beispiel kann die Metadatenaufzeichnungsschaltungsanordnung 308 als Reaktion auf das Empfangen eines ersten Signals von der Komprimierungsprozessbestimmungsschaltungsanordnung 306, das angibt, dass ein erster Komprimierungsprozess, wie etwa „Null-Komprimierung“, ausgeführt wird, einen ersten Wert in den dritten Teil der Metadaten schreiben, um die Daten zu erhalten. Gleichermaßen kann die Metadatenaufzeichnungsschaltungsanordnung 308 als Reaktion auf das Empfangen eines zweiten Signals von der Komprimierungsprozessbestimmungsschaltungsanordnung 306, das angibt, dass ein zweiter Komprimierungsprozess, wie etwa „alle Null“, ausgeführt wird, einen zweiten Wert in den dritten Teil der Metadaten schreiben, um die Daten zu erhalten.
-
4 veranschaulicht beispielhafte Metadaten 402, die durch die Matrixkomprimierungsschaltungsanordnung 104 als Reaktion auf das Ausführen eines ersten beispielhaften Komprimierungsprozesses (z. B. „Null-Komprimierung“) erzeugt werden. In 4 erhält die Matrixkomprimierungsschaltungsanordnung 104 abgeschnittene Daten 404 als Reaktion darauf, dass die Abschneideschaltungsanordnung 204 eine Kachel von neuronalen Netzwerkgewichtungen abschneidet. Insbesondere kann die Abschneideschaltungsanordnung 204 die neuronalen Netzwerkgewichtungen in der Kachel entfernen, die einen Wert unterhalb einer Schwelle (z. B. 2) aufweisen, um die abgeschnittenen Daten 404 zu erhalten. In 4 belegen jeweilige Werte in den abgeschnittenen Daten 404 ein Datenbyte. In einigen Beispielen beinhaltet die Kachel neuronaler Netzwerkgewichtungen vierundsechzig Bytes. In dem dargestellten Beispiel aus 4 beinhalten, um ein Überfüllen zu vermeiden, die abgeschnittenen Daten 404 zweiunddreißig Bytes, die neuronalen Netzwerkgewichtungen entsprechen.
-
In manchen Beispielen bestimmt die Matrixkomprimierungsschaltungsanordnung 104, ob die abgeschnittenen Daten 404 komprimiert werden sollen. Zum Beispiel kann die Komprimierungsentscheidungsschaltungsanordnung 206 basierend auf einer Menge an Bytes mit Werten von null in den abgeschnittenen Daten bestimmen, ob die abgeschnittenen Daten komprimiert werden sollen. In manchen Beispielen bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206 als Reaktion auf Bestimmen, dass die Bytes der abgeschnittenen Daten 404 eine Menge an Nullen beinhalten, die eine erste Schwelle erfüllt (z. B. größer als diese ist), dass die abgeschnittenen Daten 404 komprimiert werden sollen, . In manchen Beispielen legt die Komprimierungsentscheidungsschaltungsanordnung 206 die Schwelle basierend auf einer Menge an Nullen fest, die dazu führen würde, dass komprimierte Daten weniger Speicher als die abgeschnittenen Daten 404 belegen.
-
In dem dargestellten Beispiel aus 4 bestimmt die Metadatenerzeugungsschaltungsanordnung 210 einen ersten Teil 406 (z. B. ein erstes Bit) der Metadaten 402 basierend darauf, ob die Komprimierungsentscheidungsschaltungsanordnung 206 bestimmt, dass die abgeschnittenen Daten 404 komprimiert werden sollen. Zum Beispiel kann die Komprimierungsdatenidentifizierungsschaltungsanordnung 302 identifizieren, ob die Komprimierungsentscheidungsschaltungsanordnung 206 bestimmt hat, dass die abgeschnittenen Daten 404 komprimiert werden sollen. In 4 zeichnet die Metadatenaufzeichnungsschaltungsanordnung 308 einen ersten Wert (z. B. 1) in dem ersten Bit 406 der Metadaten 402 als Reaktion darauf auf, dass die Komprimierungsentscheidungsschaltungsanordnung 206 bestimmt, dass die abgeschnittenen Daten 404 komprimiert werden sollen. In manchen Beispielen zeichnet die Metadatenaufzeichnungsschaltungsanordnung 308 einen zweiten Wert (z. B. 0) in den Metadaten 402 als Reaktion darauf auf, dass die Komprimierungsentscheidungsschaltungsanordnung 206 bestimmt, dass die abgeschnittenen Daten 404 so verbleiben sollen, wie sie sind.
-
In dem dargestellten Beispiel aus 4 kann die Komprimierungsentscheidungsschaltungsanordnung 206 als Reaktion auf das Bestimmen, dass die abgeschnittenen Daten 404 komprimiert werden sollen (z. B. die Menge an Bytes mit Werten von null in den abgeschnittenen Daten 404 erfüllt die erste Schwelle), den Komprimierungsprozess bestimmen, der durch die Komprimierungsschaltungsanordnung 208 auszuführen ist. In 4 bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206, dass die Komprimierungsschaltungsanordnung 208 eine „Null-Komprimierungs“-Operation ausführen soll. In einigen Beispielen bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206 einen Komprimierungsprozess für die Komprimierungsschaltungsanordnung 208, der basierend auf Werten der Bytes in den abgeschnittenen Daten 404 auszuführen ist. Zum Beispiel kann die Komprimierungsentscheidungsschaltungsanordnung 206 bestimmen, dass die Komprimierungsschaltungsanordnung 208 als Reaktion auf Bestimmen, dass die Bytes der abgeschnittenen Daten 404 eine Menge von Werten ungleich Null (z. B. Gewichtungen ungleich Null) beinhalten, die eine zweite Schwelle (z. B. 1) erfüllt (z. B. kleiner als diese ist), eine „Alle-Null“-Komprimierung ausführen soll.
-
In dem dargestellten Beispiel aus 4 führt die Matrixkomprimierungsschaltungsanordnung 104 eine Komprimierungsoperation (z. B. „Null-Komprimierung“) aus, um eine Bitmap 408 und eine komprimierte Kachel 410 zu erzeugen. Insbesondere beinhaltet das Ausführen von „Null-Komprimierung“ Packen von Gewichtungen ungleich Null aus den abgeschnittenen Daten 404 in die komprimierte Kachel 410 und Erzeugen der Bitmap 408, um jeweilige Positionen der Gewichtungen ungleich Null anzugeben. In 4 bestimmt die Komprimierungsschaltungsanordnung 208 die Bitmap 408 basierend auf jeweiligen Positionen und Werten der jeweiligen Bytes der abgeschnittenen Daten 404. In 4 bestimmt die Komprimierungsschaltungsanordnung 208 Werte jeweiliger Bits in der Bitmap 408 basierend auf den Werten in jeweiligen Bytes der abgeschnittenen Daten 404. Zum Beispiel kann die Komprimierungsschaltungsanordnung 208 an einem Eckbyte 412 der abgeschnittenen Daten 404 beginnen und sich von links nach rechts über jede Zeile bewegen, wobei eine 0 in Bits aufgezeichnet wird, die Bytes in den abgeschnittenen Daten 404 mit Werten von null entsprechen, und eine 1 in Bits aufgezeichnet wird, die Bytes mit Werten ungleich null entsprechen. Ferner kann die Komprimierungsschaltungsanordnung 208 an dem Eckbyte 412 beginnen und sich von links nach rechts über jede Zeile in den abgeschnittenen Daten 404 bewegen, wobei die Bytes der abgeschnittenen Daten 404 mit Werten ungleich null in die komprimierte Kachel 410 gepackt werden. Von daher gibt die Bitmap 408 Orte von Werten ungleich null in den Bytes der abgeschnittenen Daten 404 an, und die komprimierte Kachel 410 beinhaltet die Bytes der abgeschnittenen Daten mit Werten ungleich null.
-
In dem dargestellten Beispiel aus 4 bestimmt die Komprimierungsprozessbestimmungsschaltungsanordnung 306 einen zweiten Teil 414 (z. B. letzte drei Bits) der Metadaten 402 basierend auf dem Komprimierungsprozess, der durch die Komprimierungsschaltungsanordnung 208 ausgeführt wird. In manchen Beispielen bestimmt die Komprimierungsprozessbestimmungsschaltungsanordnung 306 den zweiten Teil der Metadaten basierend auf dem Komprimierungsprozess, der durch die Komprimierungsentscheidungsschaltungsanordnung 206 bestimmt wird. Von daher kann die Metadatenerzeugungsschaltungsanordnung 210 den zweiten Teil der Metadaten parallel dazu aktualisieren, dass die Komprimierungsschaltungsanordnung 208 die Komprimierungsoperation ausführt. In 4 aktualisiert die Metadatenaufzeichnungsschaltungsanordnung 308 die letzten drei Bits der Metadaten 402 basierend auf der Komprimierungsoperation. Insbesondere konfiguriert die Metadatenaufzeichnungsschaltungsanordnung 308 die letzten drei Bits der Metadaten 402, um einen ersten Wert zu repräsentieren, der der „Null-Komprimierungs“-Operation entspricht. In einigen Beispielen steuert die Metadatenaufzeichnungsschaltungsanordnung 402 die letzten drei Bits der Metadaten 402, um einen zweiten Wert darzustellen, der einer „Alle-Null“-Komprimierungsoperation entspricht. Zusätzlich dazu kann die Metadatenaufzeichnungsschaltungsanordnung 402 die letzten drei Bits der Metadaten 402 auf andere Werte konfigurieren, die anderen Komprimierungsoperationen entsprechen. Insbesondere können die letzten drei Bits der Metadaten 402 bis zu acht unterschiedliche Komprimierungsoperationen repräsentieren, die durch die Komprimierungsschaltungsanordnung 208 ausführbar sind.
-
In dem dargestellten Beispiel aus 4 bestimmt die Datengrößenbestimmungsschaltungsanordnung 304 als Reaktion darauf, dass die Komprimierungsschaltungsanordnung 208 die Komprimierungsoperation ausführt, eine Größe der komprimierten Daten (z. B. der Bitmap 408 und der komprimierten Kachel 410). Zum Beispiel kann die Datengrößenbestimmungsschaltungsanordnung 304 eine Anzahl von Cachezeilen bestimmen, die durch die Bitmap 408 und die komprimierte Kachel 410 belegt sind. In 4 aktualisiert die Metadatenaufzeichnungsschaltungsanordnung 308 einen dritten Teil 416 (z. B. innere vier Bits) der Metadaten 402 basierend auf der Anzahl von Cachezeilen, die von der Bitmap 408 und der komprimierten Kachel 410 belegt werden. Zum Beispiel kann die Metadatenaufzeichnungsschaltungsanordnung 308 die inneren vier Bits der Metadaten 402 so konfigurieren, dass sie äquivalent zu der Anzahl von Cachezeilen ist, die von der Bitmap 408 und der komprimierten Kachel 410 belegt werden.
-
In 4 entsprechen die abgeschnittenen Daten 404 einer ersten Kachel von neuronalen Netzwerkgewichtungen, die durch die neuronale Netzwerkschaltungsanordnung 102 genutzt werden. In einigen Beispielen nutzt die neuronale Netzwerkschaltungsanordnung 102 vierundsechzig Kacheln von neuronalen Netzwerkgewichtungen, um eine Inferenz durchzuführen. Dementsprechend kann die Matrixkomprimierungsschaltungsanordnung 104 verbleibende dreiundsechzig Kacheln ähnlich der ersten Kachel komprimieren. Gleichermaßen kann die Matrixkomprimierungsschaltungsanordnung 104 ein jeweiliges Byte von Metadaten, ähnlich den Metadaten 402, für die jeweiligen verbleibenden dreiundsechzig Kacheln erzeugen.
-
5 stellt eine beispielhafte Implementierung des Speichers 212 dar. In dem dargestellten Beispiel aus 5 ist der Speicher 212 ein linearer Speicher. In 5 weist der Speicher 212 eine Metadaten-Cachezeile 502 und Kacheln 504 auf. In 5 beinhaltet die Metadaten-Cachezeile 502 vierundsechzig Bytes Metadaten. Die jeweiligen Bytes der Metadaten repräsentieren jeweilige der Kacheln. Dementsprechend stellen jeweilige Bytes in der Metadaten-Cachezeile 502 Informationen bereit, die der jeweiligen der Kacheln 504 entsprechen, die damit assoziiert sind.
-
In 5 geben die jeweiligen Bytes in der Metadaten-Cachezeile 502 an, ob die assoziierte der Kacheln 504 komprimiert ist. In 5 gibt als Reaktion darauf, dass die jeweilige der Kacheln 504 komprimiert wird, ein assoziiertes Metadatenbyte in der Metadaten-Cachezeile 502 eine Anzahl von Cachezeilen an, die durch die jeweilige der Kacheln 504 belegt sind. In 5 gibt als Reaktion darauf, dass die jeweilige der Kacheln 504 unkomprimiert ist, ein assoziiertes Metadatenbyte in der Metadaten-Cachezeile 502 an, dass die jeweilige der Kacheln 504 unkomprimiert ist, und im Gegenzug ist eine Anzahl von Cachezeilen, die mit der jeweiligen der Kacheln 504 assoziiert sind, bekannt. Von daher stellen jeweilige Bytes der Metadaten-Cachezeile 502 den jeweiligen Kacheln 504 eine Abbildung bereit.
-
In 5 gibt die Metadaten-Cachezeile 502 als Reaktion darauf, dass die assoziierte der Kacheln 504 komprimiert wird, einen Komprimierungsprozess an, der ausgeführt wird, um die jeweilige der Kacheln 504 zu komprimieren. Von daher gibt die Metadaten-Cachezeile 502 einen Dekomprimierungsprozess an, der für die jeweiligen Kacheln 504 auszuführen ist.
-
6 veranschaulicht die beispielhafte Matrixdekomprimierungsschaltungsanordnung 106 des Systems 100 aus 1. In 6 umfasst die Matrixdekomprimierungsschaltungsanordnung 106 einen Datensendeempfänger 602, eine Überbrückungsschaltungsanordnung 604, eine Datenlokalisierungsschaltungsanordnung 606, eine Datentypidentifizierungsschaltungsanordnung 608, eine Datengrößenbestimmungsschaltungsanordnung 610, eine Komprimierungsprozessbestimmungsschaltungsanordnung 612, eine Datendekomprimierungsschaltungsanordnung 614 und einen Speicher 616. In 6 sind der Datensendeempfänger 602, die Überbrückungsschaltungsanordnung 604, die Datenlokalisierungsschaltungsanordnung 606, die Datentypidentifizierungsschaltungsanordnung 608, die Datengrößenbestimmungsschaltungsanordnung 610, die Komprimierungsprozessbestimmungsschaltungsanordnung 612 und die Datendekomprimierungsschaltungsanordnung 614 kommunikativ über einen Bus 618 gekoppelt.
-
In 6 empfängt der Datensendeempfänger 602 Daten, die neuronalen Netzwerkgewichtungen entsprechen, von der Matrixkomprimierungsschaltungsanordnung 104 über den Bus 108. Zum Beispiel kann der Datensendeempfänger 602 Daten empfangen, die in dem Speicher 212 der Matrixkomprimierungsschaltungsanordnung 104 gespeichert sind. In einigen Beispielen speichert der Datensendeempfänger 602 als Reaktion auf das Bereitstellen der Daten für die Matrixdekomprimierungsschaltungsanordnung 106 die Daten in dem Speicher 616, um zu ermöglichen, dass sich die Matrixkomprimierungsschaltungsanordnung 104 von dem Bus 108 aus 1 trennt. In 6 empfängt der Datensendeempfänger 602 eine Datenanforderung von der neuronalen Netzwerkschaltungsanordnung 102 über den Bus 108. In 6 sendet der Datensendeempfänger 602 als Reaktion darauf, dass die Daten dekomprimiert werden, die Daten über den Bus 108 an die neuronale Netzwerkschaltungsanordnung 102.
-
In 6 bestimmt die Datenüberbrückungsschaltungsanordnung 604 Metadaten (z. B. die Metadaten 402), die mit einer Kachel assoziiert sind, basierend auf der Datenanforderung. Zum Beispiel kann die Datenüberbrückungsschaltungsanordnung 604 die mit der Kachel assoziierten Metadaten basierend auf einer Adresse der Kachel bestimmen. In 6 kann die Datenüberbrückungsschaltungsanordnung 604 die Adresse der Kachel mit dem Byte von Metadaten korrelieren, die mit der Kachel assoziiert sind. Zum Beispiel kann die Adresse der Kachel eine Kachelnummer sein, und die Datenüberbrückungsschaltungsanordnung 604 kann das Byte von Metadaten bestimmen, das der Kachelnummer entspricht. Das heißt, als Reaktion auf das Empfangen einer Anforderung für eine erste Kachel in einem Satz von Kacheln kann die Datenüberbrückungsschaltungsanordnung 604 ein erstes Byte von Metadaten identifizieren. In einigen Beispielen identifiziert die Datenüberbrückungsschaltungsanordnung 604 die Metadaten über den Speicher 616.
-
In 6 bestimmt die Datenlokalisierungsschaltungsanordnung 606 einen Ort der Kachel basierend auf den Metadaten. Zum Beispiel kann die Datenlokalisierungsschaltungsanordnung 606 Metadatenbytes analysieren, die dem Metadatenbyte vorangehen, das mit der Kachel assoziiert ist, um eine Cachezeile zu bestimmen, in der die Kacheldaten beginnen. Insbesondere kann die Datenlokalisierungsschaltungsanordnung 606 eine Menge von mit den Kacheln assoziierten Cachezeilen, die der mit der Datenanforderung assoziierten Kachel vorangehen, basierend auf den mit den Kacheln assoziierten Metadaten identifizieren. Im Gegenzug kann die Datenlokalisierungsschaltungsanordnung 606 die Cachezeilen der vorhergehenden Kacheln hinzufügen, die einem Start der Kacheln (z. B. die Metadaten-Cachezeile 502 aus 5) vorangehen, um einen Offset einer anfänglichen Cachezeile der Kachel zu bestimmen. In einigen Beispielen bestimmt die Datenlokalisierungsschaltungsanordnung 606 den Ort der anfänglichen Cachezeile der Kachel in dem Speicher 616.
-
In 6 identifiziert die Datentypidentifizierungsschaltungsanordnung 608, ob die Kachel komprimiert ist. Zum Beispiel kann die Datentypidentifizierungsschaltungsanordnung 608 basierend auf einem ersten Teil der Metadaten, die mit der Kachel assoziiert sind, bestimmen, ob die Kachel komprimiert ist. Insbesondere identifiziert die Datentypidentifizierungsschaltungsanordnung 608, dass die Kachel komprimiert ist, als Reaktion darauf, dass ein erstes Bit der Metadaten einen ersten Wert beinhaltet (z. B. 1). Gleichermaßen identifiziert die Datentypidentifizierungsschaltungsanordnung 608, dass die Kachel unkomprimiert ist, als Reaktion darauf, dass das erste Bit der Metadaten einen zweiten Wert (z. B. 0) beinhaltet.
-
In 6 bestimmt die Datengrößenbestimmungsschaltungsanordnung 610 eine Größe der Kachel. Als Reaktion darauf, dass die Kachel komprimiert ist, kann die Datengrößenbestimmungsschaltungsanordnung 610 zum Beispiel die Größe der Kachel basierend auf einem zweiten Teil der Metadaten, die mit der Kachel assoziiert sind, bestimmen. In einigen Beispielen bestimmt die Datengrößenbestimmungsschaltungsanordnung 610 eine Anzahl von Cachezeilen, die die Kachel belegt, basierend auf einem Wert, der durch vier Bits der Metadaten angegeben wird, die an das erste Bit angrenzen.
-
In 6 bestimmt die Datengrößenbestimmungsschaltungsanordnung 610 als Reaktion darauf, dass die Kachel unkomprimiert ist, dass die Größe der Kachel äquivalent zu einer vorbestimmten Größe (z. B. einer ursprünglichen Größe der Kachel, sechzehn Cachezeilen) der Kachel ist. In einigen Beispielen ist eine vorbestimmte Anzahl von Cachezeilen, die von der Kachel belegt werden, als Reaktion darauf, dass sie unkomprimiert sind, um eine Cachezeile größer als eine maximale Anzahl von Cachezeilen, die vier Bits der Metadaten angeben können. Insbesondere können die vier Bits der Metadaten angeben, dass die Kachel bis zu fünfzehn Cachezeilen belegt, und somit, als Reaktion darauf, dass sie unkomprimiert sind, die Kachel sechzehn Cachezeilen belegt. In manchen Beispielen gibt die Datenanforderung von der neuronalen Netzwerkschaltungsanordnung 102 die Anzahl von Cachezeilen an, die die unkomprimierte Kachel belegt, und dementsprechend kann die Datengrößenbestimmungsschaltungsanordnung 610 die Anzahl von Cachezeilen für die unkomprimierte Kachel basierend auf der Datenanforderung bestimmen.
-
In 6 bestimmt die Komprimierungsprozessbestimmungsschaltungsanordnung 612 als Reaktion darauf, dass die Kachel komprimiert wird, einen Komprimierungsprozess, der ausgeführt wird, um die Kachel zu erhalten. Zum Beispiel kann die Komprimierungsprozessbestimmungsschaltungsanordnung 612 den Komprimierungsprozess, der durch die Matrixkomprimierungsschaltungsanordnung 104 ausgeführt wird, basierend auf einem dritten Teil der Metadaten, die mit der Kachel assoziiert sind, bestimmen. In einigen Beispielen bestimmt die Komprimierungsprozessbestimmungsschaltungsanordnung 612 den ausgeführten Komprimierungsprozess basierend auf einem Wert, der durch die letzten drei Bits der Metadaten angegeben wird. Insbesondere kann die Komprimierungsprozessbestimmungsschaltungsanordnung 612 den Wert, der durch die letzten drei Bits angegeben wird, mit einem Komprimierungsprozess korrelieren, der mit dem Wert assoziiert ist. Zum Beispiel kann die Komprimierensprozessbestimmungsschaltungsanordnung 612 bestimmen, dass ein erster, zweiter, dritter, vierter, fünfter, sechster, siebter oder achter Komprimierungsprozesses durch die Matrixkomprimierungsschaltungsanordnung 104 als Reaktion darauf ausgeführt wurde, dass die letzten drei Bits der Metadaten einen ersten Wert, einen zweiten Wert, einen dritten Wert, einen vierten Wert, einen fünften Wert, einen sechsten Wert, einen siebten Wert bzw. einen achten Wert angeben. Insbesondere kann „Null-Komprimierung“ mit dem ersten Wert verknüpft sein, „Null-Komprimierung“ kann mit dem zweiten Wert verknüpft sein, und zusätzliche Komprimierungsprozesse können mit dem dritten Wert, dem vierten Wert, dem fünften Wert, dem sechsten Wert, dem siebten Wert und dem achten Wert verknüpft sein.
-
In 6 dekomprimiert als Reaktion darauf, dass die Kachel komprimiert ist, die Datendekomprimierungsschaltungsanordnung 614 die Kachel. Zum Beispiel kann die Datendekomprimierungsschaltungsanordnung 614 die Kachel basierend auf der Größe der komprimierten Kachel und dem Komprimierungsprozess, der durch die Matrixkomprimierungsschaltungsanordnung 104 ausgeführt wird, dekomprimieren, um die komprimierte Kachel zu erhalten. In 6 greift die Datendekomprimierungsschaltungsanordnung 614 auf die komprimierte Kachel in dem Speicher 616 basierend auf dem bestimmten Ort und der Größe der komprimierten Kachel zu. Im Gegenzug kann die Datendekomprimierungsschaltungsanordnung 614 die komprimierte Kachel basierend auf dem bestimmten Komprimierungsprozess dekomprimieren, der ausgeführt wird, um die komprimierte Kachel zu erhalten. Als Reaktion darauf, dass die Matrixkomprimierungsschaltungsanordnung 104 einen „Null-Komprimierungs“-Prozess ausführt, um die komprimierte Kachel zu erhalten, kann die Datendekomprimierungsschaltungsanordnung 614 zum Beispiel die komprimierte Kachel basierend auf Werten von Bits in einer Bitmap (z. B. der Bitmap 408) und Werten von Bytes in der komprimierten Kachel (z. B. der komprimierten Kachel 410) dekomprimieren. Ferner kann die Datendekomprimierungsschaltungsanordnung 614 als Reaktion darauf, dass die Matrixkomprimierungsschaltungsanordnung 104 einen „Alle-Null“-Komprimierungsprozess ausführt, um die komprimierte Kachel zu erhalten, eine Menge an Bytes mit Werten von null basierend auf der Größe der unkomprimierten Kachel laden.
-
In 6 beinhaltet der Speicher 616 die Metadaten (z. B. die Metadaten-Cachezeile 502 aus 5) und die damit assoziierten Kacheln (z. B. die Kacheln 504 aus 5). Zum Beispiel kann der Datensendeempfänger 602 die Metadaten und die Kacheln als Reaktion auf das Empfangen der Metadaten und der Kacheln von der Matrixkomprimierungsschaltungsanordnung 104 über den Bus 108 in dem Speicher 616 speichern. Von daher können die Überbrückungsschaltungsanordnung 604, die Datenlokalisierungsschaltungsanordnung 606, die Datentypidentifizierungsschaltungsanordnung 608, die Datengrößenbestimmungsschaltungsanordnung 610, die Komprimierungsprozessbestimmungsschaltungsanordnung 612 und die Datendekomprimierungsschaltungsanordnung 614 über den Bus 618 auf die Metadaten und die Kacheln zugreifen, die in dem Speicher 616 gespeichert sind.
-
7 ist ein Blockdiagramm einer beispielhaften Implementierung der Matrixdekomprimierungsschaltungsanordnung 106 in einem beispielhaften Matrix (z. B. Kachel) -Betriebssystem 700, das in der
US-Patentanmeldung 2020/0233666 beschrieben wird, die hiermit als eine Bezugnahme in ihrer Gesamtheit aufgenommen wird. In dem dargestellten Beispiel aus
7 weist das Matrixbetriebssystem 700 die neuronale Netzwerkschaltungsanordnung 102 aus
1 und die Matrixoperationsbeschleunigungsschaltungsanordnung 702 auf. In
7 umfasst die neuronale Netzwerkschaltungsanordnung 102 eine Hosting-Schaltungsanordnung 704 und eine Speicherschnittstelle 706. In
7 beinhaltet die Matrixoperationsbeschleunigungsschaltungsanordnung 702 die Matrixdekomprimierungsschaltungsanordnung 106, einen Datenpuffer 708, eine Matrixsteuerschaltungsanordnung 710 und eine Berechnungsschaltungsanordnung 712 (z. B. FMA-Schaltungsanordnung (Fused Multiple Accumulate)).
-
In dem dargestellten Beispiel aus 7 sendet die Hosting-Schaltungsanordnung 704 Befehle an die Matrixoperationen beschleunigende Schaltungsanordnung 702. Zum Beispiel kann die Hosting-Schaltungsanordnung 704 Signale, die Kachelmanipulationsoperationen, Kachelladeoperationen und/oder Kachelspeicherungsoperationen angeben, an die Matrixoperationen beschleunigende Schaltungsanordnung 702 senden. In dem dargestellten Beispiel aus 7 teilen sich die Hosting-Schaltungsanordnung 704 und die Matrixoperationsbeschleunigungsschaltungsanordnung 702 die Speicherschnittstelle 706 gemeinsam. In einigen Beispielen nutzt die Matrixoperationsbeschleunigungsschaltungsanordnung einen von der Hosting-Schaltungsanordnung 704 getrennten Speicher, wie etwa den Speicher 616 aus 6.
-
Bei 7 dekomprimiert die Matrixdekomprimierungsschaltungsanordnung 106 eine oder mehrere Kacheln als Reaktion auf das Empfangen eines Signals, das eine Kachelladeoperation angibt, die für die eine oder die mehreren Kacheln durchzuführen ist, von der Hosting-Schaltungsanordnung 704. In manchen Beispielen lädt die Matrixdekomprimierungsschaltungsanordnung 106 als Reaktion auf das Empfangen des Signals, das den Kachelladevorgang angibt, die jeweiligen Kacheln über die Speicherschnittstelle 706. In 7 ermöglicht die Matrixdekomprimierungsschaltungsanordnung 106 der Speicherschnittstelle 706, komprimierte Kacheln zu speichern (z. B. als Reaktion darauf, dass die Matrixkomprimierungsschaltungsanordnung 104 die Kacheln komprimiert). Von daher ermöglicht die Matrixdekomprimierungsschaltungsanordnung 106 der Speicherschnittstelle 706, eine reduzierte Bandbreite zum Speichern der Kacheln zu nutzen. Im Gegenzug kann die Matrixdekomprimierungsschaltungsanordnung 106 auf die Kacheln mit einer erhöhten Rate zugreifen und diese dekomprimieren, um eine Leistungsfähigkeitsengstelle zu eliminieren oder anderweitig zu reduzieren, die auftritt, wenn volle (z. B. unkomprimierte) Kacheln geladen werden sollen. In 7 sendet die Matrixdekomprimierungsschaltungsanordnung 106 dekomprimierte Kacheln an den Datenpuffer 708.
-
In 7 beinhaltet der Datenpuffer 708 mehrere Register. In 7 kann die Berechnungsschaltungsanordnung 712 über den Datenpuffer 708 auf die dekomprimierten Kacheln zugreifen. In 7 sendet die Matrixsteuerschaltungsanordnung 710 ein Signal, das eine durchzuführende Matrixoperation angibt, basierend auf den Kachelmanipulationsoperationen, die durch die Hosting-Schaltungsanordnung 704 angegeben werden, an die Berechnungsschaltungsanordnung 712. Zum Beispiel kann die Berechnungsschaltungsanordnung 712 eine Matrixmultiplikationsoperation unter Verwendung der in dem Datenpuffer 708 gespeicherten dekomprimierten Kacheln durchführen. In 7 nutzt die Matrixdekomprimierungsschaltungsanordnung 106 reduzierte Zyklen, um die Kacheln zu dekomprimieren, was eine Berechnungseffizienz der Berechnungsschaltungsanordnung 712 verbessert. In manchen Beispielen speichert die Berechnungsschaltungsanordnung 712 als Reaktion auf das Empfangen eines Signals, das eine Kachelspeicheroperation angibt, über die Hosting-Schaltungsanordnung 704 die Ergebnisse der Kachelmanipulationsoperation über die Speicherschnittstelle 706.
-
8 veranschaulicht ein Blockdiagramm, das eine andere beispielhafte Implementierung der Matrixdekomprimierungsschaltungsanordnung 106 repräsentiert. In 8 weist die Matrixdekomprimierungsschaltungsanordnung 106 eine Abbildungsschaltungsanordnung 802 auf. Zum Beispiel kann die Abbildungsschaltungsanordnung 802 der Überbrückungsschaltungsanordnung 604 und der Datenlokalisierungsschaltungsanordnung 606 entsprechen. Bei 8 empfängt die Abbildungsschaltungsanordnung 802 ein Signal, das eine zu ladende Kachel angibt, über die Hosting-Schaltungsanordnung 704. In 8 kann die Abbildungsschaltungsanordnung 802 einen Ort von Metadaten bestimmen, die mit der Kachel in einem ersten Teil 804 der Speicherschnittstelle 706 assoziiert sind. Bei 8 kann die Abbildungsschaltungsanordnung 802 eine Position von Daten (z. B. komprimierten Daten), die mit der Kachel assoziiert sind, in einem zweiten Teil 806 der Speicherschnittstelle 706 bestimmen.
-
In 8 liest die Matrixdekomprimierungsschaltungsanordnung 106 den ersten Teil 804 der Speicherschnittstelle 706, um die Metadaten zu identifizieren, die mit der Kachel assoziiert sind. Im Gegenzug liest die Matrixdekomprimierungsschaltungsanordnung 106 den zweiten Teil der Speicherschnittstelle, um die mit der Kachel assoziierten Daten zu identifizieren. Wie in dem dargestellten Beispiel aus 8 gezeigt, belegen der erste Teil 804 und der zweite Teil 806 nur einen Bruchteil der Speicherschnittstelle 706, was der Matrixdekomprimierungsschaltungsanordnung 106 ermöglicht, weniger Speicher zu durchsuchen, um die Metadaten und die komprimierten Daten, die mit der Kachel assoziiert sind, zu identifizieren und zu extrahieren. Von daher nutzt die Matrixdekomprimierungsschaltungsanordnung 106 weniger Verarbeitungszyklen, um die Metadaten und die mit der Kachel assoziierten Daten zu sammeln. Dementsprechend dekomprimiert die Matrixdekomprimierungsschaltungsanordnung 106 die Daten basierend auf den Metadaten. Ferner sendet die Matrixdekomprimierungsschaltungsanordnung 106 die dekomprimierten Daten an den Datenpuffer 708.
-
9 veranschaulicht beispielhaften Pseudocode 900, den die Matrixdekomprimierungsschaltungsanordnung 106 ausführen kann, um Kacheldaten zu extrahieren. In 9 entspricht ein erster Teil 902 des Pseudocodes dem Laden von Metadaten und assoziierten Kacheldaten. Zum Beispiel kann der erste Teil 902 des Pseudocodes 900 durch die Überbrückungsschaltungsanordnung 604, die Datenlokalisierungsschaltungsanordnung 606, die Datentypidentifizierungsschaltungsanordnung 608, die Datengrößenbestimmungsschaltungsanordnung 610 und die Komprimierungsprozessbestimmungsschaltungsanordnung 612 ausgeführt werden, um Charakteristiken (z. B. einen Datentyp, eine Größe, einen Ort usw.) zu bestimmen, die mit einer Kachel assoziiert sind, die extrahiert wird. In 9 entspricht ein zweiter Teil 904 des Pseudocodes 900 Dekomprimierungsoperationen, die durch die Datendekomprimierungsschaltungsanordnung 614 als Reaktion darauf, dass die Daten über eine „Null-Komprimierungs“-Technik komprimiert werden, ausführbar sind. Insbesondere ist der zweite Teil 904 des Pseudocodes 900 eine Funktion, die durch den ersten Teil 902 des Pseudocodes 900 als Reaktion darauf aufgerufen wird, dass die Metadaten, die mit der Kachel assoziiert sind, angeben, dass die Matrixkomprimierungsschaltungsanordnung 104 eine „Null-Komprimierung“ ausgeführt hat, um die Kachel zu komprimieren. Dementsprechend kann der erste Teil 902 des Pseudocodes 900 andere Funktionen aufrufen, die mit anderen Dekomprimierungsprozessen assoziiert sind, als Reaktion darauf, dass die Metadaten, die mit der Kachel assoziiert sind, angeben, dass die Matrixkomprimierungsschaltungsanordnung 104 eine andere Komprimierungsoperation ausgeführt hat.
-
10A veranschaulicht einen ersten beispielhaften Datenfluss 1000, der mit einer Kacheldatenextraktion assoziiert ist, die durch ein System nach dem Stand der Technik durchgeführt wird. In 10A umfasst das System 1002 nach dem Stand der Technik einen Speicher 1004, einen Lastleitungskalibrator (LLC) 1006, einen Kern 1008 und eine Kachelmatrixmultipliziereinheit (TMUL) 1010. Bei 10A trifft das System 1002 nach dem Stand der Technik auf eine Engstelle zwischen (i) dem Speicher 1004 und dem LLC 1006 und (ii) dem LLC 1006 und dem Kern 1008. Von daher reduziert die Engstelle eine Rate, mit der Kern 1008 auf Kacheldaten zugreifen kann, die in dem Speicher gespeichert sind, und reduziert somit eine Rate, mit der TMUL 1010 Berechnungsoperationen unter Verwendung der Kacheldaten durchführen kann.
-
10B veranschaulicht einen zweiten beispielhaften Datenfluss 1050, der mit einer Kacheldatenextraktion assoziiert ist, die durch die Matrixdekomprimierungsschaltungsanordnung 106 in dem Matrixbetriebssystem 700 aus 7 und/oder 8 durchgeführt wird. In 10B umfasst das Matrixbetriebssystem 700 den Speicher 1004, den LLC 1006, den Kern 1008 und die TMUL 1010. In 10B wurden Kacheldaten, die in dem Speicher 1004 gespeichert sind, durch die Matrixkomprimierungsschaltungsanordnung 104 komprimiert. Dementsprechend kann der LLC 1006 die komprimierten Kacheldaten unter Verwendung einer reduzierten Bandbreite aus dem Speicher 1004 extrahieren. Ferner kann der LLC 1006 die komprimierten Kacheldaten an den Kern 1008 weiterleiten, um eine Engstelle zu verhindern, die ansonsten auftreten würde, wenn die Kacheldaten in einer unkomprimierten Form gesendet werden, wie etwa in 10A. In 10B beinhaltet der Kern 1008 die Matrixdekomprimierungsschaltungsanordnung 106, die die komprimierten Kacheldaten als Reaktion auf eine Anforderung dekomprimiert. Von daher kann die TMUL 1010 Berechnungsoperationen mit einer erhöhten Rate durchführen.
-
In einigen Beispielen beinhaltet die Matrixkomprimierungsschaltungsanordnung 104 Mittel zum Ausführen einer Komprimierungsoperation, um komprimierte Daten zu erhalten, die Gewichtungen in einer Gewichtungsmatrix entsprechen. Das Mittel zum Ausführen kann zum Beispiel durch Komprimieren der Schaltungsanordnung 208 implementiert werden. In einigen Beispielen kann die Komprimierungsschaltungsanordnung 208 durch maschinenausführbare Anweisungen implementiert werden, wie etwa jene, die durch mindestens Block 1110 aus 11 implementiert werden, die durch die Prozessorschaltungsanordnung ausgeführt werden, die durch die beispielhafte Prozessorschaltungsanordnung 1412 aus 14, die beispielhafte Prozessorschaltungsanordnung 1600 aus 16 und/oder die beispielhafte feldprogrammierbare Gate-Array- bzw. FPGA-Schaltungsanordnung 1700 aus 17 implementiert werden kann. In anderen Beispielen wird die Komprimierungsschaltungsanordnung 208 durch eine andere Hardwarelogikschaltungsanordnung, hardwareimplementierte Zustandsmaschinen und/oder eine beliebige andere Kombination von Hardware, Software und/oder Firmware implementiert. Zum Beispiel kann die Komprimierungsschaltungsanordnung 208 durch wenigstens eine oder mehrere Hardwareschaltungen (z. B. eine Prozessorschaltungsanordnung, eine diskrete und/oder integrierte analoge und/oder digitale Schaltungsanordnung, ein FPGA, eine anwendungsspezifische integrierte Schaltung (ASIC), einen Komparator, einen Operationsverstärker, eine Logikschaltung usw.) implementiert werden, die strukturiert sind, um die entsprechende Operation durchzuführen, ohne Software oder Firmware auszuführen, aber andere Strukturen sind ebenfalls geeignet.
-
In einigen Beispielen beinhaltet die Matrixkomprimierungsschaltungsanordnung 104 Mittel zum Bestimmen von Metadaten, die mit der Gewichtungsmatrix assoziiert sind. Das Mittel zum Bestimmen kann zum Beispiel durch die Metadatenerzeugungsschaltungsanordnung 210 implementiert werden. In einigen Beispielen kann die Metadatenerzeugungsschaltungsanordnung 210 durch maschinenausführbare Anweisungen implementiert werden, wie etwa jene, die durch mindestens die Blöcke 1202, 1204, 1206, 1208, 1210, 1212, 1214 aus 12 und/oder 1112 aus 11 implementiert werden, die durch eine Prozessorschaltungsanordnung ausgeführt werden, die durch die beispielhafte Prozessorschaltungsanordnung 1412 aus 14, die beispielhafte Prozessorschaltungsanordnung 1600 aus 16 und/oder die beispielhafte FPGA-Schaltungsanordnung (Field Programmable Gate Array) 1700 aus 17 implementiert werden kann. In anderen Beispielen wird die Metadatenerzeugungsschaltungsanordnung 210 durch eine andere Hardwarelogikschaltungsanordnung, hardwareimplementierte Zustandsmaschinen und/oder eine beliebige andere Kombination von Hardware, Software und/oder Firmware implementiert. Zum Beispiel kann die Metadatenerzeugungsschaltungsanordnung 210 durch mindestens eine oder mehrere Hardwareschaltungen (z. B. eine Prozessorschaltungsanordnung, eine diskrete und/oder integrierte analoge und/oder digitale Schaltungsanordnung, ein FPGA, eine anwendungsspezifische integrierte Schaltung (ASIC), einen Komparator, einen Operationsverstärker, eine Logikschaltung usw.) implementiert werden, die strukturiert ist, um die entsprechende Operation durchzuführen, ohne Software oder Firmware auszuführen, aber andere Strukturen sind ebenfalls geeignet.
-
In einigen Beispielen beinhalten die Mittel zum Bestimmen Mittel zum Bestimmen eines ersten Teils der Metadaten, die angeben, ob die Gewichtungsmatrix komprimiert ist. Zum Beispiel kann das Mittel zum Bestimmen des ersten Teils der Metadaten durch die Komprimierungsdatenidentifizierungsschaltungsanordnung 302 implementiert werden.
-
In einigen Beispielen beinhaltet das Mittel zum Bestimmen Mittel zum Bestimmen eines zweiten Teils der Metadaten, der eine Cache-Größe der komprimierten Daten angibt. Zum Beispiel kann das Mittel zum Bestimmen des zweiten Teils der Metadaten durch die Datengrößenbestimmungsschaltungsanordnung 304 implementiert werden.
-
In einigen Beispielen beinhalten die Mittel zum Bestimmen Mittel zum Bestimmen eines dritten Teils der Metadaten, die die Komprimierungsoperation angeben, die ausgeführt wird, um die komprimierten Daten zu erhalten. Zum Beispiel kann das Mittel zum Bestimmen des dritten Teils der Metadaten durch die Komprimierungsprozessbestimmungsschaltungsanordnung 306 implementiert werden.
-
In einigen Beispielen beinhaltet die Matrixdekomprimierungsschaltungsanordnung 106 Mittel zum Bestimmen, ob mit einer Gewichtungsmatrix assoziierte Daten komprimiert sind, basierend auf einem ersten Teil von Metadaten, die mit den Daten assoziiert sind. Das Mittel zum Bestimmen kann zum Beispiel durch die Datentypidentifizierungsschaltungsanordnung 608 implementiert werden. In einigen Beispielen kann die Datentypidentifizierungsschaltungsanordnung 608 durch maschinenausführbare Anweisungen implementiert werden, wie etwa jene, die durch mindestens Block 1310 aus 13 implementiert werden, der durch die Prozessorschaltungsanordnung ausgeführt wird, die durch die beispielhafte Prozessorschaltungsanordnung 1512 aus 15, die beispielhafte Prozessorschaltungsanordnung 1600 aus 16 und/oder die beispielhafte feldprogrammierbare Gate-Array- bzw. FPGA-Schaltungsanordnung 1700 aus 17 implementiert werden kann. In anderen Beispielen wird die Datentypidentifizierungsschaltungsanordnung 608 durch eine andere Hardwarelogikschaltungsanordnung, hardwareimplementierte Zustandsmaschinen und/oder eine beliebige andere Kombination von Hardware, Software und/oder Firmware implementiert. Zum Beispiel kann die Datentypidentifizierungsschaltungsanordnung 608 durch mindestens eine oder mehrere Hardwareschaltungen (z. B. Prozessorschaltungsanordnung, diskrete und/oder integrierte analoge und/oder digitale Schaltungsanordnung, ein FPGA, eine anwendungsspezifische integrierte Schaltung (ASIC), einen Komparator, einen Operationsverstärker, eine Logikschaltung usw.) implementiert werden, die strukturiert ist, um die entsprechende Operation durchzuführen, ohne Software oder Firmware auszuführen, aber andere Strukturen sind ebenfalls geeignet.
-
In einigen Beispielen beinhaltet die Matrixdekomprimierungsschaltungsanordnung 106 Mittel zum Bestimmen einer Cache-Größe der Daten basierend auf einem zweiten Teil der Metadaten. Zum Beispiel kann das Mittel zum Bestimmen durch die Datengrößenbestimmungsschaltungsanordnung 610 implementiert werden. In einigen Beispielen kann die Datengrößenbestimmungsschaltungsanordnung 610 durch maschinenausführbare Anweisungen implementiert werden, wie etwa jene, die durch mindestens die Blöcke 1306, 1308 aus 13 implementiert werden, die durch eine Prozessorschaltungsanordnung ausgeführt werden, die durch die beispielhafte Prozessorschaltungsanordnung 1512 aus 15, die beispielhafte Prozessorschaltungsanordnung 1600 aus 16 und/oder die beispielhafte feldprogrammierbare Gate-Array- bzw. FPGA-Schaltungsanordnung 1700 aus 17 implementiert werden kann. In anderen Beispielen wird die Datengrößenbestimmungsschaltungsanordnung 610 durch eine andere Hardwarelogikschaltungsanordnung, hardwareimplementierte Zustandsmaschinen und/oder eine beliebige andere Kombination von Hardware, Software und/oder Firmware implementiert. Zum Beispiel kann die Datengrößenbestimmungsschaltungsanordnung 610 durch mindestens eine oder mehrere Hardwareschaltungen (z. B. Prozessorschaltungsanordnung, diskrete und/oder integrierte analoge und/oder digitale Schaltungsanordnung, ein FPGA, eine anwendungsspezifische integrierte Schaltung (ASIC), einen Komparator, einen Operationsverstärker, eine Logikschaltung usw.) implementiert werden, die strukturiert ist, um die entsprechende Operation durchzuführen, ohne Software oder Firmware auszuführen, aber andere Strukturen sind ebenfalls geeignet.
-
In einigen Beispielen beinhaltet die Matrixdekomprimierungsschaltungsanordnung 106 Mittel zum Bestimmen eines Komprimierungsprozesses, der zum Komprimieren der Daten ausgeführt wird, basierend auf einem dritten Teil der Metadaten. Das Mittel zum Bestimmen kann zum Beispiel durch die Komprimierungsprozessbestimmungsschaltungsanordnung 612 implementiert werden. In einigen Beispielen kann die Komprimierungsprozessbestimmungsschaltungsanordnung 612 durch maschinenausführbare Anweisungen implementiert werden, wie etwa jene, die durch mindestens Block 1314 aus 13 implementiert werden, der durch die Prozessorschaltungsanordnung ausgeführt wird, die durch die beispielhafte Prozessorschaltungsanordnung 1512 aus 15, die beispielhafte Prozessorschaltungsanordnung 1600 aus 16 und/oder die beispielhafte feldprogrammierbare Gate-Array- bzw. FPGA-Schaltungsanordnung 1700 aus 17 implementiert werden kann. In anderen Beispielen wird die Komprimierungsprozessbestimmungsschaltungsanordnung 612 durch eine andere Hardwarelogikschaltungsanordnung, hardwareimplementierte Zustandsmaschinen und/oder eine beliebige andere Kombination von Hardware, Software und/oder Firmware implementiert. Zum Beispiel kann die Komprimierungsprozessbestimmungsschaltungsanordnung 612 durch mindestens eine oder mehrere Hardwareschaltungen (z. B. Prozessorschaltungsanordnung, diskrete und/oder integrierte analoge und/oder digitale Schaltungsanordnung, ein FPGA, eine anwendungsspezifische integrierte Schaltung (ASIC), einen Komparator, einen Operationsverstärker, eine Logikschaltung usw.) implementiert werden, die strukturiert ist, um die entsprechende Operation durchzuführen, ohne Software oder Firmware auszuführen, aber andere Strukturen sind ebenfalls geeignet.
-
In einigen Beispielen beinhaltet die Matrixdekomprimierungsschaltungsanordnung 106 Mittel zum Bestimmen eines Orts der komprimierten Daten. Das Mittel zum Bestimmen kann zum Beispiel durch die Datenlokalisierungsschaltungsanordnung 606 implementiert werden. In einigen Beispielen kann die Datenlokalisierungsschaltungsanordnung 606 durch maschinenausführbare Anweisungen implementiert werden, wie etwa jene, die durch mindestens Block 1306 aus 13 implementiert werden, der durch die Prozessorschaltungsanordnung ausgeführt wird, die durch die beispielhafte Prozessorschaltungsanordnung 1512 aus 15, die beispielhafte Prozessorschaltungsanordnung 1600 aus 16 und/oder die beispielhafte feldprogrammierbare Gate-Array- bzw. FPGA-Schaltungsanordnung 1700 aus 17 implementiert werden kann. In anderen Beispielen wird die Datenlokalisierungsschaltungsanordnung 606 durch eine andere Hardwarelogikschaltungsanordnung, hardwareimplementierte Zustandsmaschinen und/oder eine beliebige andere Kombination von Hardware, Software und/oder Firmware implementiert. Zum Beispiel kann die Datenlokalisierungsschaltungsanordnung 606 durch mindestens eine oder mehrere Hardwareschaltungen (z. B. eine Prozessorschaltungsanordnung, eine diskrete und/oder integrierte analoge und/oder digitale Schaltungsanordnung, ein FPGA, eine anwendungsspezifische integrierte Schaltung (ASIC), einen Komparator, einen Operationsverstärker, eine Logikschaltung usw.) implementiert werden, die strukturiert ist, um die entsprechende Operation durchzuführen, ohne Software oder Firmware auszuführen, aber andere Strukturen sind ebenfalls geeignet.
-
Während eine beispielhafte Art und Weise des Implementierens der Matrixkomprimierungsschaltungsanordnung 104 aus 1 in 2 und 3 veranschaulicht ist, können ein oder mehrere der in 2 und 3 veranschaulichten Elemente, Prozesse und/oder Vorrichtungen kombiniert, geteilt, umgeordnet, weggelassen, eliminiert und/oder auf eine beliebige andere Weise implementiert werden. Ferner kann der beispielhafte Datensendeempfänger 202, die beispielhafte Abschneideschaltungsanordnung 204, die beispielhafte Komprimierungsentscheidungsschaltungsanordnung 206, die beispielhafte Komprimierungsschaltungsanordnung 208, die beispielhafte Metadatenerzeugungsschaltungsanordnung 210, der beispielhafte Speicher 212, die beispielhafte Komprimierungsdatenidentifizierungsschaltungsanordnung 302, die beispielhafte Datengrößenbestimmungsschaltungsanordnung 304, die beispielhafte Komprimierungsprozessbestimmungsschaltungsanordnung 306, die beispielhafte Metadatenaufzeichnungsschaltungsanordnung 308 und/oder allgemeiner die beispielhafte Matrixkomprimierungsschaltungsanordnung 104 aus 1, 2 und/oder 3 durch Hardware allein oder durch Hardware in Kombination mit Software und/oder Firmware implementiert werden. Dementsprechend können zum Beispiel beliebige des beispielhaften Datensendeempfängers 202, der beispielhaften Abschneideschaltungsanordnung 204, der beispielhaften Komprimierungsentscheidungsschaltungsanordnung 206, der beispielhaften Komprimierungsschaltungsanordnung 208, der beispielhaften Metadatenerzeugungsschaltungsanordnung 210, des beispielhaften Speichers 212, der beispielhaften Komprimierungsdatenidentifizierungsschaltungsanordnung 302, der beispielhaften Datengrößenbestimmungsschaltungsanordnung 304, der beispielhaften Komprimierungsprozessbestimmungsschaltungsanordnung 306, der beispielhaften Metadatenaufzeichnungsschaltungsanordnung 308 und/oder allgemeiner der beispielhaften Matrixkomprimierungsschaltungsanordnung 104 durch eine Prozessorschaltungsanordnung, eine oder mehrere analoge Schaltungen, eine oder mehrere digitale Schaltungen, eine oder mehrere Logikschaltungen, einen oder mehrere programmierbare Prozessoren, einen oder mehrere programmierbare Mikrocontroller, eine oder mehrere Grafikverarbeitungseinheiten (GPU(s)), Digitalsignalprozessor(en) (DSP(s)), anwendungsspezifische integrierte Schaltung(en) (ASIC(s)), programmierbare Logikvorrichtung(en) (PLD(s)) und/oder feldprogrammierbare Logikvorrichtung(en) (FPLD(s)), wie etwa feldprogrammierbare Gate-Arrays (FPGAs), implementiert werden. Ferner kann die beispielhafte Matrixkomprimierungsschaltungsanordnung 104 aus 1, 2 und/oder 3 ein oder mehrere Elemente, Prozesse und/oder Vorrichtungen zusätzlich zu oder anstelle der in 1, 2 und/oder 3 veranschaulichten beinhalten und/oder kann mehr als eines von beliebigen oder allen der veranschaulichten Elemente, Prozesse und Vorrichtungen beinhalten.
-
Während eine beispielhafte Art und Weise zum Implementieren der Matrixdekomprimierungsschaltungsanordnung 106 aus 1 in 6, 7, 8 und 10 veranschaulicht ist, können ein oder mehrere der in 6, 7, 8 und 10 veranschaulichten Elemente, Prozesse und/oder Vorrichtungen kombiniert, geteilt, umgeordnet, weggelassen, eliminiert und/oder auf eine beliebige andere Weise implementiert werden. Ferner können der beispielhafte Datensendeempfänger 602, die beispielhafte Überbrückungsschaltungsanordnung 604, die beispielhafte Datenlokalisierungsschaltungsanordnung 606, die beispielhafte Datentypidentifizierungsschaltungsanordnung 608, die beispielhafte Datengrößenbestimmungsschaltungsanordnung 610, die beispielhafte Komprimierungsprozessbestimmungsschaltungsanordnung 612, die beispielhafte Datendekomprimierungsschaltungsanordnung 614, der beispielhafte Speicher 616, die beispielhafte Abbildungsschaltungsanordnung 802 und/oder allgemeiner die beispielhafte Matrixdekomprimierungsschaltungsanordnung 106 aus 1, 6, 7, 8 und/oder 10 durch Hardware allein oder Hardware in Kombination mit Software und/oder Firmware implementiert werden. Dementsprechend können zum Beispiel beliebige des beispielhaften Datensendeempfängers 602, der beispielhaften Überbrückungsschaltungsanordnung 604, der beispielhaften Datenlokalisierungsschaltungsanordnung 606, der beispielhaften Datentypidentifizierungsschaltungsanordnung 608, der beispielhaften Datengrößenbestimmungsschaltungsanordnung 610, der beispielhaften Komprimierungsprozessbestimmungsschaltungsanordnung 612, der beispielhaften Datendekomprimierungsschaltungsanordnung 614, des beispielhaften Speichers 616, der beispielhaften Abbildungsschaltungsanordnung 802 und/oder allgemeiner der beispielhaften Matrixdekomprimierungsschaltungsanordnung 106, durch Prozessorschaltungsanordnungen, analoge Schaltung(en), digitale Schaltung(en), Logikschaltung(en), programmierbare Prozessor(en), programmierbare Mikrocontroller, Grafikverarbeitungseinheit(en) (GPU(s)), Digitalsignalprozessor(en) (DSP(s)), anwendungsspezifische integrierte Schaltung(en) (ASIC(s)), programmierbare Logikvorrichtung(en) (PLD(s)) und/oder feldprogrammierbare Logikvorrichtung(en) (FPLD(s)), wie etwa feldprogrammierbare Gate-Arrays (FPGAs), implementiert werden. Ferner kann die beispielhafte Matrixdekomprimierungsschaltungsanordnung 106 aus 1, 6, 7, 8 und/oder 10 ein oder mehrere Elemente, Prozesse und/oder Vorrichtungen zusätzlich zu oder anstelle der in 1, 6, 7, 8 und/oder 10 veranschaulichten beinhalten und/oder kann mehr als eines von beliebigen oder allen der veranschaulichten Elemente, Prozesse und Vorrichtungen beinhalten.
-
Flussdiagramme, die repräsentativ für beispielhafte Hardwarelogikschaltungsanordnung, maschinenlesbare Anweisungen, hardwareimplementierte Zustandsmaschinen und/oder eine beliebige Kombination davon zum Implementieren der Matrixkomprimierungsschaltungsanordnung 104 aus 1, 2 und/oder 3 sind, werden in 11 und 12 gezeigt. Ein Flussdiagramm, das repräsentativ für beispielhafte Hardwarelogikschaltungsanordnungen, maschinenlesbare Anweisungen, hardwareimplementierte Zustandsmaschinen und/oder eine beliebige Kombination davon zum Implementieren der Matrixdekomprimierungsschaltungsanordnung 106 aus 1, 6, 7, 8 und/oder 10 ist, wird in 13 gezeigt. Die maschinenlesbaren Anweisungen können ein oder mehrere ausführbare Programme oder Teil(e) eines ausführbaren Programms zur Ausführung durch eine Prozessorschaltungsanordnung sein, wie etwa die Prozessorschaltungsanordnung 1412, die in der unten in Verbindung mit 14 besprochenen beispielhaften Prozessorplattform 1400 gezeigt ist, und/oder die unten in Verbindung mit 16 und/oder 17 besprochenen beispielhafte Prozessorschaltungsanordnung. Die maschinenlesbaren Anweisungen aus 13 können ein oder mehrere ausführbare Programme oder Teil(e) eines ausführbaren Programms zur Ausführung durch eine Prozessorschaltungsanordnung sein, wie etwa die Prozessorschaltungsanordnung 1512, die in der unten in Verbindung mit 15 besprochenen beispielhaften Prozessorplattform 1500 gezeigt wird und/oder die Prozessorschaltungsanordnung, die unten in Verbindung mit 16 und/oder 17 besprochen wird. Das Programm kann in Software umgesetzt sein, die auf einem oder mehreren nicht-flüchtigen computerlesbaren Speicherungsmedien gespeichert ist, wie etwa einer CD, einer Diskette, einem Festplattenlaufwerk (HDD), einer DVD, einer Blu-Ray-Disk, einem flüchtigen Speicher (z. B. Direktzugriffsspeicher (RAM) eines beliebigen Typs usw.) oder einem nicht-flüchtigen Speicher (z. B. FLASH-Speicher, HDD usw.), die einer Prozessorschaltungsanordnung zugeordnet sind, die sich in einer oder mehreren Hardware-Vorrichtungen befindet, jedoch könnten alternativ das gesamte Programm und/oder Teile davon durch eine oder mehrere andere Hardwarevorrichtungen als die Prozessorschaltungsanordnung ausgeführt werden und/oder in Firmware oder dedizierter Hardware umgesetzt werden. Die maschinenlesbaren Anweisungen können über mehrere Hardwarevorrichtungen verteilt und/oder durch zwei oder mehr Hardwarevorrichtungen (z. B. eine Server- und eine Client-Hardwarevorrichtung) ausgeführt werden. Die Client-Hardwarevorrichtung kann zum Beispiel durch eine Endpunkt-Client-Hardwarevorrichtung (z. B. eine Hardwarevorrichtung, die einem Benutzer zugeordnet ist) oder eine Zwischen-Client-Hardwarevorrichtung (z. B. ein Funkzugangsnetzwerk- bzw. RAN-Gateway, das Kommunikation zwischen einem Server und einer Endpunkt-Client-Hardwarevorrichtung ermöglichen kann) implementiert werden. Gleichermaßen können die nicht-flüchtigen computerlesbaren Speicherungsmedien ein oder mehrere Medien beinhalten, die sich in einer oder mehreren Hardwarevorrichtungen befinden. Obwohl das beispielhafte Programm unter Bezugnahme auf das in 11, 12 und 13 veranschaulichte Flussdiagramm beschrieben ist, können alternativ viele andere Verfahren zum Implementieren der beispielhaften Matrixkomprimierungsschaltungsanordnung 104 und/oder der Matrixdekomprimierungsschaltungsanordnung 106 verwendet werden. Zum Beispiel kann die Ausführungsreihenfolge der Blöcke geändert werden, und/oder manche der beschriebenen Blöcke können geändert, eliminiert oder kombiniert werden. Zusätzlich oder alternativ können beliebige oder alle der Blöcke durch eine oder mehrere Hardwareschaltungen (z.B. Prozessorschaltungsanordnung, diskrete und/oder integrierte analoge und/oder digitale Schaltungsanordnung, ein FPGA, eine ASIC, einen Komparator, einen Operationsverstärker, eine Logikschaltung usw.) implementiert werden, die strukturiert sind, um die entsprechende Operation ohne Ausführen von Software oder Firmware durchzuführen. Die Prozessorschaltungsanordnung kann an unterschiedlichen Netzwerkstandorten und/oder lokal zu einer oder mehreren Hardwarevorrichtungen (z. B. einem Einzelkernprozessor (z. B. einer Einzelkernzentralprozessoreinheit (CPU)), einem Mehrkernprozessor (z. B. einer Mehrkern-CPU) usw.) in einer einzigen Maschine verteilt sein, mehrere Prozessoren, die über mehrere Server eines Server-Racks verteilt sind, mehrere Prozessoren, die über ein oder mehrere Server-Racks verteilt sind, eine CPU und/oder ein FPGA, die sich in demselben Package (z. B. demselben Package mit integrierter Schaltung (IC) oder in zwei oder mehr separaten Gehäusen usw.) befinden.
-
Die vorliegend beschriebenen maschinenlesbaren Anweisungen können in einem komprimierten Format und/oder einem verschlüsselten Format und/oder einem fragmentierten Format und/oder einem kompilierten Format und/oder einem ausführbaren Format und/oder einem verpackten Format usw. gespeichert sein. Die vorliegend beschriebenen maschinenlesbaren Anweisungen können als Daten oder Datenstruktur (z. B. Abschnitte von Anweisungen, Code, Darstellungen von Code usw.) gespeichert sein, die eingesetzt werden können, um maschinenlesbare Anweisungen zu erstellen, herzustellen und/oder zu erzeugen. Die maschinenlesbaren Anweisungen können zum Beispiel fragmentiert und auf einer oder mehreren Speichereinrichtungen und/oder Datenverarbeitungsvorrichtungen (z. B. Servern) gespeichert sein, die sich an denselben oder unterschiedlichen Orten eines Netzwerks oder einer Sammlung von Netzwerken (z. B. in der Cloud, in Edge-Vorrichtungen usw.) befinden. Die maschinenlesbaren Anweisungen können eines oder mehrere von Installation, Modifikation, Anpassung, Aktualisierung, Kombination, Ergänzung, Konfiguration, Entschlüsselung, Dekomprimierung, Entpacken, Verteilung, Neuzuweisung, Kompilierung usw. erfordern, um sie durch eine Datenverarbeitungsvorrichtung und/oder eine andere Maschine direkt lesbar, interpretierbar und/oder ausführbar zu machen. Zum Beispiel können die maschinenlesbaren Anweisungen in mehreren Teilen gespeichert sein, die einzeln komprimiert, verschlüsselt und/oder auf separaten Rechenvorrichtungen gespeichert sind, wobei die Teile, wenn sie entschlüsselt, dekomprimiert und/oder kombiniert werden, einen Satz maschinenausführbarer Anweisungen bilden, die eine oder mehrere Operationen implementieren, die zusammen ein Programm, wie etwa das vorliegend beschriebene, bilden können.
-
In einem anderen Beispiel können die maschinenlesbaren Anweisungen in einem Zustand gespeichert sein, in dem sie von einer Prozessorschaltungsanordnung gelesen werden können, aber das Hinzufügen zu einer Bibliothek (z. B. einer Dynamic Link Library (DLL)), zu einem Softwareentwicklungskit (SDK), einer Anwendungsprogrammierungsschnittstelle (API) usw. erfordern, um die maschinenlesbaren Anweisungen auf einer speziellen Datenverarbeitungsvorrichtung oder einer anderen Vorrichtung auszuführen. In einem anderen Beispiel müssen die maschinenlesbaren Anweisungen konfiguriert (z. B. Einstellungen gespeichert, Daten eingegeben, Netzwerkadressen aufgezeichnet usw.) werden, bevor die maschinenlesbaren Anweisungen und/oder das bzw. die entsprechende(n) Programm(e) gänzlich oder teilweise ausgeführt werden können. Somit können maschinenlesbare Medien, wie hier verwendet, maschinenlesbare Anweisungen und/oder Programm(e) unabhängig von dem speziellen Format oder Zustand der maschinenlesbaren Anweisungen und/oder Programm(e) beinhalten, wenn sie gespeichert sind oder sich anderweitig im Ruhe- oder Transportzustand befinden.
-
Die hierin beschriebenen maschinenlesbaren Anweisungen können durch eine beliebige vergangene, aktuelle oder zukünftige Anweisungssprache, Skriptsprache, Programmiersprache usw. repräsentiert sein. Beispielsweise können die maschinenlesbaren Anweisungen unter Verwendung beliebiger der folgenden Sprachen repräsentiert sein: C, C++, Java, C#, Perl, Python, JavaScript, HyperText Markup Language (HTML), Structured Query Language (SQL), Swift usw.
-
Wie oben erwähnt, können die beispielhaften Operationen aus 11, 12 und 13 unter Verwendung ausführbarer Anweisungen (z. B. computer- und/oder maschinenlesbarer Anweisungen) implementiert werden, die auf einem oder mehreren nicht-flüchtigen computer- und/oder maschinenlesbaren Medien gespeichert sind, wie etwa optischen Speicherungsvorrichtungen, magnetischen Speicherungsvorrichtungen, einer HDD, einem Flash-Speicher, einem Nur-Lese-Speicher (ROM), einer CD, einer DVD, einem Cache, einem RAM eines beliebigen Typs, einem Register und/oder einer beliebigen anderen Speicherungsvorrichtung oder Speicherungsplatte, auf der Informationen für eine beliebige Dauer (z. B. für längere Zeiträume, permanent, für kurze Fälle, zum temporären Puffern und/oder zum Zwischenspeichern der Informationen) gespeichert sind. Wie vorliegend verwendet, sind die Begriffe nicht-flüchtiges computerlesbares Medium und nicht-flüchtiges computerlesbares Speicherungsmedium ausdrücklich so definiert, dass sie eine beliebige Art von computerlesbarer Speicherungsvorrichtung und/oder Speicherungsplatte beinhalten und sich ausbreitende Signale ausschließen und Übertragungsmedien ausschließen.
-
„Beinhaltend“ und „umfassend“ (und alle Formen und Zeitformen davon) werden hier als offene Begriffe verwendet. Wenn somit ein Anspruch eine beliebige Form von „beinhalten“ oder „umfassen“ (z. B. umfasst, beinhaltet, umfassend, beinhaltend, aufweisend usw.) als eine Präambel oder innerhalb einer Anspruchsrezitation einer beliebigen Art einsetzt, versteht es sich somit, dass zusätzliche Elemente, Begriffe usw. vorhanden sein können, ohne außerhalb des Schutzumfangs des entsprechenden Anspruchs oder der entsprechenden Rezitation zu fallen. Wenn vorliegend der Ausdruck „mindestens“ als der Übergangsausdruck in zum Beispiel einer Präambel eines Anspruchs verwendet wird, ist er auf die gleiche Art und Weise offen, wie der Begriff „umfassend“ und „beinhaltend“ offen ist. Der Begriff „und/oder“ betrifft, wenn er zum Beispiel in einer Form wie A, B und/oder C verwendet wird, eine beliebige Kombination oder Untermenge von A, B, C wie (1) A allein, (2) B allein, (3) C allein, (4) A mit B, (5) A mit C, (6) B mit C oder (7) A mit B und mit C. Wie vorliegend im Zusammenhang mit der Beschreibung von Strukturen, Komponenten, Gegenständen, Objekten und/oder Dingen verwendet, bezweckt der Ausdruck „mindestens eines von A und B“ auf Implementierungen zu verweisen, die beliebige von (1) mindestens einem A, (2) mindestens einem B oder (3) mindestens einem A und mindestens einem B beinhalten. Gleichermaßen soll, wie vorliegend im Kontext des Beschreibens von Strukturen, Komponenten , Elementen, Objekten und/oder Dingen verwendet, der Ausdruck „mindestens eines von A oder B“ auf Implementierungen verweisen, die beliebige von (1) mindestens einem A, (2) mindestens einem B und (3) mindestens einem A und mindestens einem B beinhalten. Wie vorliegend im Kontext der Beschreibung der Durchführung oder Ausführung von Prozessen, Anweisungen, Aktionen, Aktivitäten und/oder Schritten verwendet, soll der Ausdruck „mindestens eines von A und B“ auf Implementierungen verweisen, die beliebige von (1) mindestens einem A, (2) mindestens einem B oder (3) mindestens einem A und mindestens einem B beinhalten. Gleichermaßen soll, wie vorliegend im Zusammenhang mit der Beschreibung der Durchführung oder Ausführung von Prozessen, Anweisungen, Aktionen, Aktivitäten und/oder Schritten verwendet, der Ausdruck „mindestens eines von A oder B“ auf Implementierungen verweisen, die beliebige von (1) mindestens einem A, (2) mindestens einem B oder (3) mindestens einem A und mindestens einem B beinhalten.
-
Wie hierin verwendet schließen Bezugnahmen in der Einzahl (z. B. „ein“, „eine“, „eines“, „erstes“, „zweites“ usw.) eine Vielzahl nicht aus. Der Begriff „ein“ Objekt, wie vorliegend verwendet, verweist auf eines oder mehrere dieses Objekts. Die Begriffe „ein“, „ein oder mehrere“ und „mindestens ein“ werden vorliegend austauschbar verwendet. Wenngleich einzeln aufgelistet, können ferner eine Vielzahl von Mitteln, Elementen oder Verfahrensaktionen durch z. B. dieselbe Entität oder dasselbe Objekt implementiert werden. Auch wenn einzelne Merkmale in unterschiedlichen Beispielen oder Ansprüchen enthalten sein können, können diese zudem möglicherweise kombiniert werden und die Aufnahme in unterschiedlichen Beispielen oder Ansprüchen impliziert nicht, dass eine Kombination von Merkmalen nicht machbar und/oder vorteilhaft ist.
-
11 ist ein Flussdiagramm, das repräsentativ für beispielhafte maschinenlesbare Anweisungen und/oder beispielhafte Operationen 400 ist, die durch eine Prozessorschaltungsanordnung ausgeführt und/oder instanziiert werden können, um die Matrixkomprimierungsschaltungsanordnung 104 aus 1, 2 und/oder 3 zu implementieren, um Kacheln neuronaler Netzwerkgewichtungen zu komprimieren. Die maschinenlesbaren Anweisungen und/oder Operationen 1100 aus 11 beginnen bei Block 1102, bei dem die Matrixkomprimierungsschaltungsanordnung 104 unkomprimierte Daten (z. B. Kacheln von neuronalen Netzwerkgewichtungen) empfängt. Zum Beispiel kann der Datensendeempfänger 202 (2) die Kacheln von neuronalen Netzwerkgewichtungen von der neuronalen Netzwerkschaltungsanordnung 102 über den Bus 108 empfangen.
-
Bei Block 1104 schneidet die Matrixkomprimierungsschaltungsanordnung 104 die Daten (z. B. eine Kachel von neuronalen Netzwerkgewichtungen) ab. Zum Beispiel kann die Abschneideschaltungsanordnung 204 (2) die Daten abschneiden. Insbesondere wandelt die Abschneideschaltungsanordnung 204 die unkomprimierten Daten in teilkomprimierte Daten durch Entfernen von Gewichtungen unterhalb einer gewissen Schwelle um.
-
Bei Block 1106 bestimmt die Matrixkomprimierungsschaltungsanordnung 104, ob Daten komprimiert werden sollen. Zum Beispiel bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206 (2), ob die Daten komprimiert werden sollen. In einigen Beispielen bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206, ob die Daten komprimiert werden sollen, basierend darauf, dass eine Menge oder ein Prozentsatz von Bytes in den Daten einen Wert von null aufweist. Zum Beispiel kann die Komprimierungsentscheidungsschaltungsanordnung 206 bestimmen, ob die Menge oder der Prozentsatz von Bytes in den Daten mit einem Wert von null eine Schwelle erfüllt (z. B. größer als diese ist). Insbesondere ermöglicht eine größere Menge oder Prozentsatz von Bytes mit einem Wert von null eine größere Menge an Platzeinsparung als Reaktion auf die Komprimierung. Im Gegenzug kann die Komprimierungsentscheidungsschaltungsanordnung 206 die Schwelle basierend auf einer Anzahl oder einem Prozentsatz von Bytes bestimmen, die den Daten ermöglichen würden, weniger Cachezeilen belegen als die unkomprimierten Daten, als Reaktion darauf, dass sie einen Wert von null aufweisen. In einigen Beispielen sendet die Komprimierungsentscheidungsschaltungsanordnung 206 ein erstes Signal an die Metadatenerzeugungsschaltungsanordnung 210 (2 und 3), die angeben, dass die Daten komprimiert werden, als Reaktion auf das Bestimmen, dass die Daten komprimiert werden sollen. In einigen Beispielen sendet die Komprimierungsentscheidungsschaltungsanordnung 206 ein zweites Signal an die Metadatenerzeugungsschaltungsanordnung 210, das angibt, dass die Daten unkomprimiert bleiben, als Reaktion auf das Bestimmen, dass die Daten unkomprimiert bleiben sollen. Als Reaktion darauf, dass die Komprimierungsentscheidungsschaltungsanordnung 206 entscheidet, die Daten zu komprimieren, gehen die Operationen 1100 zu Block 1108 über. Andernfalls springen die Operationen 1100 zu Block 1112.
-
Bei Block 1108 bestimmt die Matrixkomprimierungsschaltungsanordnung 104 einen auszuführenden Komprimierungsprozess. Die Komprimierungsentscheidungsschaltungsanordnung 206 kann zum Beispiel den Komprimierungsprozess zum Ausführen basierend auf einer Anzahl oder einem Prozentsatz von Bytes in den Datenwerten ungleich null bestimmen. In einigen Beispielen bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206, dass ein erster Komprimierungsprozess (z. B. „Null-Komprimierung“) ausgeführt werden soll, als Reaktion darauf, dass die Daten mindestens ein Byte mit einem Nicht-Null-Wert aufweisen. In einigen Beispielen bestimmt die Komprimierungsentscheidungsschaltungsanordnung 206 einen zweiten Komprimierungsprozess (z. B. „Alle-Null“-Komprimierung), der ausgeführt werden soll, als Reaktion darauf, dass alle Bytes in den Daten einen Wert von null aufweisen. In einigen Beispielen sendet die Komprimierungsentscheidungsschaltungsanordnung 206 ein Signal an die Metadatenerzeugungsschaltungsanordnung 210, das den auszuführenden Komprimierungsprozess angibt.
-
Bei Block 1110 komprimiert die Matrixkomprimierungsschaltungsanordnung 104 die Daten. Zum Beispiel kann die Komprimierungsschaltungsanordnung 208 (2) eine Komprimierungsoperation basierend auf der Komprimierungsoperation ausführen, die durch die Komprimierungsentscheidungsschaltungsanordnung 206 bestimmt wird. In einigen Beispielen erzeugt die Komprimierungsschaltungsanordnung 208 zum Ausführen der „Null-Komprimierungs“-Operation eine Bitmap (z. B. die Bitmap 408 aus 4), die Orte von Bytes mit Werten ungleich null in den Daten angibt, und packt die Werte ungleich null in eine komprimierte Kachel (z. B. die komprimierte Kachel 410 aus 4). In einigen Beispielen komprimiert die Komprimierungsschaltungsanordnung 208 die Daten auf ein Byte mit einem Wert von Null, um die Komprimierungsoperation „alle Null“ auszuführen. In einigen Beispielen sendet die Komprimierungsschaltungsanordnung 208 die Daten als Reaktion auf das Komprimieren der Daten an die Metadatenerzeugungsschaltungsanordnung 210.
-
Bei Block 1112 erzeugt die Matrixkomprimierungsschaltungsanordnung 104 Metadaten. Zum Beispiel kann die Metadatenerzeugungsschaltungsanordnung 210 ein Byte von Metadaten basierend darauf erzeugen, ob die Daten komprimiert sind, auf der ausgeführten Komprimierungsoperation und einer Größe der Daten als Reaktion darauf, dass sie komprimiert sind, wie ferner in Verbindung mit 12 erörtert wird.
-
Bei Block 1114 speichert die Matrixkomprimierungsschaltungsanordnung 104 die Metadaten in einem ersten Teil des Speichers 212 (2). Zum Beispiel kann die Metadatenerzeugungsschaltungsanordnung 210 die Metadaten in einer ersten Cachezeile des Speichers 212 speichern (2). Insbesondere kann die Metadatenerzeugungsschaltungsanordnung 210 Metadaten für vierundsechzig Kacheln in der ersten Cachezeile des Speichers 212 speichern.
-
Bei Block 1116 speichert die Matrixkomprimierungsschaltungsanordnung 104 die Daten in einem zweiten Teil des Speichers 212. Zum Beispiel kann die Komprimierungsschaltungsanordnung 208 die Daten in den Cachezeilen des Speichers im Anschluss an die erste Cachezeile speichern.
-
Bei Block 1118 sendet die Matrixkomprimierungsschaltungsanordnung 104 die Daten und die Metadaten an die Matrixdekomprimierungsschaltungsanordnung 106 (1, 6, 7, 8 und/oder 10). Zum Beispiel kann der Datensendeempfänger 202 die Daten und die Metadaten an die Matrixdekomprimierungsschaltungsanordnung 106 senden. In einigen Beispielen sendet der Datensendeempfänger 202 die Daten und die Metadaten in einem Format, das in dem Speicher gespeichert ist.
-
12 ist ein Flussdiagramm, das beispielhafte maschinenlesbare Anweisungen und/oder beispielhafte Operationen repräsentiert, die durch eine Prozessorschaltungsanordnung ausgeführt und/oder instanziiert werden können, um die Metadatenerzeugungsschaltungsanordnung 210 aus 2 und 3 zu implementieren, um Metadaten für jeweilige Kacheln von neuronalen Netzwerkgewichtungen zu erzeugen. Die maschinenlesbaren Anweisungen und/oder Operationen 1200 aus 12 beginnen bei Block 1202, bei dem die Metadatenerzeugungsschaltungsanordnung 210 bestimmt, ob die Daten komprimiert sind. Zum Beispiel kann die Komprimierungsdatenidentifizierungsschaltungsanordnung 302 (3) basierend auf einem von der Komprimierungsentscheidungsschaltungsanordnung 206 (2) empfangenen Signal bestimmen, ob die Daten komprimiert sind. Insbesondere kann die Komprimierungsdatenidentifizierungsschaltungsanordnung 302 als Reaktion auf das Empfangen eines ersten Signals bestimmen, dass die Daten komprimiert sind. Umgekehrt kann die Komprimierungsdatenidentifizierungsschaltungsanordnung 302 als Reaktion auf das Empfangen eines zweiten Signals bestimmen, dass die Daten unkomprimiert sind. In einigen Beispielen bestimmt die Komprimierungsdatenidentifizierungsschaltungsanordnung 302 als Reaktion auf das Empfangen der Daten von der Komprimierungsschaltungsanordnung 208 (2), dass die Daten komprimiert sind. Als Reaktion darauf, dass die komprimierte Daten identifizierende Schaltungsanordnung 302 bestimmt, dass die Daten komprimiert sind, gehen die Operationen 1300 zu Block 1204 über. Als Reaktion darauf, dass die komprimierte Daten identifizierende Schaltungsanordnung 302 bestimmt, dass die Daten unkomprimiert sind, gehen die Operationen 1300 zu Block 1206 über.
-
Bei Block 1204 weist die Metadatenerzeugungsschaltungsanordnung 210 einem ersten Teil der Metadaten einen ersten Wert zu. Zum Beispiel kann die Metadatenaufzeichnungsschaltungsanordnung 308 (3) den ersten Wert (z. B. 0) in einem ersten Bit der Metadaten aufzeichnen.
-
Bei Block 1206 weist die Metadatenerzeugungsschaltungsanordnung 210 dem ersten Teil der Metadaten einen zweiten Wert zu. Zum Beispiel kann die Metadatenaufzeichnungsschaltungsanordnung 308 den zweiten Wert (z. B. 1) in dem ersten Bit der Metadaten aufzeichnen.
-
Bei Block 1208 bestimmt die Metadatenerzeugungsschaltungsanordnung 210 eine Größe der Daten. Zum Beispiel kann die Datengrößenbestimmungsschaltungsanordnung 304 ( 3) eine Cachegröße der Daten bestimmen. In einigen Beispielen bestimmt die Datengrößenbestimmungsschaltungsanordnung 304 eine Anzahl von Cachezeilen, die durch die Daten belegt sind.
-
Bei Block 1210 zeichnet die Metadatenerzeugungsschaltungsanordnung 210 die Größe der Daten in einem zweiten Teil der Metadaten auf. Zum Beispiel kann die Metadatenaufzeichnungsschaltungsanordnung 308 vier Bits der Metadaten angrenzend an das erste Bit konfigurieren, um die Anzahl von Cachezeilen anzugeben, die durch die Daten belegt sind.
-
Bei Block 1212 bestimmt die Metadatenerzeugungsschaltungsanordnung 210 eine Komprimierungsoperation, die ausgeführt wird, um die Daten zu erhalten. Die Komprimierungsprozessbestimmungsschaltungsanordnung 306 kann zum Beispiel die Komprimierungsoperation basierend auf einem Signal bestimmen, das von der Komprimierungsentscheidungsschaltungsanordnung 206 empfangen wird. In einigen Beispielen analysiert die Komprimierungsprozessbestimmungsschaltungsanordnung 306 ein Format der Daten, um die Komprimierungsoperation zu bestimmen. Zum Beispiel kann die Komprimierungsprozessbestimmungsschaltungsanordnung 306 als Reaktion auf das Identifizieren einer Bitmap oder einer komprimierten Kachel bestimmen, dass die Daten über eine „Null-Komprimierungs“-Operation komprimiert wurden. In einigen Beispielen bestimmt die Komprimierungsprozessbestimmungsschaltungsanordnung 306 als Reaktion auf das Identifizieren, dass die Daten ein einzelnes Byte mit einem Wert von null beinhalten, dass die Daten über eine „Alle-Null“-Komprimierungsoperation komprimiert wurden.
-
Bei Block 1214 aktualisiert die Metadatenerzeugungsschaltungsanordnung 210 einen dritten Teil der Metadaten basierend auf der ausgeführten Komprimierungsoperation. Zum Beispiel kann die Metadatenaufzeichnungsschaltungsanordnung 308 den letzten drei Bits der Metadaten einen Wert zuweisen, der der ausgeführten Komprimierungsoperation entspricht.
-
13 ist ein Flussdiagramm, das repräsentativ für beispielhafte maschinenlesbare Anweisungen und/oder beispielhafte Operationen 1300 ist, die durch eine Prozessorschaltungsanordnung ausgeführt und/oder instanziiert werden können, um die Matrixdekomprimierungsschaltungsanordnung 106 aus 1, 6, 7, 8 und/oder 10 zu implementieren, um Daten, die Kacheln neuronaler Netzwerkgewichtungen entsprechen, zu dekomprimieren. Die maschinenlesbaren Anweisungen und/oder Operationen 1300 aus 13 beginnen bei Block 1302, bei dem die Matrixdekomprimierungsschaltungsanordnung 106 eine zu ladende Kachel identifiziert. Zum Beispiel kann der Datensendeempfänger 602 (6) ein Signal, das die Kachel angibt, von der neuronalen Netzwerkschaltungsanordnung 102 (1) über den Bus 108 (1, 2 und 6) empfangen. In einigen Beispielen empfängt der Datensendeempfänger 602 eine Adresse der Kachel, die einen Ort (z. B. eine Adresse) der Kachel bezüglich anderer Kacheln in einem assoziierten Kachelarray angibt.
-
Bei Block 1304 greift die Matrixdekomprimierungsschaltungsanordnung 106 auf Metadaten (z. B. die Metadaten 402 aus 4) zu, die mit der Kachel assoziiert sind. Zum Beispiel kann die Überbrückungsschaltungsanordnung 604 (6) die Adresse der Kachel mit dem Byte von Metadaten korrelieren, die mit der Kachel assoziiert sind. Insbesondere kann die Überbrückungsschaltungsanordnung als Reaktion darauf, dass die Kachel die dritte Kachel in dem Kachelarray ist, auf ein drittes Byte in einer Metadaten-Cachezeile (z. B. der Metadaten-Cachezeile 502 aus 5) zugreifen, die in dem Speicher 616 (6) gespeichert ist, um auf die Metadaten zuzugreifen, die mit der Kachel assoziiert sind.
-
Bei Block 1306 bestimmt die Matrixdekomprimierungsschaltungsanordnung 106 einen Ort von Daten, die mit der Kachel assoziiert sind. Zum Beispiel kann die Datenlokalisierungsschaltungsanordnung 606 Metadaten analysieren, die vor den Metadaten positioniert sind, die mit der Kachel in der Metadaten-Cachezeile assoziiert sind, um eine Anzahl von Cachezeilen zu bestimmen, die durch die vorhergehenden Kacheln in dem Speicher 616 belegt sind. Im Gegenzug kann die Datenlokalisierungsschaltungsanordnung 606 einen Offset einer anfänglichen Cachezeile der mit der Kachel assoziierten Daten bestimmen.
-
Bei Block 1308 bestimmt die Matrixdekomprimierungsschaltungsanordnung 106 zu ladende Cachezeilen. Zum Beispiel kann die Datengrößenbestimmungsschaltungsanordnung 610 eine Anzahl von Cachezeilen, die mit der Kachel assoziiert sind, basierend auf einem Teil der Metadaten, die mit der Kachel assoziiert sind, bestimmen. In einigen Beispielen bestimmt die Datengrößenbestimmungsschaltungsanordnung 610 als Reaktion auf einen ersten Teil der Metadaten (z. B. der erste Teil 406 der Metadaten 402 aus 4), der einen ersten Wert (z. B. 0) beinhaltet, dass die Anzahl von zu ladenden Cachezeilen einer Anzahl von Cachezeilen entspricht, die durch eine unkomprimierte Kachel belegt sind. In einigen Beispielen bestimmt die Datengrößenbestimmungsschaltungsanordnung 610 als Reaktion darauf, dass der erste Teil der Metadaten einen zweiten Wert (z. B. 1) beinhaltet, die Anzahl von zu ladenden Cachezeilen basierend auf einem zweiten Teil der Metadaten (z. B. dem dritten Teil 416 der Metadaten 402 aus 4).
-
Bei Block 1310 lädt die Matrixdekomprimierungsschaltungsanordnung 106 die mit der Kachel assoziierten Cachezeilen. Zum Beispiel kann die Datendekomprimierungsschaltungsanordnung 614 (6) die unkomprimierte Kachel basierend auf dem bestimmten Ort der Kachel und der Anzahl von durch die Kachel belegten Cachezeilen aus dem Speicher 616 laden.
-
Bei Block 1312 bestimmt die Matrixdekomprimierungsschaltungsanordnung 106, ob die Kachel komprimiert ist. Zum Beispiel kann die Datentypidentifizierungsschaltungsanordnung 608 (6) als Reaktion darauf, dass der erste Teil der Metadaten den ersten Wert beinhaltet, bestimmen, dass die Kachel unkomprimiert ist. Umgekehrt kann die Datentypidentifizierungsschaltungsanordnung 608 als Reaktion darauf, dass der erste Teil der Metadaten den zweiten Wert beinhaltet, bestimmen, dass die Kachel komprimiert ist. Als Reaktion darauf, dass die Kachel komprimiert ist, gehen die beispielhaften Operationen 1300 zu Block 1314 über. Als Reaktion darauf, dass die Kachel unkomprimiert ist, gehen die beispielhaften Operationen 1300 zu Block 1318 über.
-
Bei Block 1314 bestimmt die Matrixdekomprimierungsschaltungsanordnung 106 eine Operation, die zum Komprimieren der Kachel ausgeführt wird. Zum Beispiel kann die Komprimierungsprozessbestimmungsschaltungsanordnung 612 den Komprimierungsprozess, der durch die Matrixkomprimierungsschaltungsanordnung 104 in den beispielhaften Operationen 1100 aus 11 ausgeführt wird, basierend auf einem dritten Teil der Metadaten (z. B. dem zweiten Teil 414 der Metadaten aus 4), der mit der Kachel assoziiert ist, bestimmen. In einigen Beispielen korreliert die Komprimierungsprozessbestimmungsschaltungsanordnung 612 einen Wert des dritten Teils der Metadaten mit einer assoziierten Komprimierungsoperation, um die ausgeführte Komprimierungsoperation zu bestimmen. Zum Beispiel kann die Komprimierungsprozessbestimmungsschaltungsanordnung 612 als Reaktion darauf, dass der dritte Teil der Metadaten einen ersten Wert beinhaltet, bestimmen, dass eine erste Komprimierungsoperation (z. B. „Null-Komprimierung“) ausgeführt wurde, um die Kachel zu erhalten. Gleichermaßen kann die Komprimierungsprozessbestimmungsschaltungsanordnung 612 als Reaktion darauf, dass der dritte Teil der Metadaten einen zweiten Wert beinhaltet, bestimmen, dass eine zweite Komprimierungsoperation (z. B. „alle Null“) ausgeführt wurde, um die Kachel zu erhalten.
-
Bei Block 1316 dekomprimiert die Matrixdekomprimierungsschaltungsanordnung 106 die Kachel. Zum Beispiel kann die Datendekomprimierungsschaltungsanordnung 614 die Kachel basierend auf der Operation, die zum Komprimieren der Kachel ausgeführt wird, dekomprimieren.
-
Bei Block 1318 sendet die Matrixdekomprimierungsschaltungsanordnung 106 die Kachel an die neuronale Netzwerkschaltungsanordnung 102 (1). Zum Beispiel kann der Datensendeempfänger 602 die Kachel über den Bus 108 an die neuronale Netzwerkschaltungsanordnung 102 senden. Entsprechend kann die neuronale Netzwerkschaltungsanordnung 102 die Kachel nutzen, um eine Inferenz basierend auf einer Eingabe durchzuführen.
-
14 ist ein Blockdiagramm einer beispielhaften Prozessorplattform 1400, die zum Ausführen und/oder Instanziieren der maschinenlesbaren Anweisungen und/oder Operationen aus 11 und 12 strukturiert ist, um die Matrixkomprimierungsschaltungsanordnung 104 aus 1, 2 und 3 zu implementieren. Die Prozessorplattform 1400 kann zum Beispiel ein Server, ein Personal Computer, eine Workstation, eine selbstlernende Maschine (z. B. ein neuronales Netzwerk), eine Mobilvorrichtung (z. B. ein Mobiltelefon, ein Smartphone, ein Tablet wie etwa ein iPad™), ein Personal Digital Assistant (PDA), ein Internetgerät oder eine beliebige andere Art von Datenverarbeitungsvorrichtung sein.
-
Die Prozessorplattform 1400 des veranschaulichten Beispiels umfasst eine Prozessorschaltungsanordnung 1412. Die Prozessorschaltungsanordnung 1412 des veranschaulichten Beispiels ist Hardware. Zum Beispiel kann die Prozessorschaltungsanordnung 1412 durch eine oder mehrere integrierte Schaltungen, Logikschaltungen, FPGA-Mikroprozessoren, CPUs, GPUs, DSPs und/oder Mikrocontroller einer beliebigen gewünschten Familie oder eines beliebigen gewünschten Herstellers implementiert werden. Die Prozessorschaltungsanordnung 1412 kann durch eine oder mehrere halbleiterbasierte (z. B. siliciumbasierte) Vorrichtungen implementiert werden. In diesem Beispiel implementiert die Prozessorschaltungsanordnung 1412 die Matrixkomprimierungsschaltungsanordnung 104, die Abschneideschaltungsanordnung 204, die Komprimierungsentscheidungsschaltungsanordnung 206, die Komprimierungsschaltungsanordnung 208, die Metadatenerzeugungsschaltungsanordnung 210, die Komprimierungsdatenidentifizierungsschaltungsanordnung 302, die Datengrößenbestimmungsschaltungsanordnung 304, die Komprimierungsprozessbestimmungsschaltungsanordnung 306 und die Metadatenaufzeichnungsschaltungsanordnung 308.
-
Die Prozessorschaltungsanordnung 1412 des veranschaulichten Beispiels beinhaltet einen lokalen Speicher 1413 (z. B. einen Cache, Register usw.). Die Prozessorschaltungsanordnung 1412 des veranschaulichten Beispiels steht durch einen Bus 1418 in Kommunikation mit einem Hauptspeicher, der einen flüchtigen Speicher 1414 und einen nicht-flüchtigen Speicher 1416 beinhaltet. Der flüchtige Speicher 1414 kann durch SDRAM (Synchronous Dynamic Random Access Memory), DRAM (Dynamic Random Access Memory), RDRAM® (RAMBUS® Dynamic Random Access Memory) und/oder eine beliebige andere Art von RAM-Vorrichtung implementiert werden. Der nicht-flüchtige Speicher 1416 kann durch Flash-Speicher und/oder eine beliebige andere gewünschte Art von Speichervorrichtung implementiert werden. Der Zugriff auf den Hauptspeicher 1414, 1416 des veranschaulichten Beispiels wird durch eine Speichersteuerung 1417 gesteuert.
-
Die Prozessorplattform 1400 des veranschaulichten Beispiels beinhaltet zudem eine Schnittstellenschaltungsanordnung 1420. Die Schnittstellenschaltungsanordnung 1420 kann durch Hardware gemäß einer beliebigen Art von Schnittstellenstandard implementiert werden, wie etwa einer Ethernet-Schnittstelle, einer Universal-Serial-Bus- bzw. USB-Schnittstelle, einer Bluetooth®-Schnittstelle, einer Nahfeldkommunikations- bzw. NFC-Schnittstelle, einer PCI-Schnittstelle und/oder einer PCIe-Schnittstelle. In diesem Beispiel setzt die Schnittstellenschaltungsanordnung 1420 den Datensendeempfänger 202 um.
-
In dem veranschaulichten Beispiel sind eine oder mehrere Eingabevorrichtungen 1422 mit der Schnittstellenschaltungsanordnung 1420 verbunden. Die Eingabevorrichtung(en) 1422 ermöglicht (ermöglichen) einem Benutzer, Daten und/oder Befehle in die Prozessorschaltungsanordnung 1412 einzugeben. Die eine oder die mehreren Eingabevorrichtungen 1422 können zum Beispiel durch einen Audiosensor, ein Mikrofon, eine Kamera (Standbild oder Video), eine Tastatur, eine Taste, eine Maus, einen Touchscreen, ein Trackpad, einen Trackball, Isopoint und/oder ein Spracherkennungssystem implementiert werden.
-
Eine oder mehrere Ausgabevorrichtungen 1424 sind ebenfalls mit der Schnittstellenschaltungsanordnung 1420 des veranschaulichten Beispiels verbunden. Die Ausgabevorrichtungen 1424 können zum Beispiel durch Anzeigevorrichtungen (z. B. eine Leuchtdiode (LED), eine organische Leuchtdiode (OLED), eine Flüssigkristallanzeige (LCD), eine Kathodenstrahlröhren- bzw. CRT-Anzeige, eine IPS-Anzeige (in-place switching, in einer Ebene schaltend), einen berührungsempfindlichen Bildschirm usw.), eine taktile Ausgabevorrichtung, einen Drucker und/oder Lautsprecher implementiert werden. Die Schnittstellenschaltungsanordnung 1420 des veranschaulichten Beispiels beinhaltet somit typischerweise eine Grafiktreiber-Karte, einen Grafiktreiber-Chip und/oder eine Grafikprozessor-Schaltungsanordnung, wie etwa eine GPU.
-
Die Schnittstellenschaltungsanordnung 1420 des veranschaulichten Beispiels beinhaltet zudem eine Kommunikationsvorrichtung, wie etwa einen Sender, einen Empfänger, einen Sendeempfänger, ein Modem, ein Heim-Gateway, einen drahtlosen Zugangspunkt und/oder eine Netzwerkschnittstelle, um den Austausch von Daten mit externen Maschinen (z. B. Datenverarbeitungsvorrichtungen einer beliebigen Art) durch ein Netzwerk 1426 zu ermöglichen. Die Kommunikation kann zum Beispiel durch eine Ethernet-Verbindung, eine DSL-Verbindung (Digital Subscriber Line), eine Telefonleitungsverbindung, ein Koaxialkabelsystem, ein Satellitensystem, ein drahtloses Sichtliniensystem, ein Mobilfunksystem, eine optische Verbindung usw. erfolgen.
-
Die Prozessorplattform 1400 des veranschaulichten Beispiels beinhaltet zudem eine oder mehrere Massenspeicherungsvorrichtungen 1428 zum Speichern von Software und/oder Daten. Zu Beispielen für solche Massenspeicherungsvorrichtungen 1428 zählen magnetische Speicherungsvorrichtungen, optische Speicherungsvorrichtungen, Diskettenlaufwerke, HDDs, CDs, Blu-Ray-Disk-Laufwerke, RAID- ( redundant array of independent disks, redundante Anordnung unabhängiger Festplatten) Systeme, Solid-State-Speicherungsvorrichtungen, wie etwa Flash-Speichervorrichtungen, und DVD-Laufwerke.
-
Die maschinenausführbaren Anweisungen 1432, die durch die maschinenlesbaren Anweisungen aus 11 und 12 implementiert werden, können in der Massenspeicherungsvorrichtung 1428, in dem flüchtigen Speicher 1414, in dem nicht-flüchtigen Speicher 1416 und/oder auf einem entfernbaren nicht-flüchtigen computerlesbaren Speichermedium, wie etwa einer CD oder DVD, gespeichert sein.
-
15 ist ein Blockdiagramm einer beispielhaften Prozessorplattform 1500, die dazu strukturiert ist, die maschinenlesbaren Anweisungen und/oder Operationen aus 15 auszuführen und/oder zu instanziieren, um die Matrixdekomprimierungsschaltungsanordnung 106 aus 1, 6, 7, 8 und 10 zu implementieren. Die Prozessorplattform 1500 kann zum Beispiel ein Server, ein Personal Computer, eine Workstation, eine selbstlernende Maschine (z. B. ein neuronales Netzwerk), eine Mobilvorrichtung (z. B. ein Mobiltelefon, ein Smartphone, ein Tablet wie etwa ein iPad™), ein Personal Digital Assistant (PDA), ein Internetgerät oder eine beliebige andere Art von Datenverarbeitungsvorrichtung sein.
-
Die Prozessorplattform 1500 des veranschaulichten Beispiels umfasst eine Prozessorschaltungsanordnung 1512. Die Prozessorschaltungsanordnung 1512 des veranschaulichten Beispiels ist Hardware. Zum Beispiel kann die Prozessorschaltungsanordnung 1512 durch eine oder mehrere integrierte Schaltungen, Logikschaltungen, FPGA-Mikroprozessoren, CPUs, GPUs, DSPs und/oder Mikrocontroller einer beliebigen gewünschten Familie oder eines beliebigen gewünschten Herstellers implementiert werden. Die Prozessorschaltungsanordnung 1512 kann durch eine oder mehrere halbleiterbasierte (z. B. siliciumbasierte) Vorrichtungen implementiert werden. In diesem Beispiel implementiert die Prozessorschaltungsanordnung 1512 die Überbrückungsschaltungsanordnung 604, die Datenlokalisierungsschaltungsanordnung 606, die Datentypidentifizierungsschaltungsanordnung 608, die Datengrößenbestimmungsschaltungsanordnung 610, die Komprimierungsprozessbestimmungsschaltungsanordnung 612 und die Datendekomprimierungsschaltungsanordnung 614.
-
Die Prozessorschaltungsanordnung 1512 des veranschaulichten Beispiels beinhaltet einen lokalen Speicher 1513 (z. B. einen Cache, Register usw.). Die Prozessorschaltungsanordnung 1512 des veranschaulichten Beispiels steht durch einen Bus 1518 in Kommunikation mit einem Hauptspeicher, der einen flüchtigen Speicher 1514 und einen nicht-flüchtigen Speicher 1516 beinhaltet. Der flüchtige Speicher 1514 kann durch SDRAM (Synchronous Dynamic Random Access Memory), DRAM (Dynamic Random Access Memory), RDRAM® (RAMBUS® Dynamic Random Access Memory) und/oder eine beliebige andere Art von RAM-Vorrichtung implementiert werden. Der nichtflüchtige Speicher 1516 kann durch Flash-Speicher und/oder eine beliebige andere gewünschte Art von Speichervorrichtung implementiert werden. Der Zugriff auf den Hauptspeicher 1514, 1516 des veranschaulichten Beispiels wird durch eine Speichersteuerung 1517 gesteuert.
-
Die Prozessorplattform 1500 des veranschaulichten Beispiels beinhaltet zudem eine Schnittstellenschaltungsanordnung 1520. Die Schnittstellenschaltungsanordnung 1520 kann durch Hardware gemäß einer beliebigen Art von Schnittstellenstandard implementiert werden, wie etwa einer Ethernet-Schnittstelle, einer Universal-Serial-Bus- bzw. USB-Schnittstelle, einer Bluetooth®-Schnittstelle, einer Nahfeldkommunikations- bzw. NFC-Schnittstelle, einer PCI-Schnittstelle und/oder einer PCIe-Schnittstelle. In diesem Beispiel setzt die Schnittstellenschaltungsanordnung 1520 den Datensendeempfänger 602 um.
-
In dem veranschaulichten Beispiel sind eine oder mehrere Eingabevorrichtungen 1522 mit der Schnittstellenschaltungsanordnung 1520 verbunden. Die Eingabevorrichtung(en) 1522 ermöglicht (ermöglichen) einem Benutzer, Daten und/oder Befehle in die Prozessorschaltungsanordnung 1512 einzugeben. Die eine oder die mehreren Eingabevorrichtungen 1522 können zum Beispiel durch einen Audiosensor, ein Mikrofon, eine Kamera (Standbild oder Video), eine Tastatur, eine Taste, eine Maus, einen Touchscreen, ein Trackpad, einen Trackball, Isopoint und/oder ein Spracherkennungssystem implementiert werden.
-
Eine oder mehrere Ausgabevorrichtungen 1524 sind ebenfalls mit der Schnittstellenschaltungsanordnung 1520 des veranschaulichten Beispiels verbunden. Die Ausgabevorrichtungen 1524 können zum Beispiel durch Anzeigevorrichtungen (z. B. eine Leuchtdiode (LED), eine organische Leuchtdiode (OLED), eine Flüssigkristallanzeige (LCD), eine Kathodenstrahlröhren- bzw. CRT-Anzeige, eine IPS-Anzeige (in-place switching, in einer Ebene schaltend), einen berührungsempfindlichen Bildschirm usw.), eine taktile Ausgabevorrichtung, einen Drucker und/oder Lautsprecher implementiert werden. Die Schnittstellenschaltungsanordnung 1520 des veranschaulichten Beispiels beinhaltet somit typischerweise eine Grafiktreiber-Karte, einen Grafiktreiber-Chip und/oder eine Grafikprozessor-Schaltungsanordnung, wie etwa eine GPU.
-
Die Schnittstellenschaltungsanordnung 1520 des veranschaulichten Beispiels beinhaltet zudem eine Kommunikationsvorrichtung, wie etwa einen Sender, einen Empfänger, einen Sendeempfänger, ein Modem, ein Heim-Gateway, einen drahtlosen Zugangspunkt und/oder eine Netzwerkschnittstelle, um den Austausch von Daten mit externen Maschinen (z. B. Datenverarbeitungsvorrichtungen einer beliebigen Art) durch ein Netzwerk 1526 zu ermöglichen. Die Kommunikation kann zum Beispiel durch eine Ethernet-Verbindung, eine DSL-Verbindung (Digital Subscriber Line), eine Telefonleitungsverbindung, ein Koaxialkabelsystem, ein Satellitensystem, ein drahtloses Sichtliniensystem, ein Mobilfunksystem, eine optische Verbindung usw. erfolgen.
-
Die Prozessorplattform 1500 des veranschaulichten Beispiels beinhaltet zudem eine oder mehrere Massenspeicherungsvorrichtungen 1528 zum Speichern von Software und/oder Daten. Zu Beispielen für solche Massenspeicherungsvorrichtungen 1528 zählen magnetische Speicherungsvorrichtungen, optische Speicherungsvorrichtungen, Diskettenlaufwerke, HDDs, CDs, Blu-Ray-Disk-Laufwerke, RAID- ( redundant array of independent disks, redundante Anordnung unabhängiger Festplatten) Systeme, Solid-State-Speicherungsvorrichtungen, wie etwa Flash-Speichervorrichtungen, und DVD-Laufwerke.
-
Die maschinenausführbaren Anweisungen 1532, die durch die maschinenlesbaren Anweisungen aus 13 implementiert werden können, können in der Massenspeicherungsvorrichtung 1528, im flüchtigen Speicher 1514, im nicht-flüchtigen Speicher 1516 und/oder auf einem entfernbaren nicht-flüchtigen computerlesbaren Speichermedium, wie etwa einer CD oder DVD, gespeichert sein.
-
16 ist ein Blockdiagramm einer beispielhaften Implementierung der Prozessorschaltungsanordnung 1412 aus 14 und/oder 1512 aus 15. In diesem Beispiel wird die Prozessorschaltungsanordnung 1412 aus 14 und/oder 1512 aus 15 durch einen Mikroprozessor 1600 implementiert. Zum Beispiel kann der Mikroprozessor 1600 eine Mehrkern-Hardwareschaltungsanordnung implementieren, wie etwa eine CPU, einen DSP, eine GPU, eine XPU usw. Obwohl er eine beliebige Anzahl beispielhafter Kerne 1602 (z. B. 1 Kern) beinhalten kann, ist der Mikroprozessor 1600 dieses Beispiels eine Mehrkern-Halbleitervorrichtung, die N Kerne beinhaltet. Die Kerne 1602 des Mikroprozessors 1600 können unabhängig arbeiten oder können zusammenwirken, um maschinenlesbare Anweisungen auszuführen. Zum Beispiel kann Maschinencode, der einem Firmware-Programm, einem eingebetteten Software-Programm oder einem Software-Programm entspricht, durch einen der Kerne 1602 ausgeführt werden oder kann durch mehrere der Kerne 1602 zur gleichen oder zu unterschiedlichen Zeiten ausgeführt werden. In einigen Beispielen wird der Maschinencode, der dem Firmware-Programm, dem eingebetteten Software-Programm oder dem Software-Programm entspricht, in Threads aufgeteilt und parallel durch zwei oder mehr der Kerne 1602 ausgeführt. Das Softwareprogramm kann einem Teil oder allen der maschinenlesbaren Anweisungen und/oder Operationen entsprechen, die durch die Flussdiagramme aus 11, 12 und/oder 13 repräsentiert werden.
-
Die Kerne 1602 können durch einen beispielhaften Bus 1604 kommunizieren. In einigen Beispielen kann der Bus 1604 einen Kommunikationsbus implementieren, um eine Kommunikation zu veranlassen, die mit einem bzw. mehreren der Kerne 1602 assoziiert ist. Zum Beispiel kann der Bus 1604 einen I2C-Bus (inter-integrated circuit) und/oder einen SPI-Bus (Serial Peripheral Interface) und/oder einen PCI-Bus und/oder einen PCIe-Bus implementieren. Zusätzlich oder alternativ kann der Bus 1604 eine beliebige andere Art von Datenverarbeitungs- oder elektrischem Bus implementieren. Die Kerne 1602 können Daten, Anweisungen und/oder Signale von einer oder mehreren externen Vorrichtungen durch die beispielhafte Schnittstellenschaltungsanordnung 1606 erhalten. Die Kerne 1602 können Daten, Anweisungen und/oder Signale durch die Schnittstellenschaltungsanordnung 1606 an die eine oder die mehreren externen Vorrichtungen ausgeben. Wenngleich die Kerne 1602 dieses Beispiels den beispielhaften lokalen Speicher 1620 (z. B. Level-1- bzw. L1-Cache, der in einen L1-Daten-Cache und einen L1-Anweisungs-Cache aufgeteilt sein kann) beinhalten, beinhaltet der Mikroprozessor 1600 zudem einen beispielhaften gemeinsam genutzten Speicher 1610, der von den Kernen (z. B. Level-2- bzw. L2-Cache)) für einen Hochgeschwindigkeitszugriff auf Daten und/oder Anweisungen gemeinsam genutzt werden kann. Daten und/oder Anweisungen können durch Schreiben in den und/oder Lesen aus dem gemeinsam genutzten Speicher 1610 übertragen (z. B. gemeinsam genutzt) werden. Der lokale Speicher 1620 jedes der Kerne 1602 und der gemeinsam genutzte Speicher 1610 können Teil einer Hierarchie von Speicherungsvorrichtungen sein, die mehrere Ebenen von Cache-Speicher und Hauptspeicher (z. B. den Hauptspeicher 1414, 1416 aus 14, den Hauptspeicher 1514, 1516 aus 15) beinhalten. Typischerweise weisen höhere Speicherebenen in der Hierarchie eine niedrigere Zugriffszeit auf und weisen eine kleinere Speicherungskapazität als niedrigere Speicherebenen auf. Änderungen in den verschiedenen Ebenen der Cache-Hierarchie werden durch eine Cache-Kohärenzrichtlinie verwaltet (z. B. koordiniert).
-
Jeder Kern 1602 kann als CPU, DSP, GPU usw. oder eine beliebige andere Art von Hardwareschaltungsanordnung bezeichnet werden. Jeder Kern 1602 umfasst eine Steuereinheitschaltungsanordnung 1614, eine Arithmetik-und-Logik- bzw. AL-Schaltungsanordnung (manchmal als eine ALU bezeichnet) 1616, mehrere Register 1618, den L1-Cache 1620 und einen beispielhaften Bus 1622. Andere Strukturen können vorhanden sein. Zum Beispiel kann jeder Kern 1602 eine Vektoreinheitsschaltlogik, eine SIMD-Einheitsschaltungsanordnung (SIMD: Single Instruction Multiple Data), eine Lade-/Speichereinheit-Schaltungsanordnung (LSU), eine Verzweigungs-/Sprungeinheitsschaltungsanordnung, eine Gleitkommaeinheitsschaltungsanordnung (FPU) usw. beinhalten. Die Steuereinheitschaltungsanordnung 1614 beinhaltet halbleiterbasierte Schaltungen, die zum Steuern (z. B. Koordinieren) einer Datenbewegung innerhalb des entsprechenden Kerns 1602 strukturiert sind. Die AL-Schaltungsanordnung 1616 beinhaltet halbleiterbasierte Schaltungen, die dazu strukturiert sind, eine oder mehrere mathematische und/oder logische Operationen an den Daten innerhalb des entsprechenden Kerns 1602 durchzuführen. Die AL-Schaltungsanordnung 1616 einiger Beispiele führt ganzzahlbasierte Operationen durch. In anderen Beispielen führt die AL-Schaltungsanordnung 1616 zudem Gleitkommaoperationen durch. In weiteren Beispielen kann die AL-Schaltungsanordnung 1616 eine erste AL-Schaltungsanordnung, die ganzzahlbasierte Operationen durchführt, und eine zweite AL-Schaltungsanordnung beinhalten, die Gleitkommaoperationen durchführt. In einigen Beispielen kann die AL-Schaltungsanordnung 1616 als arithmetisch-logische Einheit (ALU, arithmetic logic unit) bezeichnet werden. Die Register 1618 sind halbleiterbasierte Strukturen zum Speichern von Daten und/oder Anweisungen, wie etwa Ergebnissen einer oder mehrerer der Operationen, die durch die AL-Schaltungsanordnung 1616 des entsprechenden Kerns 1602 durchgeführt werden. Die Register 1618 können zum Beispiel Vektorregister, SIMD-Register, universelle Register, Flag-Register, Segmentregister, maschinenspezifische Register, Befehlszeigerregister, Steuerregister, Debug-Register, Speicherverwaltungsregister, Maschinenprüfregister usw. beinhalten. Die Register 1618 können in einer Bank angeordnet sein, wie in 16 gezeigt. Alternativ können die Register 1618 in einer beliebigen anderen Anordnung, einem beliebigen anderen Format oder einer beliebigen anderen Struktur organisiert sein, einschließlich einer Verteilung im Kern 1602, um die Zugriffszeit zu verkürzen. Der Bus 1604 kann einen I2C-Bus und/oder einen SPI-Bus und/oder einen PCI-Bus und/oder einen PCIe-Bus implementieren
-
Jeder Kern 1602 und/oder allgemeiner der Mikroprozessor 1600 können zusätzliche und/oder alternative Strukturen zu den vorstehend gezeigten und beschriebenen beinhalten. Zum Beispiel können eine oder mehrere Taktschaltungen, eine oder mehrere Stromversorgungen, ein oder mehrere Leistungsgatter, ein oder mehrere Cache-Home-Agenten (CHAs), ein oder mehrere konvergierte/gemeinsame Mesh-Stopps (CMSs), ein oder mehrere Schieber (z. B. Tonnenschieber) und/oder eine andere Schaltungsanordnung vorhanden sein. Der Mikroprozessor 1600 ist eine Halbleitervorrichtung, die so gefertigt ist, dass sie viele Transistoren beinhaltet, die miteinander verbunden sind, um die vorstehend beschriebenen Strukturen in einer oder mehreren integrierten Schaltungen (ICs) zu implementieren, die in einem oder mehreren Packages enthalten sind. Die Prozessorschaltungsanordnung kann einen oder mehrere Beschleuniger beinhalten und/oder mit diesen zusammenwirken. In einigen Beispielen werden Beschleuniger durch Logikschaltungsanordnungen implementiert, um gewisse Aufgaben schneller und/oder effizienter durchzuführen, als durch einen universellen Prozessor möglich. Beispiele für Beschleuniger beinhalten ASICs und FPGAs, wie die vorliegend besprochenen. Eine GPU oder eine andere programmierbare Vorrichtung kann ebenfalls ein Beschleuniger sein. Beschleuniger können sich an Bord der Prozessorschaltungsanordnung, in demselben Chip-Package wie die Prozessorschaltungsanordnung und/oder in einem oder mehreren von der Prozessorschaltungsanordnung getrennten Packages befinden.
-
17 ist ein Blockdiagramm einer anderen beispielhaften Implementierung der Prozessorschaltungsanordnung 1412 aus 14 und/oder der Prozessorschaltungsanordnung 1512 aus 15. Bei diesem Beispiel wird die Prozessorschaltungsanordnung 1412 und/oder die Prozessorschaltungsanordnung 1512 durch die FPGA-Schaltungsanordnung 1700 implementiert. Die FPGA-Schaltungsanordnung 1700 kann zum Beispiel verwendet werden, um Operationen durchzuführen, die ansonsten durch den beispielhaften Mikroprozessor 1600 aus 16 durchgeführt werden könnten, der entsprechende maschinenlesbare Anweisungen ausführt. Nach der Konfiguration instanziiert die FPGA-Schaltungsanordnung 1700 jedoch die maschinenlesbaren Anweisungen in Hardware und kann somit die Operationen häufig schneller ausführen, als dies mit einem universellen Mikroprozessor möglich wäre, der die entsprechende Software ausführt.
-
Genauer gesagt, im Gegensatz zu dem oben beschriebenen Mikroprozessor 1600 aus 16 (der eine universelle Vorrichtung ist, die dazu programmiert sein kann, manche oder alle der maschinenlesbaren Anweisungen auszuführen, die durch die Flussdiagramme aus 11, 12 und 13 repräsentiert werden, deren Zwischenverbindungen und Logikschaltungsanordnungen aber nach der Fertigung fixiert sind) beinhaltet die FPGA-Schaltungsanordnung 1700 des Beispiels für 6 Zwischenverbindungen und Logikschaltungsanordnungen, die nach der Fertigung auf unterschiedliche Weisen konfiguriert und/oder miteinander verbunden werden können, um zum Beispiel manche oder alle der maschinenlesbaren Anweisungen, die durch die Flussdiagramme aus 11, 12 und 13 repräsentiert werden, zu instanziieren. Insbesondere kann das FPGA 1700 als ein Array aus logischen Gattern, Zwischenverbindungen und Switches angesehen werden. Die Switches können programmiert sein, um zu ändern, wie die Logik-Gatter durch die Zwischenverbindungen miteinander verbunden sind, wodurch effektiv eine oder mehrere dedizierte Logikschaltungen gebildet werden (es sei denn und bis die FPGA-Schaltungsanordnung 1700 neu programmiert ist). Die konfigurierten Logikschaltungen ermöglichen, dass die Logik-Gatter auf unterschiedliche Weisen zusammenwirken, um unterschiedliche Operationen an Daten durchzuführen, die durch die Eingabeschaltungsanordnung empfangen werden. Diese Operationen können einigen oder allen der Software entsprechen, die durch die Flussdiagramme aus 11, 12 und 13 repräsentiert werden. Von daher kann die FPGA-Schaltungsanordnung 1700 strukturiert sein, um einige oder alle der maschinenlesbaren Anweisungen der Flussdiagramme aus 11, 12 und 13 effektiv als dedizierte Logikschaltungen zum Durchführen der Operationen zu instanziieren, die diesen Softwareanweisungen auf eine dedizierte Weise analog zu einer ASIC entsprechen. Somit kann die FPGA-Schaltungsanordnung 1700 die Operationen, die den einigen oder allen der maschinenlesbaren Anweisungen aus 17 entsprechen, schneller durchführen, als sie der universelle Mikroprozessor ausführen kann.
-
In dem Beispiel aus 17 ist die FPGA-Schaltungsanordnung 1700 strukturiert, um durch einen Endbenutzer durch eine Hardwarebeschreibungssprache (HDL) wie Verilog programmiert (und/oder einmal oder mehrmals umprogrammiert) zu werden. Die FPGA-Schaltungsanordnung 1700 aus 17 beinhaltet eine beispielhafte Eingabe/Ausgabe- bzw. E/A-Schaltungsanordnung 1702, um Daten von der beispielhaften Konfigurationsschaltungsanordnung 1704 und/oder externer Hardware (z. B. externer Hardware-Schaltungsanordnung) 1706 zu erhalten und/oder an diese auszugeben. Zum Beispiel kann die Konfigurationsschaltungsanordnung 1704 eine Schnittstellenschaltungsanordnung implementieren, die maschinenlesbare Anweisungen zum Konfigurieren der FPGA-Schaltungsanordnung 1700 oder eines oder mehrerer Teile davon erhalten kann. In einigen solchen Beispielen kann die Konfigurationsschaltungsanordnung 1704 die maschinenlesbaren Anweisungen von einem Benutzer, einer Maschine (z. B. Hardware-Schaltungsanordnung (z. B. programmierte oder dedizierte Schaltungsanordnung), die ein KI-/Maschinenlern- bzw. KI/ML-Modell implementieren kann, um die Anweisungen zu erzeugen) usw. erhalten. In einigen Beispielen kann die externe Hardware 1706 den Mikroprozessor 1600 aus 16 implementieren. Die FPGA-Schaltungsanordnung 1700 beinhaltet zudem ein Array aus einer beispielhaften Logikgatter-Schaltungsanordnung 1708, mehreren beispielhaften konfigurierbaren Zwischenverbindungen 1710 und einer beispielhaften Speicherungsschaltungsanordnung 1712. Die Logikgatter-Schaltungsanordnung 1708 und die Zwischenverbindungen 1710 sind konfigurierbar, um eine oder mehrere Operationen zu instanziieren, die mindestens einigen der maschinenlesbaren Anweisungen aus 17 und/oder anderen gewünschten Operationen entsprechen können. Die in 17 gezeigte Logikgatter-Schaltungsanordnung 1708 wird in Gruppen oder Blöcken gefertigt. Jeder Block beinhaltet halbleiterbasierte elektrische Strukturen, die zu Logikschaltungen konfiguriert sein können. In einigen Beispielen beinhalten die elektrischen Strukturen Logikgatter (z. B. AND-Gatter, OR-Gatter, NOR-Gatter usw.), die Basisbausteine für Logikschaltungen bereitstellen. Elektrisch steuerbare Schalter (z. B. Transistoren) sind innerhalb jeder der Logikgatter-Schaltungsanordnungen 1708 vorhanden, um eine Konfiguration der elektrischen Strukturen und/oder der Logikgatter zum Bilden von Schaltungen zum Durchführen gewünschter Operationen zu ermöglichen. Die Logikgatter-Schaltungsanordnung 1708 kann andere elektrische Strukturen beinhalten, wie etwa Nachschlagetabellen (LUTs), Register (z. B. Flip-Flops oder Latches), Multiplexer usw.
-
Die Zwischenverbindungen 1710 des veranschaulichten Beispiels sind leitfähige Pfade, Leiterbahnen, Durchkontaktierungen oder dergleichen, die elektrisch steuerbare Schalter (z. B. Transistoren) beinhalten können, deren Zustand durch Programmieren (z. B. unter Verwendung einer HDL-Befehlssprache) geändert werden kann, um eine oder mehrere Verbindungen zwischen einer oder mehreren der Logikgatter-Schaltungsanordnungen 1708 zu aktivieren oder zu deaktivieren, um gewünschte Logikschaltungen zu programmieren.
-
Die Speicherungsschaltungsanordnung 1712 des veranschaulichten Beispiels ist dazu strukturiert, ein oder mehrere Ergebnisse der einen oder der mehreren Operationen zu speichern, die durch entsprechende Logikgatter durchgeführt werden. Die Speicherungsschaltungsanordnung 1712 kann durch Register oder dergleichen implementiert sein. In dem veranschaulichten Beispiel ist die Speicherungsschaltungsanordnung 1712 unter der Logikgatter-Schaltungsanordnung 1708 verteilt, um den Zugriff zu erleichtern und die Ausführungsgeschwindigkeit zu erhöhen.
-
Die beispielhafte FPGA-Schaltungsanordnung 1700 aus 17 beinhaltet zudem eine beispielhafte dedizierte Operationsschaltungsanordnung 1714. Bei diesem Beispiel beinhaltet die dedizierte Operationsschaltungsanordnung 1714 eine Spezial-Schaltungsanordnung 1716, die aufgerufen werden kann, um üblicherweise verwendete Funktionen zu implementieren, um die Notwendigkeit zu vermeiden, diese Funktionen im Feld zu programmieren. Beispiele für eine solche Spezial-Schaltungsanordnung 1716 umfassen eine Speicher- (z. B. DRAM-) Steuerungsschaltungsanordnung, eine PCIe-Steuerungsschaltungsanordnung, eine Taktschaltungsanordnung, eine Sendeempfänger-Schaltungsanordnung, einen Speicher und eine Multiplizierer-Akkumulator-Schaltungsanordnung. Auch andere Arten von Spezial-Schaltungsanordnungen können vorhanden sein. In einigen Beispielen kann die FPGA-Schaltungsanordnung 1700 zudem eine beispielhafte programmierbare universelle Schaltungsanordnung 1718 wie etwa eine beispielhafte CPU 1720 und/oder einen beispielhaften DSP 1722 beinhalten. Eine andere programmierbare universelle Schaltungsanordnung 1718 kann zusätzlich oder alternativ vorhanden sein, wie etwa eine GPU, eine XPU usw., die dazu programmiert sein kann, andere Operationen durchzuführen.
-
Obwohl 16 und 17 zwei Implementierungsbeispiele der Prozessorschaltungsanordnung 1412 aus 14 und der Prozessorschaltungsanordnung 1512 aus 15 veranschaulichen, werden viele andere Ansätze in Betracht gezogen. Wie oben erwähnt, kann zum Beispiel eine moderne FPGA-Schaltungsanordnung eine Onboard-CPU, wie etwa eine oder mehrere der beispielhaften CPUs 1720 aus 17, beinhalten. Daher können die Prozessorschaltungsanordnung 1412 aus 14 und die Prozessorschaltungsanordnung 1512 aus 15 zusätzlich durch Kombinieren des beispielhaften Mikroprozessors 1600 aus 16 und der beispielhaften FPGA-Schaltungsanordnung 1700 aus 17 implementiert werden. In einigen solchen hybriden Beispielen wird ein erster Teil der maschinenlesbaren Anweisungen, die durch die Flussdiagramme aus 11, 12 und 13 repräsentiert werden, durch einen oder mehrere der Kerne 1602 aus 16 ausgeführt werden, und ein zweiter Teil der maschinenlesbaren Anweisungen, die durch die Flussdiagramme aus 11, 12 und 13 repräsentiert werden, können durch die FPGA-Schaltungsanordnung 1700 aus 17 ausgeführt werden.
-
In einigen Beispielen können sich die Prozessorschaltungsanordnung 1412 aus 14 und/oder die Prozessorschaltungsanordnung 1512 aus 15 in einem oder mehreren Gehäusen befinden. Zum Beispiel können sich die Prozessorschaltlogik 1600 aus 16 und/oder die FPGA-Schaltlogik 1700 aus 17 in einem oder mehreren Gehäusen befinden. In einigen Beispielen kann eine XPU durch die Prozessorschaltungsanordnung 1412 aus 14 und/oder die Prozessorschaltungsanordnung 1512 aus 15 implementiert werden, die sich in einem oder mehreren Gehäusen befinden können. Zum Beispiel kann die XPU eine CPU in einem Gehäuse, einen DSP in einem anderen Gehäuse, eine GPU in noch einem anderen Gehäuse und ein FPGA in noch einem anderen Gehäuse beinhalten.
-
Ein Blockdiagramm, das eine beispielhafte Softwareverteilungsplattform 1805 zum Verteilen von Software, wie etwa den beispielhaften maschinenlesbaren Anweisungen 1432 aus 14 und den beispielhaften maschinenlesbaren Anweisungen 1532 aus 15, an Hardwarevorrichtungen veranschaulicht, die Dritten gehören und/oder von diesen betrieben werden, ist in 18 veranschaulicht. Die beispielhafte Softwareverteilungsplattform 1805 kann durch einen beliebigen Computerserver, eine beliebige Dateneinrichtung, einen beliebigen Cloud-Dienst usw. implementiert werden, der in der Lage ist, Software zu speichern und zu anderen Datenverarbeitungsvorrichtungen zu senden. Die Drittparteien können Kunden der Entität sein, die die Softwareverteilungsplattform 1805 besitzt und/oder betreibt. Zum Beispiel kann die Entität, die die Softwareverteilungsplattform 1805 besitzt und/oder betreibt, ein Entwickler, ein Verkäufer und/oder ein Lizenzgeber von Software, wie etwa der beispielhaften maschinenlesbaren Anweisungen 1432 aus 14 und der beispielhaften maschinenlesbaren Anweisungen 1532 aus 15, sein. Die Drittparteien können Verbraucher, Benutzer, Einzelhändler, OEMs usw. sein, die die Software zur Verwendung erwerben und/oder lizenzieren und/oder wiederverkaufen und/oder sublizenzieren. In dem dargestellten Beispiel beinhaltet die Softwareverteilungsplattform 1805 einen oder mehrere Server und eine oder mehrere Speichervorrichtungen. Die Speichervorrichtungen speichern die maschinenlesbaren Anweisungen 1432 und die maschinenlesbaren Anweisungen 1532, die den beispielhaften maschinenlesbaren Anweisungen 1100, 1200, 1300 aus 11, 12 und 13 entsprechen können, wie oben beschrieben. Der eine oder die mehreren Server der beispielhaften Softwareverteilungsplattform 1805 stehen in Kommunikation mit einem Netzwerk 1810, das einem beliebigen oder beliebigen mehreren von dem Internet und/oder beliebigen der oben beschriebenen beispielhaften Netzwerke 1426, 1526 entsprechen kann. In einigen Beispielen reagieren der eine oder die mehreren Server auf Anforderungen, die Software als Teil einer kommerziellen Transaktion an eine anfordernde Partei zu senden. Die Zahlung für die Lieferung, den Verkauf und/oder die Lizenz der Software kann durch den einen oder die mehreren Server der Softwareverteilungsplattform und/oder durch eine Drittpartei-Zahlungsentität gehandhabt werden. Die Server ermöglichen Käufern und/oder Lizenzgebern, die maschinenlesbaren Anweisungen 1432 und die beispielhaften maschinenlesbaren Anweisungen 1532 von der Softwareverteilungsplattform 1805 herunterzuladen. Zum Beispiel kann die Software, die den beispielhaften maschinenlesbaren Anweisungen 1432 aus 14 und/oder den beispielhaften maschinenlesbaren Anweisungen 1532 aus 15 entsprechen kann, auf die beispielhaften Prozessorplattformen 1400, 1500 heruntergeladen werden, die die maschinenlesbaren Anweisungen 1432, 1532 ausführen sollen, um die Matrixkomprimierungsschaltungsanordnung 104 bzw. die Matrixdekomprimierungsschaltungsanordnung 106 zu implementieren. In einigen Beispielen bieten ein oder mehrere Server der Softwareverteilungsplattform 1805 periodisch Aktualisierungen an, senden diese an und/oder erzwingen diese bei Software (z. B. die beispielhaften maschinenlesbaren Anweisungen 1432 aus 14, die beispielhaften maschinenlesbaren Anweisungen 1532 aus 15), um sicherzustellen, dass Verbesserungen, Patches, Aktualisierungen usw. verteilt und auf die Software an den Endbenutzervorrichtungen angewandt werden.
-
Aus dem Vorstehenden versteht es sich, dass beispielhafte Verfahren, Einrichtungen und Herstellungsartikel offenbart wurden, die eine Komprimierung und/oder Dekomprimierung quantisierter neuronaler Netzwerke unter Nutzung unstrukturierter Spärlichkeit beschleunigen. Die hierin offenbarten Beispiele reduzieren eine Speicherbandbreitenanforderung und verbessern die Berechnungseffizienz, um beschleunigte Inferenzen in neuronalen Netzwerken zu ermöglichen. Die offenbarten Verfahren, Einrichtungen und Herstellungsartikel verbessern die Effizienz der Verwendung einer Datenverarbeitungsvorrichtung, die eine Speicherbandbreite reduziert, die zum Dekomprimieren von Daten genutzt wird (z. B. neuronale Netzwerkgewichtungen). Von daher beschleunigen die hierin offenbarten Beispiele die Dekomprimierung der Daten, um beschleunigtes Lernen für ein neuronales Netzwerk zu ermöglichen. Die offenbarten Verfahren, Vorrichtungen und Herstellungsartikel richten sich dementsprechend auf eine oder mehrere Verbesserungen der Funktionsweise eines Computers.
-
Beispielhafte Verfahren, Einrichtungen, Systeme und Herstellungsartikel zum Durchführen von Gewichtung und Aktivierungskomprimierung und -dekomprimierung sind hierin offenbart. Weitere Beispiele und Kombinationen davon umfassen:
-
Beispiel 1 beinhaltet eine Einrichtung, die einen Speicher, Anweisungen in der Einrichtung und eine Prozessorschaltungsanordnung zum Ausführen der Anweisungen zum Ausführen einer Komprimierungsoperation zum Erhalten komprimierter Daten, die Gewichtungen in einer Gewichtungsmatrix entsprechen, und zum Bestimmen von Metadaten, die mit der Gewichtungsmatrix assoziiert sind, umfasst, wobei ein erster Teil der Metadaten angibt, ob die Gewichtungsmatrix komprimiert ist, ein zweiter Teil der Metadaten eine Cache-Größe der komprimierten Daten angibt und ein dritter Teil der Metadaten die Komprimierungsoperation angibt, die ausgeführt wird, um die komprimierten Daten zu erhalten.
-
Beispiel 2 beinhaltet die Einrichtung aus Beispiel 1, wobei die Metadaten ein Byte sind.
-
Beispiel 3 beinhaltet die Einrichtung aus Beispiel 1, wobei der erste Teil der Metadaten eine erste Größe aufweist, der dritte Teil der Metadaten eine zweite Größe aufweist, die größer als die erste Größe ist, und der zweite Teil der Metadaten eine dritte Größe aufweist, die größer als die zweite Größe ist.
-
Beispiel 4 beinhaltet die Einrichtung aus Beispiel 1, wobei der erste Teil der Metadaten ein Bit ist, wobei die Prozessorschaltungsanordnung ausgelegt ist zum Zuweisen eines ersten Werts zu dem Bit als Reaktion darauf, dass die Gewichtungsmatrix komprimiert ist, und zum Zuweisen eines zweiten Werts zu dem Bit als Reaktion darauf, dass die Gewichtungsmatrix unkomprimiert ist.
-
Beispiel 5 beinhaltet die Einrichtung aus Beispiel 1, wobei die Prozessorschaltungsanordnung dazu dient, eine Anzahl von Cachezeilen, die durch die komprimierten Daten belegt sind, in dem zweiten Teil der Metadaten aufzuzeichnen.
-
Beispiel 6 beinhaltet die Einrichtung aus Beispiel 1, wobei die Prozessorschaltungsanordnung ausgelegt ist zum Packen von Gewichtungen ungleich null aus der Matrix in eine komprimierte Kachel und Erzeugen einer Bitmap, die jeweilige Orte der Gewichtungen ungleich null in der Gewichtungsmatrix angibt.
-
Beispiel 7 beinhaltet die Einrichtung aus Beispiel 1, wobei die Komprimierungsoperation eine erste Komprimierungsoperation mehrerer Komprimierungsoperationen ist, die Gewichtungsmatrix eine erste Gewichtungsmatrix ist, die komprimierten Daten erste komprimierte Daten sind und die Metadaten erste Metadaten sind, wobei die Prozessorschaltungsanordnung dient zum Ausführen der ersten Komprimierungsoperation oder einer zweiten Komprimierungsoperation der mehreren Komprimierungsoperationen, um zweite komprimierte Daten zu erhalten, die mit einer zweiten Gewichtungsmatrix assoziiert sind, Bestimmen zweiter Metadaten, die mit der zweiten Gewichtungsmatrix assoziiert sind, und Speichern der ersten Metadaten und der zweiten Metadaten in einem ersten Teil eines Speichers.
-
Beispiel 8 beinhaltet die Einrichtung aus Beispiel 7, wobei die Prozessorschaltungsanordnung dient zum Speichern der ersten komprimierten Daten in einem ersten Satz von Cachezeilen eines zweiten Teils des Speichers und zum Speichern der zweiten komprimierten Daten in einem zweiten Satz von Cachezeilen des zweiten Teils des Speichers anschließend an den ersten Satz von Cachezeilen.
-
Beispiel 9 beinhaltet ein nicht-flüchtiges maschinenlesbares Medium, das Anweisungen umfasst, die, wenn sie ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, einen Komprimierungsprozess auszuführen, um komprimierte Daten zu erhalten, die Gewichtungen in einer Gewichtungsmatrix entsprechen, und Metadaten zu bestimmen, die mit der Gewichtungsmatrix assoziiert sind, wobei ein erster Teil der Metadaten angibt, ob die Gewichtungsmatrix komprimiert ist, ein zweiter Teil der Metadaten eine Cache-Größe der komprimierten Daten angibt und ein dritter Teil der Metadaten den Komprimierungsprozess angibt, der ausgeführt wird, um die komprimierten Daten zu erhalten.
-
Beispiel 10 beinhaltet das nicht-flüchtige maschinenlesbare Medium aus Beispiel 9, wobei die Metadaten ein Byte sind.
-
Beispiel 11 beinhaltet das nicht-flüchtige maschinenlesbare Medium aus Beispiel 9, wobei der erste Teil der Metadaten eine erste Größe aufweist, der dritte Teil der Metadaten eine zweite Größe aufweist, die größer als die erste Größe ist, und der zweite Teil der Metadaten eine dritte Größe aufweist, die größer als die zweite Größe ist.
-
Beispiel 12 beinhaltet das nicht-flüchtige maschinenlesbare Medium aus Beispiel 9, wobei der erste Teil der Metadaten ein Bit ist, wobei die Anweisungen, wenn sie ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, dem Bit als Reaktion darauf, dass die Gewichtungsmatrix komprimiert ist, einen ersten Wert zuweisen und dem Bit als Reaktion darauf, dass die Gewichtungsmatrix unkomprimiert ist, einen zweiten Wert zuweisen.
-
Beispiel 13 beinhaltet das nicht-flüchtige maschinenlesbare Medium aus Beispiel 9, wobei die Anweisungen, wenn sie ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, eine Anzahl von Cachezeilen, die durch die komprimierten Daten belegt sind, in dem zweiten Teil der Metadaten aufzuzeichnen.
-
Beispiel 14 beinhaltet das nicht-flüchtige maschinenlesbare Medium aus Beispiel 9, wobei die komprimierten Daten Gewichtungen ungleich null aus der Gewichtungsmatrix und eine Bitmap, die jeweilige Orte der Gewichtungen ungleich null in der Gewichtungsmatrix angibt, beinhalten.
-
Beispiel 15 beinhaltet das nicht-flüchtige maschinenlesbare Medium aus Beispiel 9, wobei der Komprimierungsprozess ein erster Komprimierungsprozess ist, die Gewichtungsmatrix eine erste Gewichtungsmatrix ist, die komprimierten Daten erste komprimierte Daten sind und die Metadaten erste Metadaten sind, wobei die Anweisungen, wenn sie ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, den ersten Komprimierungsprozess oder einen zweiten Komprimierungsprozess auszuführen, um zweite komprimierte Daten zu erhalten, die mit einer zweiten Gewichtungsmatrix assoziiert sind, zweite Metadaten zu bestimmen, die mit der zweiten Gewichtungsmatrix assoziiert sind, und die ersten Metadaten und die zweiten Metadaten in einer ersten Cachezeile eines linearen Speichers zu speichern.
-
Beispiel 16 beinhaltet das nicht-flüchtige maschinenlesbare Medium aus Beispiel 15, wobei die Anweisungen, wenn sie ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, die ersten komprimierten Daten in einem ersten Satz von Cachezeilen des linearen Speichers anschließend an die erste Cachezeile zu speichern, und die zweiten komprimierten Daten in einem zweiten Satz von Cachezeilen des linearen Speichers anschließend an den ersten Satz von Cachezeilen zu speichern.
-
Beispiel 17 beinhaltet ein Verfahren, das Folgendes umfasst: Ausführen einer Komprimierungsoperation mehrerer Komprimierungsoperationen, um komprimierte Daten zu erhalten, die Gewichtungen in einer Gewichtungsmatrix entsprechen, und Bestimmen von Metadaten, die mit der Gewichtungsmatrix assoziiert sind, wobei ein erster Teil der Metadaten angibt, ob die Gewichtungsmatrix komprimiert ist, ein zweiter Teil der Metadaten eine Cache-Größe der komprimierten Daten angibt und ein dritter Teil der Metadaten die Komprimierungsoperation angibt, die ausgeführt wird, um die komprimierten Daten zu erhalten.
-
Beispiel 18 beinhaltet das Verfahren aus Beispiel 17, wobei die Metadaten ein Byte sind.
-
Beispiel 19 beinhaltet das Verfahren aus Beispiel 17, wobei der erste Teil der Metadaten eine erste Größe aufweist, der dritte Teil der Metadaten eine zweite Größe aufweist, die größer als die erste Größe ist, und der zweite Teil der Metadaten eine dritte Größe aufweist, die größer als die zweite Größe ist.
-
Beispiel 20 beinhaltet das Verfahren aus Beispiel 17, wobei der erste Teil der Metadaten ein Bit ist, wobei das Bestimmen der Metadaten, die mit der Gewichtungsmatrix assoziiert sind, Zuweisen eines ersten Werts zu dem Bit als Reaktion darauf, dass die Gewichtungsmatrix komprimiert ist, und Zuweisen eines zweiten Werts zu dem Bit als Reaktion darauf, dass die Gewichtungsmatrix unkomprimiert ist, beinhaltet.
-
Beispiel 21 beinhaltet das Verfahren aus Beispiel 17, wobei Bestimmen der Metadaten, die mit der Gewichtungsmatrix assoziiert sind, Aufzeichnen einer Anzahl von Cachezeilen, die durch die komprimierten Daten belegt sind, in dem zweiten Teil der Metadaten beinhaltet.
-
Beispiel 22 beinhaltet das Verfahren aus Beispiel 17, wobei das Ausführen der Komprimierungsoperation Packen von Gewichtungen ungleich null aus der Gewichtungsmatrix in ein komprimiertes Array und Erzeugen einer Bitmap, die jeweilige Positionen der Gewichtungen ungleich null in der Gewichtungsmatrix angibt, beinhaltet.
-
Beispiel 23 beinhaltet das Verfahren aus Beispiel 17, wobei die Komprimierungsoperation eine erste Komprimierungsoperation der mehreren Komprimierungsoperationen ist, die Gewichtungsmatrix eine erste Gewichtungsmatrix ist, die komprimierten Daten erste komprimierte Daten sind und die Metadaten erste Metadaten sind, das ferner Ausführen der ersten Komprimierungsoperation oder einer zweiten Komprimierungsoperation der mehreren Komprimierungsoperationen, um zweite komprimierte Daten zu erhalten, die mit einer zweiten Gewichtungsmatrix assoziiert sind, Bestimmen zweiter Metadaten, die mit der zweiten Gewichtungsmatrix assoziiert sind, und Speichern der ersten Metadaten und der zweiten Metadaten in einem ersten Teil eines Speichers beinhaltet.
-
Beispiel 24 beinhaltet das Verfahren aus Beispiel 23, ferner beinhaltend Speichern der ersten komprimierten Daten in einem ersten Satz von Cachezeilen eines zweiten Teils des Speichers und Speichern der zweiten komprimierten Daten in einem zweiten Satz von Cachezeilen des zweiten Teils des Speichers anschließend an den ersten Satz von Cachezeilen.
-
Beispiel 25 beinhaltet eine Einrichtung, die einen Speicher, Anweisungen in der Einrichtung und eine Prozessorschaltungsanordnung zum Ausführen der Anweisungen zum Bestimmen, ob mit einer Gewichtungsmatrix assoziierte Daten komprimiert sind, basierend auf einem ersten Teil von mit den Daten assoziierten Metadaten, und als Reaktion darauf, dass die Daten komprimiert sind, Bestimmen einer Cache-Größe der Daten basierend auf einem zweiten Teil der Metadaten und Bestimmen eines Komprimierungsprozesses, der zum Komprimieren der Daten ausgeführt wird, basierend auf einem dritten Teil der Metadaten, umfasst.
-
Beispiel 26 beinhaltet die Einrichtung aus Beispiel 25, wobei die Metadaten erste Metadaten sind, die in einer Metadaten-Cachezeile des Speichers gespeichert sind, wobei die Prozessorschaltungsanordnung einen Ort der Daten basierend auf mindestens zweiten Metadaten bestimmen soll, wobei die ersten Metadaten den zweiten Metadaten in der Metadaten-Cachezeile folgen.
-
Beispiel 27 beinhaltet die Einrichtung aus Beispiel 26, wobei die Daten erste Daten sind und die Cachegröße eine erste Cachegröße ist, wobei die Prozessorschaltungsanordnung ausgelegt ist zum Bestimmen einer zweiten Cachegröße von zweiten Daten, die mit den zweiten Metadaten assoziiert sind, und Bestimmen des Orts der ersten Daten basierend auf einer zweiten Cachegröße von zweiten Daten.
-
Beispiel 28 beinhaltet die Einrichtung aus Beispiel 25, wobei die Prozessorschaltungsanordnung ausgelegt ist zum Dekomprimieren der Metadaten basierend auf der Cache-Größe der Daten und dem Komprimierungsprozess, der ausgeführt wird, um die Daten zu erhalten.
-
Obwohl bestimmte beispielhafte Verfahren, Einrichtungen und Herstellungsartikel hierin offenbart wurden, ist der Schutzbereich dieses Patents nicht darauf beschränkt. Vielmehr deckt dieses Patent alle Verfahren, Einrichtungen und Herstellungsartikel ab, die in angemessener Weise in den Schutzumfang der Ansprüche dieses Patents fallen.
-
Die folgenden Ansprüche werden hiermit durch diesen Bezug in die ausführliche Beschreibung aufgenommen, wobei jeder Anspruch allein für eine separate Ausführungsform der vorliegenden Offenbarung steht.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-