DE102020103414A1 - Kompressionsverfahren für datenstrukturen, die für künstliche neuronale netze geeignet sind - Google Patents

Kompressionsverfahren für datenstrukturen, die für künstliche neuronale netze geeignet sind Download PDF

Info

Publication number
DE102020103414A1
DE102020103414A1 DE102020103414.8A DE102020103414A DE102020103414A1 DE 102020103414 A1 DE102020103414 A1 DE 102020103414A1 DE 102020103414 A DE102020103414 A DE 102020103414A DE 102020103414 A1 DE102020103414 A1 DE 102020103414A1
Authority
DE
Germany
Prior art keywords
data structure
element data
metadata
instruction
elements
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102020103414.8A
Other languages
English (en)
Inventor
Jorge Albericio Latorre
Ming Y. Siu
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102020103414A1 publication Critical patent/DE102020103414A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3068Precoding preceding compression, e.g. Burrows-Wheeler transformation
    • H03M7/3077Sorting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

Bei künstlichen neuronalen Netzen und anderen ähnlichen Anwendungen existiert typischerweise ein großer Umfang damit in Verbindung stehender Daten, welche als zerstreut angeordnete Daten angesehen werden. Aufgrund der großen Menge der damit in Verbindung stehenden Daten bei solchen Anwendungen ist es hilfreich, die Daten zu komprimieren, um Bandbreite zu sparen, wenn die Daten übertragen werden, und um Speicher zu sparen, wenn die Daten gespeichert werden. Hier wird ein Kompressionsverfahren eingeführt, dass Elemente mit signifikanten Werten aus den Daten auswählt, und sie in einem strukturierten Sparsity-Format neu strukturiert. Indem Metadaten erzeugt werden, welche das strukturierte Sparsity-Format erzwingen, und die Daten gemäß den Metadaten organisiert werden, verringert das hier eingeführte Verfahren nicht nur die Menge der Daten, sondern ordnet die Daten konsistent in einem bestimmten Format an. Dadurch kann Hardware vereinfacht und optimiert werden, um die Daten viel schneller und viel effizienter als bei den herkömmlichen Kompressionsverfahren, welche auf einem nicht strukturierten Sparsity-Format beruhen, zu verarbeiten.

Description

  • TECHNISCHER BEREICH
  • Die vorliegende Erfindung bezieht sich auf eine Datenkompression, und insbesondere auf die Kompression von dünn bzw. spärlich besetzten Datenstrukturen.
  • HINTERGRUND
  • Künstliche neuronale Netze (Artificial Neural Networks (ANNs)) sind Computersysteme, die von biologischen neuronalen Netzen inspiriert sind. ANNs bieten einen Rahmen für viele verschiedene Algorithmen des maschinellen Lernens, um zusammenzuarbeiten und komplexe Dateneingaben zu verarbeiten. ANNs wurden für eine Vielzahl von Aufgaben eingesetzt, darunter Computer-Sehen, Sprach- und Bilderkennung, maschinelle Übersetzung, Filterung sozialer Netzwerke, Spielen von Videospielen und medizinische Diagnose.
  • ZUSAMMENFASSUNG
  • Ein erster Aspekt stellt ein Verfahren zum Komprimieren von Daten bereit, das Folgendes umfasst: Erzeugen von Metadaten aus einer N-Element-Datenstruktur, wobei das Erzeugen Folgendes umfasst: Auswählen von M Elementen aus der N-Element-Datenstruktur, wobei N größer als M ist; Bestimmen von Positionen der M Elemente innerhalb der N-Element-Datenstruktur; und Speichern der Positionen der M Elemente als die Metadaten; und Komprimieren der N-Element-Datenstruktur zu einer M-Element-Datenstruktur gemäß den Metadaten, wobei das Komprimieren Folgendes umfasst: Sammeln von Werten der M Elemente aus der N-Element-Datenstruktur gemäß den Positionen; und Speichern der Werte der M Elemente in der M-Element-Datenstruktur.
  • Ein zweiter Aspekt stellt ein System zum Komprimieren von Daten bereit, das Folgendes umfasst: einen Speicher; und mindestens einen Prozessor, der kommunikativ mit dem Speicher gekoppelt ist. Der mindestens eine Prozessor ist ausgestaltet zum: Erzeugen von Metadaten aus einer N-Element-Datenstruktur durch: Auswählen von M Elementen aus der N-Element-Datenstruktur, wobei N größer als M ist; Bestimmen von Positionen der M Elemente innerhalb der N-Element-Datenstruktur; und Speichern der Positionen der M Elemente als die Metadaten; und Komprimieren der N-Element-Datenstruktur zu einer M-Element-Datenstruktur gemäß den Metadaten durch: Erfassen von Werten der M Elemente aus der N-Element-Datenstruktur gemäß den Positionen; und Speichern der Werte der M Elemente in der M-Element-Datenstruktur.
  • Figurenliste
  • Es wird nun auf die folgenden Beschreibungen zusammen mit den beigefügten Zeichnungen verwiesen, wobei:
    • 1 ist eine Darstellung eines beispielhaften M:N-Kompressionsformats gemäß einem oder mehreren Aspekten der Offenbarung.
    • 2 ist eine Darstellung eines beispielhaften 2:4-Kompressionsformats gemäß einem oder mehreren Aspekten der Offenbarung.
    • 3 ist gemäß einem oder mehreren Aspekten der Offenbarung ein Blockdiagramm einer Ausführungsform eines Computersystems, das Datenkompression durchführt.
    • 4 ist gemäß einem oder mehreren Aspekten der Offenbarung ein Flussdiagramm einer Ausführungsform eines Verfahrens zum Komprimieren von Daten.
    • 5-9 sind gemäß einem oder mehreren Aspekten der Offenbarung Beispiele für eine GENMETADATA-Anweisung, die Metadaten erzeugt;
    • 10-14 sind gemäß einem oder mehreren Aspekten der Offenbarung Beispiele für eine GATHER-Anweisung, die eine N-Element-Datenstruktur in eine M-Element-Datenstruktur komprimiert.
    • 15 ist gemäß einem oder mehreren Aspekten der Offenbarung ein Beispiel für eine GATHERPLUS-Anweisung, die Metadaten erzeugt und eine N-Element-Datenstruktur in eine M-Element-Datenstruktur komprimiert.
    • 16-21 sind gemäß einem oder mehreren Aspekten der Offenbarung Beispiele für GENMETADATA- und GATHER-Anweisungen, die kaskadiert werden, um ein Kompressionsverhältnis von 2:8 zu erreichen.
  • DETAILLIERTE BESCHREIBUNG
  • Bei ANNs und anderen ähnlichen Anwendungen handelt es sich in der Regel um eine große Datenmenge, die als dünn besetzte Daten betrachtet wird, oder mit anderen Worten, um Daten, die zahlreiche Nullen oder Werte nahe Null aufweisen. Aufgrund der großen Datenmenge in solchen Anwendungen ist es hilfreich, die Daten zu komprimieren (z.B. die Datenmenge zu reduzieren), um bei der Übertragung der Daten Bandbreitenressourcen zu sparen und bei der Speicherung der Daten Speicherressourcen zu sparen.
  • Hier wird eine Komprimierungstechnik vorgestellt, bei der Daten komprimiert werden, indem die Daten so umstrukturiert werden, dass sie einer strukturierten Sparsity bzw. Seltenheit folgen. Das vorgestellte Verfahren erzeugt Metadaten, die Elemente der Daten identifizieren, die signifikante Werte der Daten aufweisen und der strukturierten Sparsity entsprechen, und restrukturiert die Daten entsprechend den Metadaten. Das eingeführte Verfahren reduziert also nicht nur die Menge der Daten, sondern platziert die Daten auch konsistent in einem bestimmten Sparsity-Format. Dadurch kann die Hardware vereinfacht und optimiert werden, so dass die Daten viel schneller und effizienter verarbeitet, z.B. berechnet, übertragen und gespeichert, werden können als mit herkömmlichen Kompressionsverfahren, die auf einem unstrukturierten Sparsity-Format beruhen, wie z.B. CSR (Compressed Sparse Row) oder COO (Coordinate List). Die Verwendung der von dem offenbarten Verfahren komprimierten Daten ermöglicht z.B. das Training von Modellen für Tiefenlernen mit einer größeren Datenmenge und erzielt somit eine bessere Genauigkeit bei gleichem Rechenaufwand als die Verwendung einer anderen Kompressionstechnik.
  • 1 stellt ein beispielhaftes M:N-Kompressionsformat dar. Eingabedaten (zu komprimierende Daten) in einem unkomprimierten Datenformat 100 weisen N Elemente in einer N-Element-Datenstruktur 102 auf, und Ausgabedaten (komprimierte Daten) in einem komprimierten Datenformat 110 weisen M Elemente in einer M-Element-Datenstruktur 112 und Metadaten 114 auf, wobei M < N gilt. N Elemente in der N-Element-Datenstruktur 102 werden gemäß den Metadaten 114 zu M Elementen in der M-Element-Datenstruktur 112 komprimiert. Die Metadaten 114 geben für jedes Element DN-1, ..., D1, D0 in der M-Element-Datenstruktur 112 die Stelle (z.B. N-1, N-2, 3, 1) in der N-Element-Datenstruktur 102 an, von der aus das entsprechende Element zu kopieren ist. Das in 1 dargestellte Kompressionsformat, auf das Bezug genommen wird, hat ein Kompressionsverhältnis von M zu N („M:N“). Jedes Element, z.B. DN-1, ..., D1, D0 in der M- und N-Element-Datenstruktur 102 bzw. 112 stellt einen numerischen Wert dar, der in einer beliebigen Anzahl von Bits (z.B. 4-Bit („nibble“), 8-Bit („byte“), 16-Bit („half‟), 32-Bit („word“), 64-Bit („double“) usw.) in einem ganzzahligen, Gleitkomma-, Festkomma-, logarithmischen oder jedem anderen numerischen Format zur Kodierung von numerischen Werten auf einem Computer kodiert sein kann.
  • 2 stellt ein Beispiel für ein 2:4-Komprimierungsformat 200 dar. In dem dargestellten Beispiel werden 8 Elemente in einem unkomprimierten Format 200, die sich in zwei 4-Element-Datenstrukturen 204 und 205 befinden, in 4 Elemente in einem komprimierten Datenformat 202 komprimiert, das zwei 2-Element-Datenstrukturen 206 und 207, die numerische Werte der 4 Elemente enthalten, und zwei Metadaten 208 und 209, die Positionen der 4 Elemente enthalten, aufweist. Somit ist N gleich 4 und M gleich 2 in dem dargestellten Beispiel.
  • In dem dargestellten Beispiel werden die Elemente D und C aus der ersten 4-Element-Datenstruktur 204 ausgewählt und in die erste 2-Element-Datenstruktur 206 kopiert, und die Elemente B und A aus der zweiten 4-Element-Datenstruktur 205 werden ausgewählt und in die zweite 2-Element-Datenstruktur 207 kopiert. Die ersten Metadaten 208 geben Positionen (z.B. einen Index) der ausgewählten Elemente in der ersten 4-Element-Datenstruktur 204 an, und die zweiten Metadaten 209 geben Positionen der ausgewählten Elemente in der zweiten 4-Element-Datenstruktur 205 an.
  • In der ausgeführten Komprimierungsanweisung wird eine Anzahl von Elementen, die ausgewählt werden sollen, und eine Grundlage für die Auswahl dieser Elemente für die Komprimierung angegeben. Um die Entsprechungen zwischen den 4- und 2-Element-Datenstrukturen und ihren Metadaten zu erleichtern, werden in der Komprimierungsanweisung auch Größen, Ortsangaben (z.B. Register) und Offsets für die 4- und 2-Element-Datenstrukturen und ihre Metadaten angegeben.
  • Die Komprimierungsanweisung kann in zwei separate Anweisungen unterteilt werden, eine für eine Erzeugung von Metadaten und die andere für eine Erfassung von Daten, oder sie kann zu einer einzigen Überanweisung zusammengefasst werden. Die Komprimierungsanweisung kann auch ausgeführt werden, um mit einem einzigen Datensatz zu arbeiten, z.B. entweder mit der ersten 4-Element-Datenstruktur 204 oder der zweiten 4-Element-Datenstruktur 205, oder um mit mehreren Datensätzen zu arbeiten, z.B. sowohl mit der ersten 4-Element-Datenstruktur 204 als auch mit der zweiten 4-Element-Datenstruktur 205.
  • Da es sich bei der dargestellten Kompression um eine verlustbehaftete Kompression handelt, die folgerichtig mit einem oder mehreren Sätzen einer relativ kleinen Anzahl von Elementen (z.B. 4 Elementen) arbeitet, kann sie auf Daten angewendet werden, die viel größer und auch viel kleiner (z.B. in einer Anzahl von Elementen) sind als die in 2 dargestellten Daten. Da die dargestellte Komprimierung dem M:N-Kompressionsverhältnis folgt und somit M Elemente für alle N Elemente beibehält, behält sie außerdem die strukturierte Sparsity über das gesamte komprimierte Datenformat hinweg konsistent bei.
  • 3 stellt gemäß den Prinzipien der Offenbarung ein Blockdiagramm einer Ausführungsform eines Computersystems 300 dar, das so ausgestaltet ist, dass es Kompressionsoperationen auf Daten durchführt. Bei der dargestellten Ausführungsform weist das System 300 die Parallelverarbeitungseinheiten (PPUs) 310 bis 310-N (im Folgenden PPUs 310s) und ihre jeweiligen Speicher 315 bis 315-N (im Folgenden Speicher 315s) auf. Die PPUs 310s und die Speicher 315s sind mit konventionellen Mitteln, wie z.B. Hochgeschwindigkeitsverbindungen, kommunikativ miteinander gekoppelt.
  • Jede der PPUs 310 weist einen oder mehrere Prozessoren 312 auf, die so ausgestaltet sind, dass sie verschiedene Operationen wie Komprimierung, Dekomprimierung und Umsetzung von Daten durchführen. Bei den Daten kann es sich z.B. um einen Vektor, Tensor oder eine Matrix handeln. Jeder Prozessor 312 ist Multithreading-fähig und so konfiguriert, dass er gleichzeitig mehrere Threads (z. B. 32 Threads) aus einer bestimmten Gruppe von Threads ausführt. Bei einer Ausführungsform implementiert der Prozessor 312 eine SIMD-Architektur (SIMD = Single-Instruction, Multiple-Data), bei der jeder Thread in einer Gruppe von Threads (z.B. einem Warp) so konfiguriert ist, dass er einen anderen Datensatz auf der Grundlage desselben Befehlssatzes bzw. Anweisungssatzes verarbeitet. Bei einer anderen Ausführungsform implementiert der Prozessor 312 eine SIMT (Single-Instruction, Multiple Thread)-Architektur bei der jeder Thread in einer Gruppe von Threads so ausgestaltet ist, dass er einen anderen Datensatz auf der Grundlage desselben Anweisungssatzes verarbeitet, wobei jeder Thread verschiedene Teilmengen desselben Anweisungssatzes ausführen kann.
  • Jede der PPUs 310 weist auch einen temporären Speicher (TS) 314 auf, wie z.B. eine Registerdatei oder einen Speicher, der so ausgestaltet ist, dass er Daten zwischen dem Prozessor 312 und dem Speicher 315 für die Operationen bereitstellt oder vorübergehend speichert. Bei den PPUs 310s kann es sich um eine andere Art von allgemeiner oder spezieller Verarbeitungseinheit handeln, wie z.B. eine Zentraleinheit (CPU), eine Grafikverarbeitungseinheit (GPU), ein FPGA (Field Programmable Gate Array) und eine anwendungsspezifische integrierte Schaltung (ASIC).
  • Jeder der Speicher 315s ist so konfiguriert, dass er Daten speichert, die zur Durchführung verschiedener Operationen benötigt werden. Jeder der Speicher 315 kann die tatsächlichen Werte der an den Operationen beteiligten Daten sowie eine Reihe von Anweisungen speichern, die die PPUs 310 zur Durchführung der Operationen veranlassen können. Bei einer Ausführungsform können die Speicher 315s eine Reihe von DRAM- (Dynamic Random Access Memory) und/oder RAM- (Random Access Memory) Bauelementen umfassen.
  • 4 stellt ein Flussdiagramm einer Ausführungsform eines Verfahrens 400 zur Komprimierung von Daten dar, das nach den Prinzipien der Offenbarung durchgeführt wird. Das Verfahren 400, oder zumindest ein Teil davon, kann von einem Computersystem, wie z.B. dem Computersystem 300 in 3, durchgeführt werden. Das Verfahren 400 beginnt mit Schritt 405.
  • In Schritt 410 werden Metadaten aus einer N-Element-Datenstruktur erzeugt, die durch eine Ausführung einer ersten Anweisung komprimiert werden. N ist eine positive ganze Zahl, die eine Anzahl von Elementen in einer Datenstruktur angibt, die komprimiert wird. Bei der dargestellten Ausführungsform stellt die N-Element-Datenstruktur einen N-Element-Vektor dar. Die N-Element-Datenstruktur kann auch einen N-Element-Tensor oder eine N-Element-Matrix darstellen. Die N-Element-Datenstruktur kann eine von vielen N-Element-Datenstrukturen in einem Ursprungsspeicher bzw. Quellspeicher sein. Bei der dargestellten Ausführungsform ist die erste Anweisung eine Metadaten erzeugende Anweisung, die als GENMETADATA-Anweisung bezeichnet wird. Bei einer Ausführungsform ist die erste Anweisung eine Operation einer „Super-Anweisung“, die sowohl Metadatenerzeugungs- als auch Datenkomprimierungsoperationen durchführt. Ein Beispielformat einer GENMETADATA-Anweisung ist im Folgenden angegeben.
  • Als erster Teilschritt von Schritt 410 wird die N-Element-Datenstruktur als Eingabe der ersten Anweisung erhalten. Die N-Element-Datenstruktur wird aus einem Ursprungsregister oder einer Speicherstelle gelesen, die in der ersten Anweisung angegeben ist. Das Ursprungsregister / die Speicherstelle kann einer bestimmten Registerdatei oder Speicherstelle in einem temporären Speicher, wie z.B. dem TS 314 in 3, entsprechen.
  • Als zweiter Teilschritt wählt Schritt 410 M Elemente aus der N-Element-Datenstruktur unter Verwendung einer Funktion in der ersten Anweisung aus. M ist eine positive ganze Zahl, die kleiner als N ist. Die Funktion kann z.B. eine MAX-Funktion sein, die die Werte aller Elemente in einer N-Element-Datenstruktur vergleicht und M Elemente mit größeren Werten auswählt, eine MAXABS-Funktion sein, die die Beträge aller Elemente in einer N-Element-Datenstruktur vergleicht und M Elemente mit größeren Beträgen auswählt, eine MIN-Funktion sein, die die Werte aller Elemente in einer N-Element-Datenstruktur vergleicht und M Elemente mit kleineren Werten auswählt, oder eine MINABS-Funktion sein, die die Beträge aller Elemente in einer N-Element-Datenstruktur vergleicht und M Elemente mit kleineren Beträgen auswählt. Es wird davon ausgegangen, dass auch andere Funktionen, wie z.B. eine Funktion, die eine bestimmte Anzahl von Elementen mit Werten in einem bestimmten Bereich auswählt, verwendet werden können.
  • Als dritter Teilschritt von Schritt 410 werden die Positionen der ausgewählten M Elemente innerhalb der N-Element-Datenstruktur bestimmt. Wenn es sich bei der N-Element-Datenstruktur um eine von mehreren N-Element-Datenstrukturen in einer größeren Datenstruktur handelt, wird die Startposition der N-Element-Datenstruktur innerhalb der größeren Datenstruktur unter Verwendung eines in der ersten Anweisung angegebenen Gruppenindex bestimmt und als Offset zu den Positionen der M Elemente innerhalb der N-Element-Datenstruktur verwendet.
  • Als vierter Teilschritt von Schritt 410 werden die Positionen der M Elemente in einem Zielregister/Speicherort als Metadaten gespeichert. Die Position, an der die Metadaten innerhalb des Zielregisters gespeichert werden, z.B. die Startposition (Offset) der Metadaten innerhalb des Zielregisters, wird anhand eines in der ersten Anweisung angegebenen Metadatenindex bestimmt. Das Zielregister kann einer bestimmten Registerdatei oder einer bestimmten Speicherstelle in einem Zwischenspeicher, wie z.B. dem TS 314 in 3, entsprechen. Es wird davon ausgegangen, dass die Positionen der Elemente, die in dem zweiten Teilschritt von Schritt 410 nicht ausgewählt werden, nicht bestimmt und daher auch nicht in dem dritten und vierten Teilschritt gespeichert werden.
  • In Schritt 420 wird die N-Element-Datenstruktur entsprechend den Metadaten in eine M-Element-Datenstruktur komprimiert, indem eine zweite Anweisung ausgeführt wird. Bei der dargestellten Ausführungsform ist die zweite Anweisung eine Datenkomprimierungsanweisung, die sich von der ersten Anweisung unterscheidet. Die Datenkomprimierungsanweisung wird als eine GATHER-Anweisung bezeichnet. Bei einer Ausführungsform ist die zweite Anweisung eine Operation einer „Super-Anweisung“, die sowohl Metadatenerzeugungs- als auch Datenkomprimierungsoperationen durchführt. Ein Beispielformat einer GATHER-Anweisung wird im Folgenden angegeben. Als erster Teilschritt von Schritt 420 werden die in Schritt 410 erzeugten Metadaten und die N-Element-Datenstruktur als eine Eingabe der zweiten Anweisung erhalten. Auf die N-Element-Datenstruktur und die Metadaten wird über ihre jeweiligen Ursprungsregister/Speicherorte zugegriffen. Die Ursprungsregister können bestimmten Registerdateien oder Speicherplätzen in einem temporären Speicher, wie z.B. dem TS 314 in 3, entsprechen.
  • Als zweiter Teilschritt von Schritt 420 werden die Werte der ausgewählten Elemente, d.h. der M Elemente, entsprechend den in den Metadaten angegebenen Positionen aus der N-Element-Datenstruktur erfasst. Wenn es sich bei der N-Element-Datenstruktur um eine von mehreren N-Element-Datenstrukturen in einer größeren Datenstruktur handelt, wird die Startposition der N-Element-Datenstruktur innerhalb der größeren Datenstruktur mit Hilfe eines Gruppenindex bestimmt und als Offset zu den Positionen der M Elemente verwendet. Die Startposition der Metadaten innerhalb des Ursprungsregisters wird mit Hilfe eines Metadatenindex bestimmt. Der Gruppenindex und der Metadatenindex sind in der zweiten Anweisung enthalten / angegeben.
  • Als dritter Teilschritt von Schritt 420 werden die erfassten Werte der M Elemente in einer M-Element-Struktur gespeichert. Bei der dargestellten Ausführungsform stellt die M-Element-Datenstruktur einen M-Element-Vektor dar. Bei anderen Ausführungsformen kann die M-Element-Datenstruktur einen M-Element-Tensor oder eine M-Element-Matrix darstellen. Die M-Element-Struktur befindet sich in einem Zielregister/Speicherort, der in der zweiten Anweisung angegeben ist. Das Zielregister kann einer bestimmten Registerdatei oder einer Speicherstelle in einem Zwischenspeicher, wie z.B. dem TS 314 in 3, entsprechen. An dem Ende von Schritt 420 hat das Verfahren 400 ein strukturiertes Sparsity-Format von M:N erreicht. Das Verfahren 400 endet bei Schritt 425.
  • Das Verfahren 400 kann durch einen einzigen Thread einer Ausführung durchgeführt werden. Alternativ kann das Verfahren 400 durch mehrere Threads ausgeführt werden. Bei einer Ausführungsform komprimiert ein einzelner Thread alle eingegebenen N-Element-Datenstrukturen. Bei einer anderen Ausführungsform komprimiert jeder Thread eines Thread-Paares die Hälfte der eingegebenen N-Element-Datenstrukturen. Bei einer anderen Ausführungsform komprimiert jeder von vier Threads jeweils ein Viertel der eingegebenen N-Element-Datenstrukturen. Während die vorliegende Beschreibung, sowohl vorab als auch im Folgenden, Threads zur Ausführung (z.B. auf einer GPU) beschreibt, ist zu beachten, dass Bahnen zur Ausführung (z.B. auf jedem Ausführungspfad einer SIMD-CPU (Single Instruction Multiple Data)) auf ähnliche Weise anstelle oder zusätzlich zu Threads verwendet werden können.
  • Das Verfahren 400 kann wiederholt / kaskadiert werden, um ein höheres Verhältnis einer Kompression oder Sparsity zu erreichen. Wenn zum Beispiel N gleich 4 und M gleich 2 ist, kann das Verfahren 400 dreimal wiederholt werden, um ein Kompressionsverhältnis von 2:8 zu erreichen. Das Verfahren 400 kann zweimal ausgeführt werden, um zwei Zwischen-M-Element-Datenstrukturen aus zwei N-Element-Strukturen zu erzeugen, und dann ein drittes Mal ausgeführt werden, um eine endgültige M-Element-Datenstruktur aus einer Kombination der beiden Zwischen-M-Element-Strukturen zu erzeugen.
  • Ein Beispielformat für ein Beispiel einer GENMETADATA-Anweisung ist im Folgenden dargestellt:
 GENMETADATA.func.selectN.fmt.idxsize.num{.SEQ} Rd, Ra, Rb, Rc, #VecIdxU06, #MDidxU04
wobei:
  • .func: eine Funktion ist, die steuert, wie Werte von Elementen in einer N-Element-Datenstruktur zur Auswahl miteinander verglichen werden (wie es vorab beschrieben ist, kann
  • .func z.B. MAX, ABSMAX, MIN, ABSMIN usw. sein);
  • .selectN: eine Anzahl von Elementen ist, die mit .func ausgewählt werden sollen, wie z.B. 1 oder 2;
  • .fmt: ein Format von Elementen in Ra und Rb ist, einschließlich ganzzahliger Formate, wie eine vorzeichenbehaftete ganze Zahl mit 2, 4, 8, 16 und 32 Bit (.S2, .S4, .S8, .S16, .S32) und eine vorzeichenlose ganze Zahl mit 2, 4, 8, 16 und 32 Bit (.U2, .U4, .U8, .U16, .U32), und nicht ganzzahliger Formate, wie IEEE Half Precision (16 Bit) oder Single (32 Bit) Precision Floating Point (. FP16, .FP32), abgeschnittener Versionen von FP16 und FP32 (E8M7, E8M10), LNS (Log Number System), POSITs (ein vorgeschlagenes neues dynamisch skaliertes numerisches Format), anderer 8-Bit-Gleitkomma-ähnlicher Formate und Block-Exponenten-Formate;
  • .idxsize: eine Größe des Metadatenindex ist, wie 2 Bit, 4 Bit oder 8 Bit (.U2, .U4, .U8)
  • .num: eine Anzahl von eingegebenen N-Element-Datenstrukturen im Ursprungsspeicher ist, z. B. 1 Datenstruktur, 2 Datenstrukturen oder 4 Datenstrukturen (.1G, .2G, .4G);
  • .SEQ: optionale sequentielle Indizierung: wenn mit mehr als einer N-Element-Datenstruktur gearbeitet wird, werden alle N-Element-Datenstrukturen sequentiell indiziert, als ob sie Teil einer einzigen, größeren Datenstruktur wären, anstatt die gleichen N Indizes für jede N-Element-Datenstruktur zu wiederholen;
  • Rd: Zielregister oder Speicherort;
  • Ra: erstes Ursprungsregister oder erste Speicherstelle, die die gesamte oder einen Teil einer N-Element-Datenstruktur enthält;
  • Rb: zweites Ursprungsregister oder zweite Speicherstelle, die die gesamte oder einen Teil einer N-Element-Datenstruktur enthält;
  • Rc: optionales Ursprungsregister oder optionale Speicherstelle; wenn GENMETADATA .idxsize und .num so spezifiziert, dass nicht alle Bits von Rd beschrieben werden, wird der Inhalt von Rc auf ansonsten nicht beschriebene Bits von Rd gesetzt. Rz (z.B. ein Register oder eine Speicherstelle mit dem Wert Null) wird als ein Platzhalter verwendet, wenn kein optionaler Ursprungsspeicher verwendet wird;
  • #VecIdxU06: Gruppenindex; ein Index mit 6 Bit, der die (Start-)Position einer N-Element-Datenstruktur innerhalb einer größeren Datenstruktur unmittelbar angibt, z.B. wenn die N-Element-Datenstruktur eine von mehreren N-Element-Datenstrukturen in der größeren Datenstruktur ist;
  • #MDidxU04: Metadaten-Index; ein Index mit 4 Bit, der unmittelbar den Versatz in Bits bestimmt, wo die Metadaten in Rd geschrieben werden.
  • Die 5-9 zeigen Beispiele für eine GENMETADATA-Anweisung in dem vorab beschriebenen Format.
  • 5 stellt ein Beispiel für eine GENMETADATA-Anweisung 500 dar, die Metadaten 510 aus einer N-Element-Datenstruktur 520 erzeugt. Bei dem dargestellten Beispiel ist N gleich 4 und M gleich 2, und das Beispiel erzeugt die Metadaten 510, die die Positionen von 2 Elementen innerhalb der 4-Element-Datenstruktur 520 angeben.
  • In dem dargestellten Beispiel wird die 4-Element-Datenstruktur 520 in den Ursprungsregistern R1 und R2 gespeichert, und die erzeugten Metadaten 510 werden im Zielregister R10 gespeichert. In der GENMETADATA-Anweisung 500 gibt „.1G‟ an, dass nur eine 4-Element-Datenstruktur in den Ursprungsregistern gespeichert ist, und „.F16‟ gibt an, dass jedes Element in der 4-Element-Datenstruktur 520 16 Bit hat. Da die Größe jeder Ursprungsstelle in dem dargestellten Beispiel auf 32 Bit begrenzt ist, enthält jedes Ursprungsregister zwei Elemente. Der #VecIdxU06-Wert von 0 zeigt an, dass die Startposition der 4-Element-Datenstruktur 520 ‚0‘ ist.
  • Wie durch MAX.2 angegeben ist, wählt die Anweisung 500 zwei Elemente mit größerem Wert, ‚3‘ und ‚7‘, aus R1 und R2 aus, die jeweils die Positionen ‚2‘ und ‚1‘ haben. Da die Indexgröße in den Metadaten 510 2 Bits beträgt (wie durch .U2 angegeben), werden die Positionen von '2" als 1 0 und die Position von „1“ als 0 1 in die Metadaten 510 geschrieben. Da #MDidxU04 gleich Null ist, werden die Positionsbits der ausgewählten Elemente in die ersten 4 Bits (2x2bits) des Zielregisters R10 geschrieben.
  • 6 stellt ein weiteres Beispiel einer GENMETADATA-Anweisung 600 dar, die Metadaten 610 aus einer N-Element-Datenstruktur 620 erzeugt. Bei dem dargestellten Beispiel ist N gleich 4 und M gleich 2, und das Beispiel erzeugt die Metadaten 610, die die Positionen von 2 Elementen innerhalb der 4-Element-Datenstruktur 620 angeben.
  • Bei dem dargestellten Beispiel werden, wie durch .2G und R1 und R2 angegeben, zwei 4-Element-Datenstrukturen (insgesamt 64 Bit) in zwei Ursprungsregistern R1 und R2 gespeichert. Da jedes Element der 4-Element-Datenstrukturen 620 aus 8 Bit besteht (wie es durch S8 angegeben ist), enthält jedes Ursprungsregister vier 8-Bit-Elemente. Der #VecIdxU06-Wert von 2 zeigt an, dass die Startposition der 4-Element-Datenstruktur 620 in jedem Ursprungsregister ‚8‘ ist. Die Startposition kann berechnet werden, indem der Wert von #VecIdxU06 mit 4 multipliziert wird. Wie es durch MAXABS.2 angegeben ist, wählt die Anweisung 600 zwei Elemente mit größerem Betrag aus jeder der eingegebenen 4-Element-Datenstrukturen 620 aus. Elemente mit den Werten ‚3‘ und ‚-7‘ werden aus R1 ausgewählt, und Elemente mit den Werten ‚6‘ und ‚5‘ werden aus R2 ausgewählt. Da die Startposition der Elemente bei jeder der Ursprungspositionen „8“ ist, ist die Position der Elemente mit den Werten „6“ und „5“ in R2 „11“ bzw. „9“, und die Position der Elemente mit den Werten „3“ und „-7“ in R1 ist „10“ und „9“. Da die Indexgröße in den Metadaten 4 Bits beträgt (wie es durch .U4 angegeben ist), werden die Position „11“ und „9“ im Hexadezimalformat als „B“ und „9“ und die Position „10“ und „9“ als „A“ und „9“ in den Metadaten 610 geschrieben. Da kein Offset angegeben ist, werden die Positionen in die ersten 16 Bits (4x4bits) des Zielregisters R10 geschrieben. Da die Indexgröße in den Metadaten 8 Bits beträgt (wie es durch .U8 angegeben ist), werden die Positionen im Hexadezimalformat geschrieben, wobei die höchstwertigen 4 Bits auf Null gesetzt werden.
  • 7 stellt ein weiteres Beispiel einer GENMETADATA-Anweisung 700 dar, die Metadaten 710 aus einer N-Element-Datenstruktur 720 erzeugt. Bei dem dargestellten Beispiel ist N gleich 4 und M gleich 2, und das Beispiel erzeugt die Metadaten 710, die die Positionen von 2 Elementen innerhalb der eingegebenen 4-Element-Datenstruktur 720 angeben.
  • Bei dem dargestellten Beispiel werden, wie es durch .2G und R1 und R2 angegeben ist, zwei eingegebene 4-Element-Datenstrukturen (insgesamt 64 Bit) in zwei Ursprungsregistern R1 und R2 gespeichert. Da jedes Element der eingegebenen 4-Element-Datenstrukturen 720 8 Bits hat (wie es durch .S8 angegeben ist), enthält jedes Ursprungsregister vier 8-Bit-Elemente. Der #VecIdxU06-Wert von 1 zeigt an, dass jede eingegebene Datenstruktur 720 an Position 4 (1x4) beginnen sollte. Das Vorhandensein von.SEQ zeigt jedoch an, dass die eingegebenen Datenstrukturen 720 in den Ursprungsregistern R1 und R2 in Reihe angeordnet sind, und statt an Position 4 zu beginnen, beginnen die eingegeben Datenstrukturen 720 an Position 8 und gehen bis Bit 15. Wenn .SEQ gesetzt ist, kann die Startposition der Elemente in den Ursprungsregistern berechnet werden, indem ein Wert von #VecIdxU06 mit 4 und einem Wert von .num multipliziert wird. Wie durch MAXABS.2 angegeben ist, wählt die Anweisung 700 aus jeder 4-Element-Datenstruktur 720 zwei Elemente mit größerem Betrag aus. Elemente mit den Werten 3 und -7 werden aus R1 ausgewählt, und Elemente mit den Werten 6 und 5 werden aus R2 ausgewählt. Da die Startposition des Elements an den Ursprungspositionen 8 ist, sind die Positionen der ausgewählten Elemente mit den Werten „6“ und „5“ jeweils „15“ und „13“, und die Positionen der ausgewählten Elemente mit den Werten „3“ und „-7“ sind „10“ und „9“. Da die Indexgröße in den Metadaten 4 Bits beträgt (wie es durch .U4 angegeben ist), werden die Positionen „15“ und „13“ im Hexadezimalformat als „F“ und „D“ und „10“ und „9“ in den Metadaten 710 als „A“ und „9“ geschrieben. Da #MDidxU04 gleich Null ist, werden die Positionen in die ersten 16 Bits (4x4bits) des Zielregisters R10 geschrieben.
  • 8 stellt ein weiteres Beispiel einer GENMETADATA-Anweisung 800 dar, die Metadaten 810 aus einer eingegebenen N-Element-Datenstruktur 820 erzeugt. Bei dem dargestellten Beispiel ist N gleich 4 und M gleich 2, und das Beispiel erzeugt die Metadaten 810, die die Positionen von 2 Elementen innerhalb der eingegebenen 4-Element-Datenstruktur 820 angeben.
  • Bei dem dargestellten Beispiel sind, wie es durch .2G und R1 und R2 angegeben ist, zwei 4-Element-Datenstrukturen (insgesamt 64 Bit) in zwei Ursprungsregistern R1 und R2 gespeichert. Da jedes Element der eingegebenen Datenstrukturen 820 aus 8 Bits besteht (wie es durch .S8 angegeben ist), enthält jedes Ursprungsregister R1, R2 vier 8-Bit-Elemente. Da #VecIdxU06 einen Wert von 2 hat und .SEQ nicht vorhanden ist, beginnt jede eingegebene Datenstruktur 820 an Position 8 (2x4) von jedem Ursprungsregister. Da #MDidxU04 einen Wert von 4 hat, ist das Startbit für die Metadaten 810 innerhalb des Zielregisters 16, was durch Multiplikation eines Wertes von #MDidxU04 mit einem Wert von .idxsize berechnet wird.
  • Wie es durch MAXABS.2 angegeben ist, wählt die Beispielanweisung 800 zwei Elemente mit größerem Betrag aus jeder der eingegebenen Datenstrukturen 820 aus. Somit werden Elemente mit den Werten „3“ und „-7“ aus R1 und Elemente mit den Werten „6“ und „5“ aus R2 ausgewählt. Da die Startposition jeder eingegebenen Datenstruktur 820 8 ist, sind die Positionen der ausgewählten Elemente mit den Werten „6“ und „5“ in R2 „11“ bzw. „9“, und die Positionen der ausgewählten Elemente mit den Werten „3“ und „-7“ in R1 sind „10“ und „9“. Da die Indexgröße in den Metadaten 4 Bit beträgt (wie es durch .U4 angegeben ist), werden die Positionen „11“ und „9“ im Hexadezimalformat als „B“ und „9“ und „10“ und „9“ in den Metadaten 810 als „A“ und „9“ geschrieben. Da der Offset 16 beträgt, werden die Positionen in die Bits 16-31 des Zielregisters R10 geschrieben.
  • 9 stellt ein Beispiel der GENMETADATA-Anweisung dar, die Metadaten 910 aus einer eingegebenen N-Element-Datenstruktur 912 erzeugt. Bei dem dargestellten Beispiel ist N gleich 4 und M gleich 1, und das Beispiel erzeugt die Metadaten 910, die eine Position von 1 Element innerhalb der eingegebenen 4-Element-Datenstruktur 912 angeben. Wie es durch .1G sowie R10 und R11 angegeben ist, wird eine eingegebene 4-Element-Datenstruktur (insgesamt 64 Bit) in zwei Ursprungsregistern R10 und R11 gespeichert. Da jedes Element der eingegebenen 4-Element-Datenstruktur 912 16 Bit hat (wie es durch .F16 angegeben ist), enthält jedes Ursprungsregister 2 16-Bit-Elemente.
  • Bei dem dargestellten Beispiel wählt und bestimmt die Anweisung eine Position eines Elements für jeden Durchlauf (wie es durch .1 nach MAX angegeben ist) und verwendet #PassU01 und #NibbleU03 anstelle von #VecIdxU06 bzw. #MDidxU04. #PassU01 ist ein 1 Bit, das unmittelbar eine Durchgangsnummer und das Vorhandensein einer Filterung / Maskierung anzeigt (0 gibt den ersten Durchgang und keine Filterung an), und #NibbleU03 weist 3 Bit auf, was verwendet wird, um unmittelbar eine Position des für die Filterung zu verwendenden Elements zu bestimmen.
  • Wie es durch 0 von #PassU01 angegeben ist, wählt die erste Anweisung 914 ein Element mit dem größten Wert („5“) aus und schreibt dessen Position („2“) im ersten Durchgang in die Metadaten 916. ‚0‘ für #nibbleU03 in der zweiten Anweisung zeigt an, dass der Wert 2 an der Position 0 in dem Ursprungsregister R3 die Position des Elements ist, das aus der eingegebenen Datenstruktur des Ursprungs gefiltert werden soll. Daher filtert / maskiert die Anweisung 918 in dem zweiten Durchlauf zunächst das Element mit dem Wert „5“, das sich an Position 2 in der eingegebenen Datenstruktur 912 befindet. Von den übrigen Elementen wählt die zweite Anweisung 918 dann ein Element mit dem größten Wert „4“ aus und schreibt seine Position („3“) in die Metadaten 910. ‚3‘ überschreibt ‚2‘ in den Metadaten, da kein #MDidxU04-Wert angegeben ist. Am Ende des zweiten Durchlaufs geben die Metadaten 910 die Position eines Elements mit dem zweitgrößten Wert an. Es ist klar, dass der beschriebene Filterprozess modifiziert werden kann, z.B. mit einer anderen Funktion, und/oder erweitert werden kann, z.B. mit einem oder mehreren zusätzlichen Durchgängen, um bestimmte Elemente aus einer eingegebenen Datenstruktur herauszufiltern. Wenn #MDidxU04 so eingestellt wird, dass der Positionswert des vorhergehenden Durchgangs gemerkt wird, ahmt der beschriebene Filterprozess die 2:4 GENMETADATA-Anweisung nach, was in Bezug auf die Verarbeitungsressourcen teurer ist als die zweimalige Ausführung von der 1:4-GENMETADATA-Anweisung.
  • Ein Beispielformat für ein Beispiel der GATHER-Anweisung ist im Folgenden dargestellt.
  • GATHER.datasize.idxsize.num Rd, Ra, Rb, Re, #VecIdxU06, #MDidxU04, #DstByteU02, #SrcHalfU01
    wobei:
    • .datasize: eine Bitbreite der Datenelemente in Ra, Rb und Rd ist, wie z.B. 16-Bit, 8-Bit oder 4-Bit (.16, 18, .4);
    • .idxsize: eine Größe des Metadaten-Index ist, wie z.B. 2-Bit, 4-Bit oder 8-Bit (.U2, .U4, .U8);
    • .num: eine Anzahl von eingegebenen N-Element-Datenstrukturen ist, die durch Ra und Rb dargestellt werden, wie z.B. 1 Datenstruktur, 2 Datenstrukturen oder 4 Datenstrukturen (.1G, .2G, .4G);
    • Rd: ein Zielregister oder Speicherort ist;
    • Ra: ein erstes Ursprungsregister oder erste Speicherstelle, die die gesamte oder einen Teil einer N-Element-Datenstruktur enthält;
    • Rb: ein zweites Ursprungsregister oder eine zweite Speicherstelle ist, die die gesamte oder einen Teil einer N-Element-Datenstruktur enthält;
    • Rc: ein drittes Ursprungsregister oder dritter Speicherplatz mit Metadaten ist;
    • #VecIdxU06: ein Gruppenindex ist; ein Index mit 6 Bit, der die (Start-)Position einer N-Element-Datenstruktur innerhalb einer größeren Datenstruktur unmittelbar angibt, z.B. wenn die N-Element-Datenstruktur eine von mehreren N-Element-Datenstrukturen in der größeren Datenstruktur ist;
    • #MDidxU04: ein Metadaten-Index ist; ein Index mit 4 Bit, der unmittelbar den Versatz in Bits bestimmt, wo sich Metadaten in Rc befinden;
    • #DstByteU02: 2 Bit, die unmittelbar eingesetzt werden, um zu bestimmen, wohin in Rd das 16-Bit- oder 8-Bit-Wort zu schreiben ist, wenn die gesamten Eingabedaten 32 bzw. 16 Bit betragen (1 Gruppe int8, 2 Gruppen int4 oder 1 Gruppe int4).
  • Wenn die gesamten Eingabedaten 32 Bit betragen, dann muss dieser unmittelbare Index einen Wert aufweisen, der ein Vielfaches von 2 ist. Wenn dieser unmittelbare Index einen Wert aufweist, der ein Vielfaches von 2 ist, enthält Ra allein alle Eingabedaten, die erfassten Datenelemente sind entweder 16 oder 8 Bit, und nur ein Teil von Rd wird mit diesen Daten beschrieben; der Rest von Rd wird mit dem Inhalt von Rb beschrieben;
    • #SrcHalfU01: 1 Bit zur unmittelbaren Bestimmung, ob aus der unteren oder oberen Hälfte von Ra gelesen werden soll, wenn mit einer einzelnen Gruppe von int4-Datenelementen gearbeitet wird.
  • 10-14 zeigen Beispiele für eine GATHER-Anweisung in dem vorab beschriebenen Format.
  • 10 stellt ein Beispiel für eine GATHER-Anweisung 1000 dar, die eine N-Element-Datenstruktur in eine M-Element-Datenstruktur entsprechend Metadaten komprimiert, die mit einer Metadaten erzeugenden Anweisung wie der oben beschriebenen GENMETADATA erzeugt wurde. Bei dem dargestellten Beispiel ist N gleich 4 und M gleich 2.
  • Bei dem dargestellten Beispiel wird eine eingegebene 4-Element-Datenstruktur 1010 (wie es durch .IG angegeben ist) in den ersten Ursprungsregistern R1 und R2 in eine 2-Element-Datenstruktur in einem Zielregister R15 komprimiert, entsprechend den Metadaten 1030 in einem zweiten Ursprungsregister R10. .16 zeigt an, dass jedes Element in der eingegebenen 4-Element-Datenstruktur 1010 aus 16 Bit besteht.
  • Da jeder Metadatenindex aus 2 Bits besteht (wie es durch .U2 angezeigt ist), geben die ersten 2 Werte 1 0 (Bitpositionen 3 und 2 in den Metadaten 1030) die Position 2 an, und die nächsten 2 Werte 0 1 (Bitpositionen 1 und 0 in den Metadaten 1030) die Position 1 an. Somit werden „3“ an der Position 2 und „7“ an der Position 1 der eingegebenen Datenstruktur 1010 erfasst und in die 2-Element-Datenstruktur 1020 im Zielregister R15 geschrieben. Bei dem dargestellten Beispiel sind #VecIdxU06, #MDidxU04, #DstByteU02 und #SrcHalfU01 nicht angegeben.
  • 11 stellt ein weiteres Beispiel für eine GATHER-Anweisung dar, die eine N-Element-Datenstruktur in eine M-Element-Datenstruktur komprimiert, und zwar gemäß Metadaten, die mit einer Metadaten erzeugenden Anweisung wie der vorab beschriebenen GENMETADATA erzeugt wurden. Bei dem dargestellten Beispiel ist N gleich 4 und M gleich 2.
  • Bei dem dargestellten Beispiel werden zwei eingegebene 4-Element-Datenstrukturen 1110 (wie es durch .2G angegeben ist) in den ersten Ursprungsregistern R1 und R2 in zwei 2-Element-Datenstrukturen 1120 in einem Zielregister 1120 komprimiert, entsprechend den Metadaten 1130 in einem zweiten Ursprungsregister R10. .8 gibt an, dass jedes Element in den eingegebenen 4-Element-Datenstrukturen 1110 aus 8 Bits besteht.
  • Da jeder Metadatenindex aus 2 Bits besteht (wie es durch .U2 angezeigt ist), geben die ersten 2 Werte 1 1 die Position 3 in R2 an, die nächsten 2 Werte 0 1 die Position 1 in R2, die nächsten 2 Werte 1 0 die Position 2 in R1 und die letzten beiden Werte 0 1 die Position 1 in R1 an. Als solche werden die Werte „6“ und „5“ an den Positionen 3 und 1 des Registers R2 und „3“ und „-7“ an den Positionen 2 und 1 des Registers R1 erfasst und in die beiden 2-Element-Datenstrukturen 1120 in dem Zielregister R20 geschrieben. Bei dem dargestellten Beispiel sind #VecIdxU06, #MDidxU04, #DstByteU02 und #SrcHalfU01 nicht angegeben.
  • 12 stellt ein weiteres Beispiel 1200 einer GATHER-Anweisung dar, die eine N-Element-Datenstruktur in eine M-Element-Datenstruktur entsprechend Metadaten komprimiert, die mit einer Metadaten erzeugenden Anweisung wie der vorab beschriebenen GENMETADATA erzeugt wurden. Bei dem dargestellten Beispiel ist N gleich 4 und M gleich 2. Bei dem dargestellten Beispiel werden zwei eingegebene 4-Element-Datenstrukturen 1210 (wie es durch .2G angegeben ist) in den ersten Ursprungsregistern R1 und R2 in zwei 2-Element-Datenstrukturen 1220 in einem Zielregister R20 komprimiert, entsprechend den Metadaten 1230 in einem zweiten Ursprungsregister R10. .8 gibt an, dass jedes Element in den eingegebenen 4-Element-Datenstrukturen 1210 aus 8 Bits besteht. Da #VecIdxU06 1 ist, beginnt jede eingegebene 4-Element-Datenstruktur 1210 an Position 4 (1x4). Da #MDidxU04 gleich Null ist, gibt es keinen Offset für die Metadaten 1230 innerhalb des zweiten Ursprungsregisters R10.
  • Da jeder Metadatenindex aus 4 Bits besteht (wie es durch .U4 angegeben ist), gibt der erste Wert „7“ der Metadaten 1230 die Position 7 in R2 an, der zweite Wert „5“ die Position 5 in R2, der dritte Wert „6“ die Position 6 in R1 und der vierte Wert „5“ die Position 5 in R1. Somit werden die Werte „6“ und „5“ an den Positionen 7 und 5 des Registers R2 und die Werte „3“ und „-7“ an den Positionen 6 und 5 der Registerdatei R1 erfasst und in die beiden 2-Element-Datenstrukturen 1220 in dem Zielregister R20 geschrieben. Bei dem dargestellten Beispiel sind #DstByteU02 und #SrcHalfU01 nicht angegeben.
  • 13 stellt ein weiteres Beispiel für eine GATHER-Anweisung dar, die eine N-Element-Datenstruktur in eine M-Element-Datenstruktur komprimiert, entsprechend den Metadaten, die mit einer Metadaten erzeugenden Anweisung wie der oben beschriebenen GENMETADATA erzeugt wurden. In dem dargestellten Beispiel ist N gleich 4 und M gleich 2.
  • In dem dargestellten Beispiel werden zwei eingegebene 4-Element-Datenstrukturen 1310 (wie es durch .2G angegeben wird), die in den ersten Ursprungsregistern R1 und R2 gespeichert sind, in einem Zielregister R20 gemäß den Metadaten 1330, die in einem zweiten Ursprungsregister R10 gespeichert sind, in zwei 2-Element-Datenstrukturen 1320 komprimiert..8 gibt an, dass jedes Element in den eingegebenen 4-Element-Datenstrukturen 1310 aus 8 Bits besteht. Da #VecIdxU06 1 ist, beginnen die Elemente in jeder eingegebenen Datenstruktur an Position 4 (1x4), und da sowohl #MDidxU04 als auch .idxsize 4 sind, ist das Startbit für die Metadaten 1330 innerhalb des zweiten Ursprungsregisters 16 (4x4).
  • Da jeder Metadatenindex 4 Bits aufweist (wie es durch .U4 angegeben wird), geben die ersten beiden Werte „7“ und „5“ der Metadaten 1330 die Positionen 7 und 5 in R2 an, und die nächsten beiden Werte „6“ und „5“ geben die Positionen 6 und 5 in R1 an. Somit werden die Werte „6“ und „5“ an den Positionen 7 und 5 des Registers R2 und die Werte „3“ und „-7“ an den Positionen 6 und 5 des Registers R1 erfasst und in die beiden 2-Element-Datenstrukturen im Zielregister R20 geschrieben. In dem dargestellten Beispiel sind #DstByteU02 und #SrcHalfU01 nicht spezifiziert.
  • 14 stellt ein weiteres Beispiel für eine GATHER-Anweisung dar, die eine N-Element-Datenstruktur in eine M-Element-Datenstruktur entsprechend Metadaten komprimiert, die mit einer Metadaten erzeugenden Anweisung wie der vorab beschriebenen GENMETADATA erzeugt wurden. In dem dargestellten Beispiel ist N gleich 4 und M gleich 2.
  • In dem dargestellten Beispiel zeigt das Vorhandensein von #DstByteU02 an, dass das erste Ursprungsregister R1 alle Eingabedaten enthält, und die erfassten Daten sind 16 Bit. Außerdem gibt der Wert 2 von #DstByteU02 an, dass die erfassten Daten um 2 Byte oder 16 Bit in R20 versetzt sind und der Rest von R20 mit dem Inhalt des anderen ersten Quellregisters R2 beschrieben wird. Somit werden zwei eingegebene 4-Element-Datenstrukturen 1410 (wie durch .2G angegeben) in dem ersten Ursprungsregister R1 in zwei 2-Element-Datenstrukturen 1420 an den Positionen 16-31 eines Zielregisters R20 komprimiert, entsprechend den Metadaten 1230 in einem zweiten Ursprungsregister R10. .4 gibt an, dass jedes Element in den eingegebenen 4-Element-Datenstrukturen 1410 aus 4 Bits besteht.
  • Da jeder Metadatenindex aus 4 Bits besteht, geben die ersten beiden Werte „3“ und „1“ die Positionen 3 und 1 in Gruppe 1 an, und die nächsten beiden Werte „2“ und „1“ die Positionen 2 und 1 in Gruppe 0 an. Somit werden die Werte „6“ und „5“ in Gruppe 1 und die Werte „3“ und „-7“ in Gruppe 0 erfasst und in die beiden 2-Element-Datenstrukturen an den Bits 16-31 des Zielregisters R20 geschrieben. Der Rest von R20 wird mit dem Inhalt des anderen ersten Ursprungsregisters R2 beschrieben. Da sich die Anweisung 1400 mit zwei Gruppen von 4-Bit-Elementen befasst, wird #SrcHalfU01 nicht verwendet.
  • Im Folgenden ist ein Beispielformat für eine als GATHERPLUS-Anweisung bezeichnete ‚Super-Anweisung‘ dargestellt.
  • 
     GATHERPLUS{.mode}.func.selectN.fmt.idxsize.num{.SEQ} Rd1, Rd2, Ra, Rb, Rc, #VecIdxU06,
     #MDidxU04, #DstByteU02, #SrcHalfU01
    wobei:
    • .mode ein optionaler Modus ist, der angibt, ob Metadaten (‚METADATA‘) oder komprimierte Daten (‚DATA‘) erzeugt werden; wenn er nicht vorhanden ist, werden sowohl Metadaten als auch komprimierte Daten erzeugt;
    • .func: eine Funktion ist, die steuert, wie Werte von Elementen in einer N-Element-Datenstruktur zur Auswahl miteinander verglichen werden (wie vorab beschrieben ist, kann
    • .func z.B. MAX, ABSMAX, MIN, ABSMIN usw. sein);
    • .selectN: eine Anzahl von Elementen ist, die mit .func ausgewählt werden sollen, wie z.B. 1 oder 2;
    • .fmt: ein Format von Elementen in Ra und Rb ist, einschließlich ganzzahliger Formate, wie eine vorzeichenbehaftete ganze Zahl mit 2, 4, 8, 16 und 32 Bit (.S2, .S4, .S8, .S16, .S32) und eine vorzeichenlose ganze Zahl mit 2, 4, 8,16 und 32 Bit (.U2, .U4, .U8, .U16, .U32), und nicht ganzzahliger Formate wie IEEE Half Precision (16 Bit) oder Single (32 Bit) Precision Floating Point (. FP16, .FP32), abgeschnittener Versionen von FP16 und FP32 (E8M7, E8M10), LNS (Log Number System), POSITs (ein vorgeschlagenes neues dynamisch skaliertes numerisches Format), andere 8-Bit-Gleitkomma-ähnliche Formate und Block-Exponenten-Formate;
    • .idxsize: eine Größe eines Metadatenindex mit 2 Bit, 4 Bit oder 8 Bit (.U2, .U4, .U8) ist;
    • .num: eine Anzahl von eingegebenen N-Element-Datenstrukturen in dem Ursprungsspeicher ist, z. B. 1 Datenstruktur, 2 Datenstrukturen oder 4 Datenstrukturen (. 1G, .2G, .4G);
    • .SEQ: eine optionale sequentielle Indizierung ist: wenn mit mehr als einer N-Element-Datenstruktur gearbeitet wird, werden alle N-Element-Datenstrukturen sequentiell indiziert, als ob sie Teil einer einzigen, größeren Datenstruktur wären, anstatt die gleichen N Indizes für jede N-Element-Datenstruktur zu wiederholen;
    • Rd1: ein erstes Zielregister oder eine erste Speicherstelle ist;
    • Rd2: ein zweites Zielregister oder eine zweite Speicherstelle ist;
    • Ra: ein erstes Ursprungsregister oder erste Speicherstelle ist, das/die die gesamte oder einen Teil einer N-Element-Datenstruktur enthält;
    • Rb: ein zweites Quellregister oder eine zweite Speicherstelle ist, das/die die gesamte oder einen Teil einer N-Element-Datenstruktur enthält;
    • Rc: ein optionales Ursprungsregister oder eine optionale Speicherstelle ist; wenn GENMETADATA .idxsize und .num so spezifiziert, dass nicht alle Bits von Rd1 oder 2 beschrieben werden würden, wird der Inhalt von Rc auf ansonsten ungeschriebene Bits von Rd1 oder 2 gesetzt;
    • #VecIdxU06: ein Gruppenindex ist; 6 Bit zeigen unmittelbar die (Start-)Position einer N-Element-Datenstruktur innerhalb einer größeren Datenstruktur an, z.B. wenn die N-Element-Datenstruktur eine von mehreren N-Element-Datenstrukturen in der größeren Datenstruktur ist.
    • #MDidxU04: ein Metadatenindex ist; 4 Bit, die unmittelbar den Versatz in Bits bestimmen, wo sich die Metadaten innerhalb von Rc befinden;
    • #DstByteU02: 2 Bit, die unmittelbar bestimmen, wo in Rd das 16-Bit- oder 8-Bit-Wort zu schreiben ist, wenn die gesamten Eingabedaten 32 bzw. 16 Bit aufweisen (1 Gruppe int8, 2 Gruppen int4 oder 1 Gruppe int4). Wenn die gesamten Eingabedaten 32 Bit aufweisen, dann muss diese unmittelbare Angabe einen Wert aufweisen, der ein Vielfaches von 2 ist. Wenn diese unmittelbare Angabe einen Wert aufweist, der ein Vielfaches von 2 ist, enthält Ra allein alle Eingabedaten, die erfassten Datenelemente sind entweder 16 oder 8 Bit, und nur ein Teil von Rd wird mit diesen Daten beschrieben; der Rest von Rd wird mit dem Inhalt von Rb beschrieben;
    • #SrcHalfU01: 1 Bit, das unmittelbar bestimmt, ob aus der unteren oder oberen Hälfte von Ra gelesen werden soll, wenn mit einer einzelnen Gruppe von int4-Datenelementen gearbeitet wird.
  • Wie vorab erwähnt ist, ist die Super-Anweisung eine Kombination aus einer Anweisung zur Erzeugung von Metadaten, z.B. GENMETADATA, und einer Anweisung zur Datenkomprimierung, z.B. GATHER. Die Super-Anweisung weist alle gemeinsamen Felder/Parameter der kombinierten Anweisungen und zwei Register/Speicherorte für die Metadaten und die komprimierten Daten auf.
  • Ein Hauptunterschied zwischen der Super-Anweisung und den beiden oben beschriebenen separaten Anweisungen besteht darin, dass die Super-Anweisung z.B. Schreibvorgänge, zwei Ausgabesätze, die Metadaten und die komprimierten Daten erzeugt. Diese beiden Ausgabesätze können z.B. 1) parallel und/oder 2) nacheinander erzeugt werden. Wenn sie parallel erzeugt werden, kann die Super-Anweisung gleichzeitig in zwei verschiedene Register/Speicherstellen schreiben. Bei der sequentiellen Erzeugung kann die Superanweisung nur an einer Stelle gleichzeitig schreiben, so dass die Operationen, die Metadatenerzeugung und die Datenkomprimierung, nacheinander ausgeführt werden. Dies impliziert, dass die Anweisung einen internen Zustand hat.
  • 15 stellt ein Beispiel einer GATHERPLUS-Anweisung 1500 dar, die Metadaten aus einer N-Element-Datenstruktur erzeugt und die N-Element-Datenstruktur in eine M-Element-Datenstruktur komprimiert. In dem dargestellten Beispiel ist N gleich 4 und M gleich 2.
  • In einer ersten Operation der Anweisung 1500 werden die Positionen von zwei Elementen aus jeder von zwei eingegebenen 4-Element-Datenstrukturen 1520 (wie es durch .2G angegeben ist) in den Ursprungsregistern R1 und R2 in die Metadaten 1510 in ein erstes Zielregister R10 geschrieben. Genauer gesagt werden während der ersten Operation der Anweisung 1500 die Positionen von zwei Elementen mit größerem Betrag (wie es durch MAXABS.2 angegeben ist) aus jeder der beiden eingegebenen 4-Element-Datenstrukturen 1520 in den Ursprungsregistern R1 und R2, d.h. die Positionen „3“ und „1“ von Elementen mit den Werten „6“ und „5“ in R2 und die Positionen „2“ und „1“ von Elementen mit den Werten „3“ und „-7“ in R1, in die Metadaten 1510 in dem ersten Zielregister R10 geschrieben.
  • In einer zweiten anderen Operation der Anweisung 1500 werden die Werte der beiden Elemente mit dem größeren Betrag von jeder der beiden eingegebenen 4-Element-Datenstrukturen 1520, d.h. die Werte ‚6‘ und ‚5‘ der Elemente in R2 und die Werte ‚3‘ und ‚-7‘ der Elemente in R1, erfasst und in zwei 2-Element-Datenstrukturen 1530 in ein zweites Zielregister R20 geschrieben. Diese beiden Operationen können parallel oder nacheinander ausgeführt werden. Obwohl sowohl #VecIdxU06 als auch #MDidxU04 in dem dargestellten Beispiel Null sind, können sie so eingestellt werden, dass sie die Offsets in den jeweiligen Registern/Speicherstellen ähnlich wie bei einer GENMETADATA- und GATHER-Anweisung angeben.
  • Somit werden die Positionen „3“ und „1“ von Elementen mit Werten von „6“ und „5“ in R2 und die Positionen „2“ und „1“ von Elementen mit Werten von „3“ und „-7“ in R1 in die ersten 16 Bits (4x4bits) der Metadaten 1510 in dem ersten Zielregister R10 geschrieben. Auch die Werte ‚6‘ und ‚5‘ der Elemente in R2 und die Werte ‚3‘ und ‚-7‘ der Elemente in R1 werden erfasst und in die beiden 2-Element-Datenstrukturen 1530 in dem zweiten Zielregister R20 geschrieben.
  • 16-21 stellen ein Beispiel für eine Kaskade von GENMETADATA- und GATHER-Anweisungen dar, die ein Sparsity-/Kompressionsverhältnis von 2:8 erreichen. Wie in 16 angegeben ist, komprimiert das dargestellte Beispiel Originaldaten, die aus zwei 4-Element-Datenstrukturen 1602 und 1604 bestehen, in komprimierte Daten, eine 2-Element-Datenstruktur 1620, die zwei Elemente mit den Werten ‚12‘ und ‚7‘ aufweist. Die 2-Element-Datenstruktur 1620 hätte die Metadaten 1630.
  • In 17 werden die Metadaten 1730 aus den beiden eingegebenen 4-Element-Datenstrukturen 1602, 1604 erzeugt. Erstens werden unter Verwendung der ersten GENMETADATA-Anweisung 1710 die Positionen der Elemente mit größeren Werten in der ersten eingegebenen Datenstruktur 1602 bestimmt und in die Metadaten 1730 geschrieben. Da der Wert sowohl von #VecIdxU06 als auch von #MDidxU04 in der ersten GENMETADATA-Anweisung 1710 Null ist, werden die Positionen ‚2‘ und ‚1‘ der Elemente mit größeren Werten in der ersten eingegebenen Datenstruktur 1602, die bei Bit 0 (einer größeren Datenstruktur) beginnt, in den Bits 0-7 der Metadaten 1730 gespeichert. Zweitens werden unter Verwendung der zweiten GENMETADATA-Anweisung 1720 die Positionen der Elemente mit größeren Werten in der zweiten eingegebenen Datenstruktur 1604 bestimmt und in die Metadaten 1730 geschrieben. In der zweiten GENMETADATA-Anweisung werden die Werte von #VecIdxU06 und #MDidxU04 auf ‚1‘ bzw. ‚2‘ gesetzt. Somit werden die Positionen ‚7‘ und ‚6‘ der Elemente mit größeren Werten in der zweiten eingegebenen Datenstruktur 1604, die bei Position 4 beginnt, in den Bits 8-15 der Metadaten 1730 gespeichert.
  • In 18 werden die Werte der Elemente mit größeren Werten in den eingegebenen Datenstrukturen 1602, 1604 unter Verwendung der Metadaten 1730 in zwei 2-Element-Datenstrukturen 1830, 1840 geschrieben. Erstens werden unter Verwendung einer ersten GATHER-Anweisung 1810 die Werte der Elemente mit größeren Werten in der ersten eingegebenen Datenstruktur 1602 in eine erste 2-Element-Datenstruktur 1830 geschrieben. Da die Werte sowohl von #VecIdxU06 als auch von #MDidxU04 in der ersten GATHER-Anweisung 1810 Null sind, werden die Werte von ‚2‘ und ‚1‘ aus der ersten eingegebenen Datenstruktur 1602, die an der Position 0 (der größeren Datenstruktur) beginnt, unter Verwendung der Positionen ‚2‘ und ‚1‘ in den Bits 0-7 der Metadaten 1730 erfasst. Zweitens werden unter Verwendung einer zweiten GATHER-Anweisung 1820 die Werte der Elemente mit größeren Werten in der zweiten eingegebenen Datenstruktur 1604 in eine zweite 2-Element-Datenstruktur 1840 geschrieben. In der zweiten GATHER-Anweisung 1820 sind die Werte von #VecIdxU06 und #MDidxU04 auf'1' bzw. ‚2‘ gesetzt. Somit werden die Werte von „7“ und „6“ aus der zweiten eingegebenen Datenstruktur 1604, die an Position 4 (der größeren Datenstruktur) beginnt, unter Verwendung der Positionen „7“ und „6“ in den Bits 8-15 der Metadaten 1730 erfasst.
  • In 19 werden die Positionen der Elemente mit größeren Werten in den beiden 2-Element-Datenstrukturen 1830, 1840 bestimmt und in die Metadaten 1730 geschrieben, indem eine weitere GENMETADATA-Anweisung 1910 ausgeführt wird. Da der Wert von #MDidxU04 ‚4‘ ist, werden die Positionen ‚2‘ und ‚0‘ von Elementen mit Werten von ‚12‘ und ‚7‘ um 16 Bits versetzt und in die Bits 16-23 der Metadaten 1730 geschrieben.
  • In 20 werden die Werte der Elemente mit größeren Werten in den beiden 2-Element-Datenstrukturen 1830, 1840 erfasst und durch Ausführen einer weiteren GATHER-Anweisung 2010 in eine 2-Element-Datenstruktur 2020 geschrieben. Der Wert von #MDidxU04 ist auf ‚4‘ gesetzt, so dass die Positionen ‚2‘ und ‚0‘ in den Bits 16-23 der Metadaten 1730 verwendet werden, um die Werte ‚12‘ und ‚7‘ der entsprechenden Elemente zu erfassen. Die 2-Element-Datenstruktur 2020 ist identisch mit den endgültigen komprimierten Daten, der 2-Element-Datenstruktur 1620 in 16.
  • In 21 werden die Metadaten 1730 sowohl als eingegebene Datenstruktur als auch als Metadaten für eine weitere GATHER-Anweisung 2110 behandelt. Da der Wert von #MDidxU04 ‚4‘ ist, werden die Positionen an den Bits 16-23 der Metadaten 1730 verwendet, um die Werte der entsprechenden Elemente zu erfassen. Infolgedessen erzeugt die GATHER-Anweisung 2110 eine Datenstruktur 2120, die mit den endgültigen Metadaten 1630 in 16 identisch ist. Es ist klar, dass die in 15-21 dargestellten Anweisungen bei Bedarf wiederholt werden können, um einen höheren Grad an Sparsity zu erreichen. Beispielsweise kann eine Metadatengenerierung, gefolgt von einer Komprimierung für vier 4-Element-Datenstrukturen, wiederholt werden, bis nur noch zwei Elemente übrig sind (17-20), und die anschließende Erzeugung der endgültigen Metadaten für die verbleibenden zwei Elemente zu einem Sparsity-/Komprimierungsverhältnis von 2:16 führen.
  • Es ist klar, dass jede GENMETADATA- und GATHER-Anweisung in dem dargestellten Beispiel durch eine Super-Anweisung wie GATHERPLUS ersetzt werden kann, indem der optionale Modus-Parameter so eingestellt wird, dass er mit den erzeugten Daten übereinstimmt. Um beispielsweise eine GENMETADATA-Anweisung zu ersetzen, wird bei einer GATHERPLUS-Anweisung der Modusparameter auf ‚METADATA‘ gesetzt, und um eine GATHER-Anweisung zu ersetzen, wird bei der GATHERPLUS-Anweisung der Modusparameter auf ‚DATA‘ gesetzt.
  • Ein Teil der oben beschriebenen Vorrichtungen, Systeme oder Verfahren kann in verschiedenen digitalen Datenprozessoren oder Computern ausgestaltet sein oder von diesen ausgeführt werden, wobei die Computer programmiert sind oder ausführbare Programmsequenzen von Software-Anweisungen speichern, um einen oder mehrere Schritte der Verfahren auszuführen. Die Software-Anweisungen solcher Programme können Algorithmen darstellen und in maschinenausführbarer Form auf nicht flüchtigen digitalen Datenspeichermedien, z.B. magnetischen oder optischen Platten, Direktzugriffsspeicher (RAM), magnetischen Festplatten, Flash-Speichern und/oder Nur-Lese-Speicher (ROM), kodiert sein, um es verschiedenen Typen von digitalen Datenprozessoren oder Computern zu ermöglichen, einen, mehrere oder alle Schritte einer oder mehrerer der oben beschriebenen Verfahren oder Funktionen, Systeme oder Vorrichtungen auszuführen.
  • Teile der offenbarten Ausführungsformen können sich auf Computerspeicherprodukte mit einem nicht flüchtigen computerlesbaren Medium beziehen, auf dem sich Programmcode zur Durchführung verschiedener computerimplementierter Operationen befindet, die als ein Teil einer Vorrichtung oder eines Bauelements ausgestaltet sind oder die Schritte eines hierin dargelegten Verfahren ausführen. Nicht flüchtig bezieht sich hier auf alle computerlesbaren Medien mit Ausnahme von flüchtigen, sich ausbreitenden Signalen. Beispiele für nicht flüchtige computerlesbare Medien sind unter anderem: magnetische Medien wie Festplatten, Disketten und Magnetbänder; optische Medien wie CD-ROM-Platten; magneto-optische Medien wie Floptical Disks; und Hardware-Bauelemente, die speziell zur Speicherung und Ausführung von Programmcode ausgestaltet sind, wie ROM- und RAM-Bauelemente. Beispiele für Programmcode weisen sowohl Maschinencode auf, wie er z.B. von einem Compiler erzeugt wird, als auch Dateien mit Code eines höheren Niveaus, der vom Computer mit Hilfe eines Interpreters ausgeführt werden kann.
  • Bei der Interpretation der Offenbarung sollten alle Begriffe so breit wie möglich kontextkonform interpretiert werden. Insbesondere sollten die Begriffe „umfasst“ und „umfassen“ so interpretiert werden, dass sie sich auf Elemente, Komponenten oder Schritte in einer nicht ausschließlichen Weise beziehen, was anzeigt, dass die referenzierten Elemente, Komponenten oder Schritte vorhanden sein oder verwendet oder mit anderen Elementen, Komponenten oder Schritten kombiniert werden können, auf die nicht ausdrücklich Bezug genommen wird.
  • Dem Fachmann ist bekannt, dass andere und zusätzliche Ergänzungen, Streichungen, Ersetzungen und Modifikationen an den beschriebenen Ausführungsformen vorgenommen werden können. Es ist auch klar, dass die hier verwendete Terminologie nur der Beschreibung bestimmter Ausführungsformen dient und nicht einschränkend sein soll, da der Umfang der vorliegenden Offenbarung nur durch die Ansprüche beschränkt wird. Sofern es nicht anders definiert ist, haben alle hierin verwendeten technischen und wissenschaftlichen Begriffe die gleiche Bedeutung, wie sie üblicherweise von einem gewöhnlichen Fachmann auf dem Gebiet, zu dem diese Offenbarung gehört, verstanden wird. Obwohl alle Verfahren und Materialien, die den hier beschriebenen ähnlich oder gleichwertig sind, auch in der Praxis oder beim Testen der vorliegenden Offenbarung verwendet werden können, ist hier nur eine begrenzte Anzahl der beispielhaften Verfahren und Materialien beschrieben.
  • Claims (26)

    1. Verfahren zum Komprimieren von Daten, umfassend: Erzeugen von Metadaten von einer N-Element-Datenstruktur, wobei das Erzeugen aufweist: Auswählen von M Elementen von der N-Element-Datenstruktur, wobei N größer als M ist; Bestimmen von Positionen der M Elemente in der N-Element-Datenstruktur; und Speichern der Positionen der M Elemente als die Metadaten; und Komprimieren der N-Element-Datenstruktur zu einer M-Element-Datenstruktur gemäß den Metadaten, wobei das Komprimieren aufweist: Erfassen von Werten der M Elemente von der N-Element-Datenstruktur entsprechend der Positionen; und Speichern der Werte der M Elemente in der M-Element-Datenstruktur.
    2. Verfahren nach Anspruch 1, wobei das Erzeugen unter Verwendung einer ersten Anweisung ausgeführt wird.
    3. Verfahren nach Anspruch 2, wobei das Erzeugen ein Bestimmen einer Startposition der N-Element-Datenstruktur in einer größeren Datenstruktur mittels eines Gruppenindex in der ersten Anweisung aufweist.
    4. Verfahren nach Anspruch 2 oder 3, wobei das Erzeugen darüber hinaus ein Bestimmen einer Startposition der Metadaten in einem Zielregister mittels eines Metadatenindex in der ersten Anweisung aufweist.
    5. Verfahren nach einem der Ansprüche 2 bis 4, wobei das Erzeugen ein Erhalten der N-Element-Datenstruktur, als eine Eingabe der ersten Anweisung, aufweist.
    6. Verfahren nach einem der Ansprüche 2 bis 5, wobei die erste Anweisung eine GENMETADATA-Anweisung ist.
    7. Verfahren nach einem der Ansprüche 2 bis 6, wobei das Auswählen abhängig von einer Funktion in der ersten Anweisung ist, welche Werte von N Elementen in der N-Element-Datenstruktur miteinander vergleicht.
    8. Verfahrensanspruch 7, wobei die Funktion eine MAX-Funktion oder eine MAXABS-Funktion ist.
    9. Verfahren nach einem der vorhergehenden Ansprüche, wobei das Komprimieren unter Verwendung einer zweiten Anweisung ausgeführt wird.
    10. Verfahren nach Anspruch 9, wobei das Komprimieren ein Bestimmen einer Startposition der N-Element-Datenstruktur in einer größeren Datenstruktur mittels eines Gruppenindex in der zweiten Anweisung aufweist.
    11. Verfahren nach Anspruch 9 oder 10, wobei das Komprimieren ein Bestimmen einer Startposition der Metadaten in einem Ursprungsregister mittels eines Metadatenindex in der zweiten Anweisung aufweist.
    12. Verfahren nach einem der Ansprüche 9 bis 11, wobei das Komprimieren ein Erhalten der Metadaten und der N-Element-Datenstruktur, als eine Eingabe der zweiten Anweisung, aufweist.
    13. Verfahren nach einem der Ansprüche 9 bis 12, wobei die zweite Anweisung eine GATHER-Anweisung ist.
    14. Verfahren nach einem der vorhergehenden Ansprüche, wobei: die N-Element-Datenstruktur ein N-Element-Vektor ist, und die M-Element-Datenstruktur ein M-Element-Vektor ist; oder die N-Element-Datenstruktur ein N-Element-Tensor ist, und die M-Element-Datenstruktur ein M-Element-Tensor ist.
    15. Verfahren nach einem der vorhergehenden Ansprüche, wobei M gleich 2 ist und N gleich 4 ist.
    16. Verfahren nach einem der vorhergehenden Ansprüche, darüber hinaus ein Wiederholen des Erzeugens und des Komprimierens umfassend, um die N-Element-Datenstruktur in eine P-Element-Datenstruktur zu komprimieren, wobei P kleiner als M ist.
    17. Verfahren nach einem der vorhergehenden Ansprüche, wobei das Erzeugen und das Komprimieren unter Verwendung einer einzigen Anweisung ausgeführt werden.
    18. System zum Komprimieren von Daten, umfassend: einen Speicher; und mindestens einen Prozessor, welcher kommunikationstechnisch mit dem Speicher gekoppelt ist, wobei der mindestens eine Prozessor ausgestaltet ist, um ein Verfahren nach einem der Ansprüche 1 bis 17 auszuführen.
    19. System nach Anspruch 18, wobei das Speichern der Positionen ein Bestimmen einer Startposition der Metadaten in einem Zielregister mittels eines Metadatenindex in der ersten Anweisung aufweist.
    20. System nach Anspruch 18 oder 19, wobei der mindestens eine Prozessor ausgestaltet ist, um die N-Element-Datenstruktur durch Ausführen einer zweiten Anweisung zu komprimieren.
    21. System nach Anspruch 20, wobei das Erfassen ein Bestimmen einer Startposition der N-Element-Datenstruktur in einer größeren Datenstruktur mittels eines Gruppenindex in der zweiten Anweisung aufweist.
    22. System nach Anspruch 20 oder 21, wobei das Erfassen ein Bestimmen einer Startposition der Metadaten in einem Ursprungsregister mittels eines Metadatenindex in der zweiten Anweisung aufweist.
    23. System nach Anspruch 22, wobei der mindestens eine Prozessor darüber hinaus ausgestaltet ist, um die Metadaten und die N-Element-Datenstruktur, als eine Eingabe der zweiten Anweisung, zu erhalten.
    24. System nach Anspruch 22 oder 23, wobei die zweite Anweisung eine GATHER-Anweisung ist.
    25. System nach einem der Ansprüche 18 bis 24, wobei M gleich 2 ist und N gleich 4 ist.
    26. System nach einem der Ansprüche 18 bis 25, wobei: die N-Element-Datenstruktur ein N-Element-Vektor ist, und die M-Element-Datenstruktur ein M-Element-Vektor ist; oder die N-Element-Datenstruktur ein N-Element-Tensor ist, und die M-Element-Datenstruktur ein M-Element-Tensor ist.
    DE102020103414.8A 2019-05-21 2020-02-11 Kompressionsverfahren für datenstrukturen, die für künstliche neuronale netze geeignet sind Pending DE102020103414A1 (de)

    Applications Claiming Priority (4)

    Application Number Priority Date Filing Date Title
    US201962850727P 2019-05-21 2019-05-21
    US62/850,727 2019-05-21
    US16/426,303 2019-05-30
    US16/426,303 US11489541B2 (en) 2019-05-21 2019-05-30 Compression techniques for data structures suitable for artificial neural networks

    Publications (1)

    Publication Number Publication Date
    DE102020103414A1 true DE102020103414A1 (de) 2020-11-26

    Family

    ID=73052732

    Family Applications (1)

    Application Number Title Priority Date Filing Date
    DE102020103414.8A Pending DE102020103414A1 (de) 2019-05-21 2020-02-11 Kompressionsverfahren für datenstrukturen, die für künstliche neuronale netze geeignet sind

    Country Status (3)

    Country Link
    US (1) US11489541B2 (de)
    CN (1) CN111985636A (de)
    DE (1) DE102020103414A1 (de)

    Families Citing this family (2)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    JP2021129143A (ja) * 2020-02-10 2021-09-02 キオクシア株式会社 デコード装置
    CN114723033B (zh) * 2022-06-10 2022-08-19 成都登临科技有限公司 数据处理方法、装置、ai芯片、电子设备及存储介质

    Family Cites Families (2)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US9253164B2 (en) * 2011-09-12 2016-02-02 Microsoft Technology Licensing, Llc Distribution of portions of content
    US11379420B2 (en) 2019-03-08 2022-07-05 Nvidia Corporation Decompression techniques for processing compressed data suitable for artificial neural networks

    Also Published As

    Publication number Publication date
    US11489541B2 (en) 2022-11-01
    US20200373941A1 (en) 2020-11-26
    CN111985636A (zh) 2020-11-24

    Similar Documents

    Publication Publication Date Title
    EP0689694B1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
    DE60010420T2 (de) Automatisches Regressionstesten von Arbeitsplatz-Software
    DE112013001747T5 (de) Optimieren des Verbindens von Anweisungen
    DE112018004693T5 (de) Verbessern der effizienz eines neuronalen netzes
    EP1975821A2 (de) Verfahren zur digitalen Speicherung von Daten auf einem Datenspeicher mit beschränktem verfügbarem Speicherplatz
    AT512977B1 (de) Methode zur Ermittlung eines Modells einer Ausgangsgröße eines technischen Systems
    DE112013001735T5 (de) Optimieren des Verbindens von Anweisungen
    DE102020103414A1 (de) Kompressionsverfahren für datenstrukturen, die für künstliche neuronale netze geeignet sind
    DE3018508C2 (de) Sprachanalysiervorrichtung
    DE112019003326T5 (de) Speichererweiterte neuronale netzwerkarchitekturen eines codierers-decodierers
    DE112018006377T5 (de) Verschmelzen spärlich besetzter kernels zur approximation eines vollen kernels eines neuronalen faltungsnetzes
    DE112020003431T5 (de) Automatisches umwandeln eines programms, das in einer prozeduralen programmiersprache geschrieben ist, in einen datenflussgraphen, sowie zugehörige systeme und verfahren
    EP1347599B1 (de) Verfahren und Protokolltester zum Dekodieren gemäss einer Protokollbeschreibung kodierter Daten
    DE3421737A1 (de) Vorrichtung zur erfassung von operandenueberlappungen
    DE102016223484B4 (de) Bestimmen von Ähnlichkeiten in Computersoftwarecodes zur Leistungsanalyse
    DE102019112186A1 (de) Doppelladebefehl
    EP3812949A1 (de) Konfigurierbarer digitaler zwilling
    DE102016208178A1 (de) Softwaresegmentierungsverfahren, Softwaresegmentierungsvorrichtung und fahrzeugeigene Vorrichtung
    DE102016113968A1 (de) Prozessor zur korrelationsbasierter Endlosschleifenerkennung
    WO2010034548A1 (de) Testmodul und verfahren zum testen einer o/r-abbildungs-middleware
    DE102018118374A1 (de) Zugreifen auf Prolog- und Epilogdaten
    EP2682866B1 (de) Verfahren zur Umsetzung von Datenformaten
    DE102019214436A1 (de) Verfahren, Vorrichtung und Computerprogramm zum Betreiben eines künstlichen neuronalen Netzes
    DE202018006901U1 (de) Techniken zur dynamischen Definition eines Datensatzformats
    DE102014211586B3 (de) Verwendung von Abhängigkeitsdatensätzen bei der Bereitstellung und/oder Überprüfung von MR-Messsequenzen

    Legal Events

    Date Code Title Description
    R012 Request for examination validly filed