DE112020004266T5 - Kompressionsunterstützungsanweisungen - Google Patents

Kompressionsunterstützungsanweisungen Download PDF

Info

Publication number
DE112020004266T5
DE112020004266T5 DE112020004266.9T DE112020004266T DE112020004266T5 DE 112020004266 T5 DE112020004266 T5 DE 112020004266T5 DE 112020004266 T DE112020004266 T DE 112020004266T DE 112020004266 T5 DE112020004266 T5 DE 112020004266T5
Authority
DE
Germany
Prior art keywords
vector
operand
register
bit
instruction
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
DE112020004266.9T
Other languages
English (en)
Inventor
Eric Bainville
Ali Sazegari
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.)
Apple Inc
Original Assignee
Apple Inc
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 Apple Inc filed Critical Apple Inc
Publication of DE112020004266T5 publication Critical patent/DE112020004266T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • 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
    • 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/3082Vector coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

In einer Ausführungsform unterstützt ein Prozessor eine oder mehrere Kompressionsunterstützungsanweisungen, die in Kompressionssoftware verwendet werden können, um die Leistung des Prozessors beim Durchführen einer Kompression/Dekompression zu verbessern. Das heißt, die Kompressions-/Dekompressionsaufgabe kann schneller durchgeführt werden und weniger Strom verbrauchen, wenn die Kompressionsunterstützungsanweisungen eingesetzt werden, als wenn dies nicht der Fall ist. In einigen Fällen können die Kosten eines effektiveren, komplexeren Kompressionsalgorithmus auf die Kosten eines weniger effektiven, weniger komplexen Kompressionsalgorithmus reduziert werden.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Hierin beschriebene Ausführungsformen beziehen sich auf Prozessoren und insbesondere auf Kompressionsunterstützungsanweisungen in Prozessoren, um die Kompressions-/Dekompressionsleistung und Energieeffizienz zu verbessern.
  • Beschreibung des Stands der Technik
  • Kompression wird aus vielfältigen Gründen in Rechenvorrichtungen verwendet. Zum Beispiel können Software-Downloads zur Lieferung über ein Netzwerk komprimiert werden und können auf der Zielrechenvorrichtung zur Installation dekomprimiert werden. In einigen Fällen, wie tragbaren Rechenvorrichtungen (z. B. Smartphones, tragbaren digitalen Assistenten, Tablet-Computern usw.), kann die Software dekomprimiert, installiert, dann zur Speicherung auf der Vorrichtung erneut komprimiert werden. Das Speichern verschiedener Software in komprimierter Form kann Speicherplatz auf der Vorrichtung sparen, der stärker begrenzt sein kann als die Speicherung in größeren Rechenvorrichtungen, wie Laptops, Desktops, Servern usw.
  • Kompression/Dekompression ist in erster Linie in Software implementiert, und somit können die Kosten hinsichtlich Leistung (und Stromverbrauch auf tragbaren Vorrichtungen bei begrenzten Stromversorgungen, wie Batterien) signifikant sein. Die Wirksamkeit eines Kompressionsalgorithmus wird im Allgemeinen als das Verhältnis der Größe des unkomprimierten Originals zu der Größe des komprimierten Ergebnisses gemessen, das als Kompressionsverhältnis bezeichnet wird. Leider korreliert die Wirksamkeit eines gegebenen Kompressionsalgorithmus im Allgemeinen mit seiner Komplexität, und somit geht Wirksamkeit auf Kosten von Leistung (z. B. Latenz) und Strom.
  • KURZDARSTELLUNG
  • In einer Ausführungsform unterstützt ein Prozessor eine oder mehrere Kompressionsunterstützungsanweisungen, die in Kompressionssoftware verwendet werden können, um die Leistung des Prozessors beim Durchführen einer Kompression/Dekompression zu verbessern. Das heißt, die Kompressions-/Dekompressionsaufgabe kann schneller durchgeführt werden und weniger Strom verbrauchen, wenn die Kompressionsunterstützungsanweisungen eingesetzt werden, als wenn dies nicht der Fall ist. In einigen Fällen können die Kosten eines effektiveren, komplexeren Kompressionsalgorithmus auf die Kosten eines weniger effektiven, weniger komplexen Kompressionsalgorithmus reduziert werden.
  • Figurenliste
  • Die folgende detaillierte Beschreibung nimmt Bezug auf die begleitenden Zeichnungen, die nun kurz beschrieben werden.
    • 1 ist ein Blockdiagramm einer Ausführungsform einer Dekompression basierend auf einem Finite State Entropy-Kompressionsalgorithmus (FSE-Kompressionsalgorithmus).
    • 2 ist ein Blockdiagramm einer Ausführungsform einer Dekompressionsoptimierung basierend auf dem FSE-Algorithmus, bei dem mehrere verschachtelte FSE-Symbolströme denselben Decoder und Bitstrom gemeinsam nutzen.
    • 3 ist ein Blockdiagramm einer weiteren Ausführungsform einer Dekompressionsoptimierung basierend auf dem FSE-Algorithmus, bei dem mehrere verschachtelte FSE-Symbol- und Wertströme dieselbe Decodertabelle gemeinsam nutzen.
    • 4 ist ein Blockdiagramm, das eine Ausführungsform einer Bitstapelleseoperation veranschaulicht.
    • 5 ist ein Blockdiagramm, das eine Ausführungsform einer Bitstapelschreiboperation veranschaulicht.
    • 6 ist ein Blockdiagramm, das Registereingänge und -ausgänge für eine Ausführungsform einer Top-Dekompressionsunterstützungsanweisung veranschaulicht.
    • 7 ist ein Blockdiagramm, das Registereingänge und -ausgänge für eine Ausführungsform einer Pop-Dekompressionsunterstützungsanweisung veranschaulicht.
    • 8 ist ein Blockdiagramm, das Registereingänge und -ausgänge für eine Ausführungsform einer Create-Kompressionsunterstützungsanweisung veranschaulicht.
    • 9 ist ein Blockdiagramm, das Registereingänge und -ausgänge für eine Ausführungsform einer Concat-Kompressionsunterstützungsanweisung veranschaulicht.
    • 10 ist ein Blockdiagramm einer Ausführungsform eines Systems, einschließlich eines Prozessors.
    • 11 ist ein Blockdiagramm einer Ausführungsform einer in 10 gezeigten Vektorausführungseinheit.
    • 12 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform des Prozessors zum Ausführen einer Top-Anweisung veranschaulicht.
    • 13 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform des Prozessors zum Ausführen einer Pop-Anweisung veranschaulicht.
    • 14 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform des Prozessors zum Ausführen einer Create-Anweisung veranschaulicht.
    • 15 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform des Prozessors zum Ausführen einer Concat-Anweisung veranschaulicht.
  • Während in dieser Offenbarung beschriebene Ausführungsformen verschiedenen Modifikationen und alternativen Formen unterliegen können, sind spezifische Ausführungsformen davon beispielhaft in den Zeichnungen gezeigt und werden hierin detailliert beschrieben. Es versteht sich jedoch, dass die Zeichnungen und die detaillierte Beschreibung dazu die Ausführungsformen der offenbarten bestimmten Form nicht einschränken sollen, sondern dass im Gegenteil alle Modifikationen, Äquivalente und Alternativen, die innerhalb des Wesens und Schutzumfangs der beiliegenden Ansprüche sind, abgedeckt werden sollen. Die hierin verwendeten Überschriften dienen nur organisatorischen Zwecken und sollen nicht verwendet werden, um den Schutzumfang der Beschreibung einzuschränken. Wie in dieser Anmeldung verwendet, wird das Wort „können“ mit ermöglichender Bedeutung (d. h. im Sinne von „das Potential aufweisend zu“) und nicht mit zwingender Bedeutung (d. h. im Sinne von „müssen“) verwendet. Gleichermaßen haben die Wörter „einschließen“, „einschließlich“ und „schließt ein“ die Bedeutung „einschließlich, ohne darauf beschränkt zu sein“. Wie hierin verwendet, werden die Begriffe „erster“, „zweiter“ usw. als Bezeichnungen für nachgestellte Nomina verwendet, und sie implizieren keine Art von Reihenfolge (z. B. räumlich, zeitlich, logisch usw.), sofern nicht ausdrücklich angegeben.
  • Innerhalb dieser Offenbarung können verschiedene Entitäten (die verschiedentlich als „Einheiten“, „Schaltungen“, andere Komponenten usw. bezeichnet werden können) als „konfiguriert“, um eine oder mehrere Aufgaben oder Operationen durchzuführen, beschrieben oder beansprucht werden. Diese Formulierung - [Entität], die konfiguriert ist, [um eine oder mehrere Aufgaben durchzuführen] - wird hierin verwendet, um sich auf eine Struktur (d. h. etwas Physisches, wie eine elektronische Schaltung) zu beziehen. Insbesondere wird diese Formulierung verwendet, um anzugeben, dass diese Struktur angeordnet ist, um die eine oder die mehreren Aufgaben während des Betriebs durchzuführen. Eine Struktur kann als „konfiguriert, um“ eine Aufgabe durchzuführen, bezeichnet werden, selbst wenn die Struktur aktuell nicht betrieben wird. Eine „Taktschaltung, die konfiguriert ist, um ein Ausgangstaktsignal zu erzeugen“ soll zum Beispiel eine Schaltung abdecken, die diese Funktion während des Betriebs durchführt, selbst wenn die betreffende Schaltung aktuell nicht verwendet wird (z. B. keine Stromversorgung damit verbunden ist). Somit bezieht sich eine Entität, die als „konfiguriert,“ um eine Aufgabe durchzuführen, beschrieben oder angegeben wird, auf etwas Physisches, wie eine Vorrichtung, eine Schaltung, einen Speicher, der Programmanweisungen speichert, die ausführbar sind, um die Aufgabe zu implementieren, usw. Diese Phrase wird hierin nicht verwendet, um auf etwas nicht Greifbares Bezug zu nehmen. Im Allgemeinen kann die Schaltlogik, die die Struktur entsprechend „konfiguriert, um“ bildet, Hardware-Schaltungen einschließen. Die Hardware-Schaltungen können jede Kombination von Schaltlogik kombinatorischer Logik, getakteten Speicherungsvorrichtungen, wie Flops, Registern, Latches usw., endlichen Automaten, Speicher, wie statischem Speicher mit wahlfreiem Zugriff oder eingebettetem dynamischem Speicher mit wahlfreiem Zugriff, benutzerspezifisch gestalteter Schaltlogik, analoger Schaltlogik, programmierbaren Logikanordnungen usw. einschließen. In ähnlicher Weise können verschiedene Einheiten/Schaltungen/Komponenten der Einfachheit halber in der Beschreibung so beschrieben sein, dass sie eine Aufgabe oder Aufgaben durchführen. Solche Beschreibungen sollten so interpretiert werden, dass sie die Phrase „konfiguriert, um“ einschließen.
  • Der Begriff „konfiguriert, um“ soll nicht „konfigurierbar zu“ bedeuten. Eine unprogrammierte FPGA würde zum Beispiel nicht als „konfiguriert, um“ eine bestimmte Funktion durchzuführen, betrachtet werden, obwohl es „konfigurierbar zum“ Durchführen dieser Funktion sein kann. Nach geeigneter Programmierung kann die FPGA dann als „konfiguriert“, um diese Funktion durchzuführen, bezeichnet werden.
  • In einer Ausführungsform können Hardware-Schaltungen gemäß dieser Offenbarung durch Codieren der Beschreibung der Schaltung in einer Hardware-Beschreibungssprache (HDL), wie Verilog oder VHDL, implementiert werden. Die HDL-Beschreibung kann gegenüber einer Bibliothek von Zellen synthetisiert werden, die für eine gegebene Technologie zur Herstellung integrierter Schaltungen gestaltet ist, und kann aus Gründen der Zeittaktung, Energie und anderen Gründen modifiziert werden, um zu einer endgültigen Gestaltungsdatenbank zu führen, die an eine Gießerei übermittelt werden kann, um Masken zu erzeugen und letztendlich die integrierte Schaltung zu produzieren. Einige Hardware-Schaltungen oder Abschnitte davon können auch in einem schematischen Editor benutzerspezifisch gestaltet und zusammen mit synthetisierter Schaltlogik in der Gestaltung der integrierten Schaltung erfasst werden. Die integrierten Schaltungen können Transistoren einschließen und können ferner andere Schaltungselemente (z. B. passive Elemente, wie Kondensatoren, Widerstände, Spulen usw.) einschließen und eine Verbindung zwischen den Transistoren und Schaltungselementen herstellen. Einige Ausführungsformen können mehrere integrierte Schaltungen implementieren, die miteinander gekoppelt sind, um die Hardware-Schaltungen zu implementieren, und/oder diskrete Elemente können in einigen Ausführungsformen verwendet werden. Alternativ kann die HDL-Gestaltung zu einer programmierbaren Logikanordnung, wie einer anwenderprogrammierbaren Gatteranordnung (FPGA), synthetisiert werden und kann in der FPGA implementiert werden.
  • Wie hierin verwendet, wird der Begriff „basierend auf“ oder „abhängig von“ verwendet, um einen oder mehrere Faktoren zu beschreiben, die eine Bestimmung beeinflussen. Dieser Begriff schließt nicht die Möglichkeit aus, dass zusätzliche Faktoren die Bestimmung beeinflussen können. Das heißt, eine Bestimmung kann ausschließlich auf angegebenen Faktoren basieren oder auf den angegebenen Faktoren sowie anderen, nicht angegebenen Faktoren basieren. Man betrachte die Phrase „A basierend auf B bestimmen“. Diese Phrase gibt an, dass B ein Faktor ist, der verwendet wird, um A zu bestimmen, oder der die Bestimmung von A beeinflusst. Diese Phrase schließt nicht aus, dass die Bestimmung von A auch auf einem anderen Faktor, wie C, basieren kann. Diese Phrase soll auch eine Ausführungsform abdecken, in der A ausschließlich basierend auf B bestimmt wird. Wie hierin verwendet, ist die Phrase „basierend auf“ gleichbedeutend mit der Phrase „basierend mindestens teilweise auf“.
  • Diese Beschreibung schließt Bezugnahmen auf verschiedene Ausführungsformen ein, um anzugeben, dass sich die vorliegende Offenbarung nicht auf eine bestimmte Implementierung beziehen soll, sondern vielmehr auf eine Reihe von Ausführungsformen, die innerhalb des Wesens der vorliegenden Offenbarung, einschließlich der beiliegenden Ansprüche, liegen. Besondere Merkmale, Strukturen oder Eigenschaften können auf jegliche geeignete Weise kombiniert werden, die mit dieser Offenbarung im Einklang steht.
  • Diese Patentschrift kann die Wörter „ein“ oder „eine“, um sich auf ein Element zu beziehen, oder „der“, „die“, „das“, um sich auf das Element zu beziehen, verwenden. Diese Wörter sollen nicht bedeuten, dass nur eine Instanz des Elements vorhanden ist. In verschiedenen Ausführungsformen kann mehr als eine vorhanden sein. Somit sollten „ein“, „eine“ und „der“, „die“, „das“, als „ein/e/s oder mehrere“ interpretiert werden, sofern nicht ausdrücklich als nur einer/eine/eines beschrieben.
  • Diese Patentschrift kann verschiedene Komponenten, Einheiten, Schaltungen usw. als gekoppelt beschreiben. In einigen Ausführungsformen können die Komponenten, Einheiten, Schaltungen usw. gekoppelt sein, wenn sie elektrisch gekoppelt sind (z. B. direkt verbunden oder durch eine oder mehrere andere Schaltungen indirekt verbunden) und/oder kommunikativ gekoppelt sind.
  • DETAILLIERTE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Wie vorstehend erwähnt, wird ein Prozessor offenbart, der verschiedene Ausführungsformen von Kompressionsunterstützungsanweisungen implementiert. Im Allgemeinen kann eine Kompressionsunterstützungsanweisung eine Anweisung sein, die dazu ausgelegt ist, die Leistung des Prozessors beim Durchführen einer Kompression und/oder Dekompression zu verbessern. Somit kann eine Kompressionsunterstützungsanweisung in einigen Fällen eine Anweisung sein, die voraussichtlich nur bei einer Dekompression verwendet wird. In anderen Fällen kann eine Kompressionsunterstützungsanweisung voraussichtlich nur bei einer Kompression oder sowohl bei einer Kompression als auch bei einer Dekompression verwendet werden.
  • Zur Veranschaulichung der Kompressionsunterstützungsanweisungen und ihrer Anwendung sind mehrere Implementierungen des Finite State Entropy-Kompressionsalgorithmus (FSE-Kompressionsalgorithmus) gezeigt. Während FSE als Beispiel verwendet wird, kann ein Mechanismus, der einen oder mehrere Bitströme oder Bitstapel als Teil der Kompression einsetzt, von den nachstehend beschriebenen Kompressionsunterstützungsanweisungen profitieren.
  • 1 ist ein Blockdiagramm einer Ausführungsform einer Dekompression von FSEkomprimierten Daten. Wie in 1 gezeigt, schließen die Daten eine Tabelle 10 und einen Bitstrom 12 ein. Das heißt, beim Komprimieren der Daten wurden der FSE-Kompressionsalgorithmus, die Tabelle 10 und der Bitstrom 12 erzeugt. Ein Anfangszustand kann verwendet werden, um einen anfänglichen Eintrag in der Tabelle zu suchen. Das heißt, der Zustand (veranschaulicht bei Bezugszeichen 16) kann ein Index in die Tabelle 10 sein. Jeder Eintrag kann Daten einschließen, die den bei Bezugszeichen 14 gezeigten ähnlich sind. Insbesondere kann der Eintrag eine Basis, ein Symbol und eine Anzahl von Bits (n) einschließen. Das Symbol ist Teil der Ausgangsdaten und kann bereitgestellt werden, um mit zuvor gelesenen Symbolen zusammengefügt zu werden, um einen Ausgangsdatenstrom zu erzeugen, der den ursprünglichen Daten entspricht. Das heißt, das Symbol ist Teil der ursprünglichen Daten und kann mit dem Ende des Datenstroms verkettet werden (oder kann, im Fall des Anfangszustands, den Datenstrom initialisieren). Die Anzahl von Bits (n) kann eine Anzahl von Bits angeben, die von dem Bitstrom 12 verbraucht werden sollen, um einen Deltawert bereitzustellen, der zur Basis addiert werden soll, um den nächsten Zustand zu erzeugen. Der nächste Zustand ersetzt den Anfangszustand und sucht einen Tabelleneintrag, aus dem das nächste Symbol und der nächste Zustand erzeugt werden können. Durch fortlaufendes Wiederholen der Erzeugung des nächsten Zustands, der Suche und der Symbolausgabe kann ein Symbolstrom erzeugt werden, der den unkomprimierten ursprünglichen Daten entspricht. An einem bestimmten Punkt kann ein Eintrag in der Tabelle angeben, dass das Ende der Daten erreicht wurde. Alternativ können die unkomprimierten Daten eine feste Größe aufweisen und somit können die Erzeugung des nächsten Zustands, die Suche und die Symbolausgabe eine feste Anzahl von Malen erfolgen (unter Annahme eines Symbols mit fester Größe).
  • Die Ausführungsform von 1 ist ein ziemlich serieller Prozess und kann somit relativ langsam sein. Verschiedene Ausführungsformen können einen paralleleren Betrieb durchführen. Zum Beispiel können in 2 4 Zustände parallel gesucht werden. Die vier Zustände 24 können vier verschachtelten FSE-Symbolströmen entsprechen, die dieselbe Decodertabelle 26 gemeinsam nutzen. Das heißt, die Symbolströme können unabhängig voneinander, aber in dem Bitstapel 20 verschachtelt sein. Andere Ausführungsformen können wie gewünscht mehr oder weniger parallele Zustände/Symbolströme implementieren. Jeder Zustand 24 kann einen Tabelleneintrag 22 aus einer Tabelle 26 lesen. Jeder Tabelleneintrag 22 kann dem in 1 gezeigten Tabelleneintrag 14 ähnlich sein. Jeder der parallel gelesenen 4 Tabelleneinträge 22 kann ein Symbol bereitstellen, das mit dem entsprechenden Ausgangssymbolstrom verkettet werden kann (oder um die entsprechenden Ausgangssymbolströme für die Anfangszustände 24 zu initialisieren). Jeder Eintrag verbraucht seine angegebene Anzahl von Bits (n) aus dem Bitstapel 20 (wobei der Eintrag oben in 2 die Bits oben im Bitstapel 20 liest, der nächste Eintrag nach unten die nächsten Bits aus dem Bitstapel 20 liest, usw.). Somit kann der Bitstapel 20, wie vorstehend erwähnt, verschachtelte Bitfelder für die Symbolströme aufweisen. Die Ergebnis-Deltas werden den Basen von dem jeweiligen Eintrag 22 hinzugefügt, um die nächsten Zustände 24 zu erzeugen.
  • 3 veranschaulicht eine weitere Ausführungsform einer parallelisierten Form des FSE-Algorithmus. In der Ausführungsform von 3 können, anstelle des Speicherns der Symbole direkt in einer Tabelle 30, die Symbole aus einem Basiswert erzeugt werden, der aus einer Tabelle 30 (der Wertbasis oder VBase) gelesen wird, und ein Delta, das von einem anderen Bitstapel 32 (dem Wertbitstapel oder VBit-Stapel 32) gelesen wird, kann verwendet werden, um die Symbole zu erzeugen. Das heißt, jedes Symbol kann einem Wertebereich entsprechen, der bei VBase beginnt, und der bestimmte Wert an einem gegebenen Punkt im Decodierprozess wird durch Lesen des Deltas aus dem VBit-Stapel 32 und Hinzufügen von diesem zur VBase bestimmt. Die Tabelleneinträge 34 können somit eine VBase und eine Anzahl von Bits (nv) einschließen, die aus dem VBit-Stapel 32 zu verbrauchen ist, um als Deltas (VDeltas) verwendet zu werden, die zur VBase hinzuzufügen sind, um das Ausgangssymbol aus dem Eintrag zu erzeugen. Zusätzlich kann jeder Eintrag 34 eine Zustandsbasis (SBase) und eine Anzahl von Bits (ns) einschließen, die aus einem Zustandsbitstapel 36 (SBit-Stapel 36) zu lesen sind, um Deltas (SDeltas) zu bilden, die von jedem Eintrag zur SBase hinzuzufügen sind, um die nächsten Zustände 38 zu erzeugen. In einer Ausführungsform können der VBit-Stapel 32 und der SBit-Stapel 36 als ein einzelner Bitstapel implementiert sein, wobei die VBits und die SBits im Stapel verschachtelt sind. In noch anderen Ausführungsformen kann eine Kombination von Verschachteln von VBits und SBits in einem Stapel und Implementieren mehrerer Stapel verwendet werden. Zum Beispiel kann ein Satz von 16 Symbolströmen als 4 Sätze von 4 verschachtelten Symbolströmen (z. B. 4 Bitstapeln) dargestellt werden.
  • Eine Möglichkeit, die in 2 oder 3 gezeigte Dekompression in einem Prozessor durchzuführen, die Vektoranweisungen einschließt, wäre die Verwendung von Vektoroperationen. Wenn zum Beispiel Vektoren von 4 Vektorelementen von einem Prozessor unterstützt werden, könnten die Ausführungsformen von 2 und 3 die Tabellensuche, die Erzeugung des nächsten Zustands und die Symbolwerterzeugung unter Verwendung einer Vektoranweisung für jede Operation durchführen, die an der Tabellensuche, der Erzeugung des nächsten Zustands und der Symbolwerterzeugung beteiligt ist. Die Bitstapelleseoperationen können jedoch unter Verwendung von Standardvektoranweisungen schwieriger zu vektorisieren sein.
  • Im Allgemeinen führen Vektoroperationen eine angegebene Operation auf einer Vielzahl von Vektorelementen in einem oder mehreren Vektoroperanden parallel und unabhängig für jedes Vektorelement durch. Zum Beispiel kann eine Vektoradditionsoperation Vektorelemente in entsprechenden Positionen innerhalb der Vektoroperanden hinzufügen, wobei Summen als Vektorelemente eines Vektorergebnisoperanden erzeugt werden. Ein Vier-Elemente-Vektor würde die Vektorelemente VE0, VE1, VE2 und VE3 in der aufgelisteten Reihenfolge in angrenzenden Vektorelementpositionen innerhalb des Vektors aufweisen. Bei einer Vektoraddition würden die VE0-Elemente der Quelloperanden addiert, um das VE0-Element des Ergebnisoperanden zu erzeugen; die VE1-Elemente der Quellenoperanden würden addiert, um das VE1-Element des Ergebnisoperanden zu erzeugen; usw. Während ein Vier-Elemente-Vektor als ein Beispiel verwendet wird, können andere Ausführungsformen unterschiedliche Anzahlen von Vektorelementen pro Vektor einsetzen und/oder können mehrere Anzahlen von Vektorelementen pro Vektor unterstützen. Zum Beispiel könnte ein 128-Bit-Vektor-Registersatz 2 64-Bit-Vektorelemente, 4 32-Bit-Vektorelemente, 8 16-Bit-Vektorelemente und 16 8-Bit-Vektorelemente unterstützen. Verschiedene Vektoranweisungen können definiert werden, um die Vektorregister als Vektorelemente unterschiedlicher Größen zu verwenden.
  • Somit lassen sich Vektoroperationen/-anweisungen gut auf Vektorelementen durchführen, die die gleiche Größe aufweisen, und viele Operationen können parallel durchgeführt werden, um die Leistung von vektorisierbaren Algorithmen zu verbessern. Die Bitstapelleseoperationen (und entsprechende Bitstapelschreiboperationen während der Kompression) können jedoch Operationen variabler Größe sein. Jeder Bitstapellesevorgang kann eine beliebige Anzahl von Bits sein, von 1 (oder möglicherweise sogar 0 Bits) bis zur höchsten Anzahl von Bits, die durch den Algorithmus unterstützt wird. Zum Beispiel können in einer Ausführungsform des Algorithmus in 3 Bitstapellesevorgänge von 1 bis 32 Bits unterstützt werden. Das Implementieren des Bitstapels als Elemente fester Größe (z. B. 32 Bits im Beispiel) würde das für den Algorithmus erreichbare Kompressionsverhältnis signifikant reduzieren und wäre somit kontraproduktiv.
  • Um die Verwendung von Vektoroperationen zu verbessern, um eine Kompression und Dekompression für Kompressionsalgorithmen durchzuführen, die den in 1-3 gezeigten ähnlich sind, wurden Kompressionsunterstützungsanweisungen definiert, um die Bitstapellese- und -schreiboperationen durchzuführen, Daten aus dem Bitstapel zu Vektorelementen (Bitstapellesevorgang) und von Vektorelementen zu gepackten Bitstapeldaten (Bitstapelschreibvorgang) zu übertragen.
  • 4-5 veranschaulichen für eine Ausführungsform die Bitstapelleseoperation und die Bitstapelschreiboperation in und aus Vektorregister(n). Die Kompressionsunterstützungsanweisungen wurden definiert, um den Prozessor (bei Ausführung der Kompressionsunterstützungsanweisungen) zu veranlassen, die Daten in einem oder mehreren Vektorregistern zu interpretieren, die Operanden der Anweisung als Bitstapeldaten und nicht als Vektorelemente speichern. Somit kann ein Abschnitt des Bitstapels in ein Vektorregister geladen und unter Verwendung der hierin definierten Kompressionsunterstützungsanweisungen verarbeitet werden. Als ein solcher Operand kann jedes Vektorregister angegeben werden; tatsächlich bewirkt das Codieren des Vektorregisters als einen bestimmten Operanden einer Kompressionsunterstützungsanweisung, dass der Prozessor die Registerdaten als Bitstapeldaten anstelle von Vektorelementen interpretiert.
  • 4 veranschaulicht eine Bitstapelleseoperation. Ein Abschnitt eines Bitstapels 40, einschließlich des oberen Teils des Bitstapels, ist in 4 gezeigt. Der obere Teil des Bitstapels kann sich in 4 links befinden und kann Deltas x3 (Stapeloberseite), x2 (neben Stapeloberseite), x1 und x0 sowie zusätzliche Werte unter diesen einschließen. Die Breiten von x3, x2, x1 und x0 in 4 variieren, um zu veranschaulichen, dass jeder Wert ein oder mehrere Bits ist und variieren kann. Ein erstes Vektorregister 42 weist vier Vektorelemente auf, in denen die Größen der oberen vier Deltas auf dem Stapel gespeichert sind (b3 entsprechend x3, b2 entsprechend x2 usw.). Das Register 42 kann aus den Feldern „n“ in 2 für einen gegebenen Tabellenlesevorgang, der auf einem Satz von nächsten Zuständen basiert, oder aus der abgelegten „nv“ oder „ns“ in 3 für einen gegebenen Tabellenlesevorgang geladen werden. Für die Ausführungsform von 3 können zwei Vektorregister verwendet werden, eines für „nv“ und eines für „ns“. Im Allgemeinen kann eine Vektorladeanweisung oder können Vektorladeanweisungen den Tabellenlesevorgang durchführen, und es kann zusätzliche Vektoranweisungen geben, um die Größenwerte in dem Register 42 zu isolieren, um den Bitstapellesevorgang durchzuführen.
  • Basierend auf den Größen in dem Register 42 können die Bitfelder x3, x2, x1 und x0 vom oberen Teil des Bitstapels in ein Ergebnisvektorregister 44 extrahiert werden, und der Bitstapel kann aktualisiert werden, um die extrahierten Bitfelder zu entfernen. Somit schließt der aktualisierte Stapel 46 in 4 die verbleibenden zusätzlichen Werte oben im Stapel ein. Die Stapel 40 und 46 können die Werte in einem Speicher veranschaulichen, so dass sich der obere Teil des Stapels in einem Speicher bewegt. Wenn der obere Teil des Stapels in ein Register geladen wird, wie nachstehend beschrieben wird, kann der Bitstapellesevorgang das Verschieben des neuen oberen Teils des Stapels, der in dem Register verbleibt, einschließen (z. B. so, dass das höchstwertige Bit oder MSB des Registers das Bit oben im Stapel aufweist).
  • Bitstapelleseoperationen können Teil des Dekompressionsprozesses sein. Das Erstellen des Bitstapels kann Bitstapelschreiboperationen einschließen, da der Kompressionsalgorithmus die Symbole bestimmt und die Tabelleneinträge und den Bitstapel erzeugt. 5 veranschaulicht eine Bitstapelschreiboperation.
  • Der anfängliche Bitstapel 48 in 5 schließt die zusätzlichen Werte oben im Stapel ein, ähnlich dem aktualisierten Bitstapel 46 in 4. Links vom oberen Teil des Bitstapels 48 in 4 ist ein Raum gezeigt, um zu veranschaulichen, wie mehr Bitfelder als Teil des Bitstapelschreibvorgangs in den Bitstapel gedrückt werden. Ein Vektorregister 50 kann mit Vektorelementen codiert sein, die der Größe jedes Bitfelds entsprechen (wobei b3 x3 entspricht, b2 x2 entspricht usw.). Ein weiteres Vektorregister 52 kann die Bitfelder als Vektorelemente (x3, x2 usw.) aufweisen. Die Vektorregister 50 und 52 können gemäß dem Kompressionsalgorithmus unter Verwendung anderer Vektoranweisungen berechnet werden. Die Bitstapelschreiboperation verkettet die Bitfelder x3, x2, x1 und x0, so dass sie im Bitstapel aneinander angrenzen, und schreibt die Bitfelder in den oberen Teil des Bitstapels, wodurch der in 5 gezeigte aktualisierte Bitstapel 54 erzeugt wird.
  • Um die in 4 veranschaulichte Bitstapelleseoperation zu implementieren, kann ein hierin beschriebener Prozessor ein Paar Kompressionsunterstützungsanweisungen einschließen. Diese Anweisungen werden hierin als „Top“ und „Pop“ bezeichnet. Die Top-Anweisung kann bei Ausführung bewirken, dass der Prozessor eine Vielzahl von Bitfeldern von einem oberen Teil des Bitstapels (der in einem Vektorregister gespeichert sein kann, wie nachstehend erörtert) in Vektorelemente eines Ergebnisvektorregisters extrahieren kann. Die Pop-Anweisung kann bei Ausführung bewirken, dass der Prozessor die Bitfelder vom oberen Teil des Stapels entfernt, wodurch der obere Teil des Stapels nach unten zum nächsten Satz von Bitfeldern bewegt wird, die nicht unter Verwendung einer Top-Anweisung extrahiert wurden.
  • 6 ist ein Blockdiagramm der Quelloperanden und des Ergebnisoperanden der Top-Anweisung für eine Ausführungsform. Oben in 6 ist eine Mnemonik für die Top-Anweisung mit einem Ergebnisvektorregister (RV), einem Quellstapelregister (SSR) und einem Quellgrößenvektorregister (SSV) gezeigt. Der Inhalt des Quellstapelregisters ist bei Bezugszeichen 60 veranschaulicht, der Inhalt des Quellgrößenvektorregisters ist bei Bezugszeichen 62 veranschaulicht und der Inhalt des Ergebnisvektorregisters nach Ausführung der Top-Anweisung ist bei Bezugszeichen 64 veranschaulicht.
  • Wie zuvor erwähnt, kann das Stapelregister ein Vektorregister sein, aber der Prozessor kann den Inhalt unterschiedlich interpretieren, indem das Register als Stapeloperand von einer der Kompressionsunterstützungsanweisungen angegeben wird. Wenn das Vektorregister Bitstapeldaten speichert, kann das Register ein Bitstapelfeld 66 und ein Bitzählwertfeld 68 einschließen. Das Bitstapelfeld kann in dieser Ausführungsform eine Vielzahl von Bits sein, wobei sich das MSB der Vielzahl von Bits im MSB des Registers befindet. Das MSB der Vielzahl von Bits kann das obere Bit des Bitstapels sein. Das Bitzählwertfeld 68 kann die Anzahl von Bits sein, die sich aktuell im Stapelregister befinden (z. B. die Anzahl der Vielzahl von Bits im Bitstapelfeld 66). In einer Ausführungsform kann das Vektorregister 128 Bits sein, und das Bitzählwertfeld kann 8 Bits sein. Somit kann das Bitstapelfeld 66 in dieser Ausführungsform bis zu 120 Bits sein. Andere Ausführungsformen können Vektorregister unterschiedlicher Größe implementieren und größere oder kleinere Bitstapelfelder und Bitzählwertfelder unterstützen.
  • Innerhalb des Bitstapelfelds 66 werden die Bitfelder x3, x2, x1 und x0 in 6 identifiziert. Die Bitfelder werden durch die Größen in dem Quellgrößenvektorregister 62 definiert. Insbesondere kann das Quellgrößenvektorregister 62 ein Vektor von Größen sein. Das heißt, die Größen können Zählwerte der Anzahl von Bits in den entsprechenden Bitfeldern sein. Die Größen können zum Beispiel ganze Zahlen sein. In der veranschaulichten Ausführungsform gibt es vier Vektorelemente in dem Quellgrößenvektor 62: Vektorelement 3 (VE3), VE2, VE1 und VE0. Jedes Vektorelement gibt eine Größe eines entsprechenden Bitfelds an. Somit kann das Bitfeld x3 die höchstwertigen b3 Bits des Bitstapelfelds 66 sein. Das Bitfeld x2 kann an das Bitfeld x3 angrenzen (z. B. kann das MSB des Bitfelds x2 an das niedrigstwertige Bit oder LSB des Bitfelds x3 angrenzen) und kann b2 Bits groß sein. Das Bitfeld x1 kann an das Bitfeld x2 angrenzen und kann b 1 Bits groß sein, und das Bitfeld x0 kann an das Bitfeld x1 angrenzen und kann b0 Bits groß sein. Die verbleibenden Bits in dem Bitstapelfeld 66 sind in 6 mit „p“ gekennzeichnet. Das MSB von p kann das MSB des nächsten Bitfelds im Bitstapel sein, der durch den nächsten Tabellenlesevorgang aus der Tabelle 26 oder 30 definiert werden kann. Während die Größenfelder in dem Register 62 so gezeigt sind, dass sie einen Abschnitt auf den Vektorelementen in 6 belegen, können die Felder bis maximal die gesamten Vektorelemente belegen. Des Weiteren können die extrahierten Bitfelder in dem Ergebnisvektorregister 64 bis zur vollen Größe der Vektorelemente sein, obwohl die Größe jedes einzelnen Felds durch das entsprechende Vektorelement aus dem Größenvektor gesteuert wird.
  • Basierend auf den Größenfeldern in dem Quellgrößenvektorregister 62 kann der Prozessor, der die Top-Anweisung ausführt, konfiguriert sein, um die Bitfelder in entsprechende Vektorelemente des Ergebnisvektorregisters 64 zu extrahieren. Somit ist x3 das Element VE3 des Ergebnisvektorregisters 64, das basierend auf der Größe b3 in VE3 des Quellgrößenvektorregisters 62 extrahiert wird; x2 ist das Element VE2 des Ergebnisvektorregisters 64, das basierend auf der Größe b2 in VE2 des Quellgrößenvektorregisters 62 extrahiert und auch von b3 beeinflusst wird, da x3 aus den MSBs des Bitstapelfelds 66 parallel extrahiert wird; x1 ist das Element VE1 des Ergebnisvektorregisters 64, das basierend auf der Größe b1 in VE1 des Quellgrößenvektorregisters 62 extrahiert und auch von b3 und b2 beeinflusst wird; und x0 ist das Element VE0 des Ergebnisvektorregisters 64, das basierend auf der Größe b0 in VE0 des Quellgrößenvektorregisters 62 extrahiert und auch von b3, b2 und b1 beeinflusst wird.
  • 7 ist ein Blockdiagramm der Quelloperanden und des Ergebnisoperanden der Pop-Anweisung für eine Ausführungsform. Oben in 7 ist eine Mnemonik für die Pop-Anweisung mit einem Ergebnisstapelregister (RSR), dem Quellstapelregister (SSR) und dem Quellgrößenvektorregister (SSV) gezeigt. Der Inhalt des Quellstapelregisters ist bei Bezugszeichen 60 veranschaulicht, der Inhalt des Quellgrößenvektorregisters ist bei Bezugszeichen 62 veranschaulicht und der Inhalt des Ergebnisstapelregisters nach Ausführung der Pop-Anweisung ist bei Bezugszeichen 70 veranschaulicht. Die Pop-Anweisung kann dazu bestimmt sein, mit der Top-Anweisung gepaart zu werden, um den Inhalt des Bitstapels anzupassen, um die Extraktion und den Verbrauch der Bitfelder x3, x2, x1 und x0 widerzuspiegeln. Somit sind die gleichen Quellregister 60 und 62 gezeigt. Die Pop-Anweisung kann jedoch im Allgemeinen mit beliebigen Quellregistern codiert werden.
  • Wie erwähnt, entfernt ein Prozessor, der die Pop-Anweisung ausführt, die Bits, die den Bitfeldern entsprechen, die von der Top-Anweisung verbraucht werden. Somit kann die Pop-Anweisung die Summe der Größenvektorelemente b3, b2, b1 und b0 aus dem Quellgrößenvektorregister 62 verwenden, um die Anzahl der zu entfernenden Bits zu identifizieren, beginnend mit dem MSB des Registers. Die verbleibenden Bits (p) können so verschoben werden, dass das MSB von p das MSB des Ergebnisstapelregisters 70 ist. Zusätzlich kann das Bitzählwertfeld (n') wie bei Bezugszeichen 72 veranschaulicht berechnet werden, indem die Summe der Größenvektorelemente von dem Bitzählwertfeld n in dem Quellstapelregister 60 subtrahiert wird.
  • Es wird angemerkt, dass das Ergebnisstapelregister 70 so codiert werden kann, dass es das gleiche Register wie das Quellstapelregister 60 in der Pop-Anweisung ist, wodurch das Quellstapelregister 60 für die nächste Stapelleseoperation unter Verwendung der Top-Anweisung aktualisiert wird, um den nächsten Satz von Bitfeldern zu extrahieren. Wenn das Bitstapelfeld im Stapelregister geleert ist, kann es über eine Ladeanweisung von dem verbleibenden Bitstapel im Speicher nachgefüllt werden. Eine Vektorladeanweisung kann verwendet werden, da die Vektorladeanweisung lediglich die Daten in das Register laden kann. Tatsächlich bewirkt die Verwendung des Registers als Stapelregisteroperand, dass der Prozessor den Inhalt als Bitstapel anstelle von Vektorelementen interpretiert.
  • Die Top- und Pop-Anweisungen können Kompressionsunterstützungsanweisungen sein, die für eine Dekompression nützlich sein können. In einigen Ausführungsformen können eine oder mehrere Kompressionsunterstützungsanweisungen auch für eine Kompression definiert werden. Insbesondere können Kompressionsunterstützungsanweisungen für die in 5 veranschaulichte Bitstapelschreiboperation definiert werden. In einer Ausführungsform sind zwei Kompressionsunterstützungsanweisungen definiert: „Create“ und „Concat“.
  • 8 ist ein Blockdiagramm der Quelloperanden und des Ergebnisoperanden der Create-Anweisung für eine Ausführungsform. Oben in 8 ist eine Mnemonik für die Create-Anweisung mit einem Ergebnisstapelregister (RSR), einem Quellstapelregister (SV) und einem Quellgrößenstapelregister (SSV) gezeigt. Verschiedene Vektoranweisungen können ausgeführt werden, um einen Vektor von Bitfeldern und entsprechenden Größen zu erzeugen, die sich in einem Quellvektorregister 80 und einem Quellgrößenvektorregister 82 befinden können, wenn die Bitstapelschreiboperation bereit für die Durchführung ist. Die Register 80 und 82 sind in 8 gezeigt und schließen Vektorelemente, die die Bitfelder (Register 80) speichern, und entsprechende Vektorelemente, die die Größen speichern (Register 82), ein. Somit ist VE3 des Registers 80 ein Bitfeld x3 der Größe b3 (VE3 des Registers 82), VE2 des Registers 80 ist ein Bitfeld x2 der Größe b2 (VE2-Feld des Registers 82) usw. Wenn ein Prozessor die Create-Anweisung ausführt, kann der Prozessor die Bitfelder aus dem Quellvektorregister 80 in die MSBs des Ergebnisstapelregisters 84 packen, die eine Vielzahl von Bits in den MSBs des Ergebnisstapelregisters 84 bilden, die die Bitfelder x3, x2, x1 und x0 in angrenzenden Bitpositionen innerhalb der Vielzahl von Bits einschließen (z. B. grenzt das LSB von x3 an das MSB von x2 an, das LSB von x2 grenzt an das MSB von x1 an usw.). Das Bitzählwertfeld „n“ kann als eine Summe der Größenvektorelemente aus dem Register 82 berechnet werden, wie bei Bezugszeichen 86 veranschaulicht.
  • Die Create-Anweisung erzeugt eine Vielzahl von Bits aus einem Vektor von Bitfeldern. Die Concat-Anweisung kann verwendet werden, um das Ergebnis der Create-Anweisung in eine frühere Version des Bitstapels einzufügen (z. B. Drücken der Vielzahl von Bits auf den Bitstapel). Die Concat-Anweisung kann auch in Bitstapelleseoperationen verwendet werden, um ein geleertes Bitstapelregister aus einem Speicher nachzufüllen. Zum Beispiel kann ein nächster Abschnitt des Bitstapels aus einem Speicher in ein Vektorregister geladen werden und kann in das Bitstapelregister verkettet werden, das für Bitstapellesevorgänge verwendet wird.
  • 9 ist ein Blockdiagramm der Quelloperanden und des Ergebnisoperanden der Concat-Anweisung für eine Ausführungsform. Oben in 9 ist eine Mnemonik für die Concat-Anweisung mit einem Ergebnisstapelregister (RSR), einem Quellstapelregister 1 (SSR1) und einem Quellstapelregister 2 (SSR2) gezeigt. Die Quellstapelregister 1 und 2 sind bei Bezugszeichen 88 bzw. 90 veranschaulicht. Jedes Quellstapelregister kann eine Vielzahl von Bits (p1 in Register 88, p2 in Register 90) einschließen, und ein Bitzählwertfeld eine Anzahl der Vielzahl von Bits (n1 in Register 88, n2 in Register 90) angeben. Der Prozessor, der die Concat-Anweisung ausführt, kann die p2-Bits mit den p1-Bits verketten, wodurch eine größere Vielzahl von Bits erzeugt wird, als in dem Ergebnisstapelregister 92 gezeigt. Der in dem Ergebnisstapelregister abgelegte Bitzählwert kann wie bei Bezugszeichen 94 gezeigt als die Summe der Bitzählwertfelder n1 und n2 berechnet werden.
  • Während die Ausführungsformen von 6-9 Vektoren mit 4 Vektorelementen veranschaulichen, können andere Ausführungsformen Vektoren mit mehr oder weniger Vektorelementen (z. B. 2, 8, 16 usw.) unterstützen. Zusätzlich, wie zuvor erwähnt, können einige Ausführungsformen mehrere Versionen der Vektoranweisungen unterstützen, einschließlich der Kompressionsunterstützungsanweisungen, um Vektoren mit unterschiedlichen Anzahlen von Vektorelementen zu verwenden (oder ein Operand, wie ein unmittelbares Feld, kann auswählen, wie viele Vektorelemente im Vektor für diese Anweisung sind).
  • 10 ist ein Blockdiagramm einer Ausführungsform eines Computersystems 100. Das Computersystem 100 schließt einen Prozessor 102, einen Level-zwei-Cache (L2-Cache) 106, einen Speicher 108 und eine Massenspeicherungsvorrichtung 110 ein. Wie gezeigt, schließt der Prozessor 102 einen Level-eins-Cache (L1-Cache) 104 und einen Ausführungskern 120, der mit dem L1-Cache 104 und einer Registerdatei 112 gekoppelt ist, ein. Der Ausführungskern 120 kann eine oder mehrere Ausführungseinheiten, wie eine Ganzzahl-Ausführungseinheit 114, eine Gleitkomma-Ausführungseinheit (FP-Ausführungseinheit) 116 und eine Vektorausführungseinheit 118 einschließen, wie gezeigt. Die Ausführungseinheiten 114, 116 und 118 können mit der Registerdatei 112 gekoppelt sein, und/oder es können mehrere Registerdateien 112 für unterschiedliche Typen von Operanden in verschiedenen Ausführungsformen vorhanden sein. Es wird angemerkt, dass, obwohl in dem Computersystem 100 spezifische Komponenten gezeigt und beschrieben sind, in alternativen Ausführungsformen unterschiedliche Komponenten und Anzahlen von Komponenten in dem Computersystem 100 vorhanden sein können. Zum Beispiel schließt das Computersystem 100 einen Teil der Speicherhierarchie (z. B. L2-Cache 104, Speicher 108 und/oder Massenspeicherungsvorrichtung 110) möglicherweise nicht ein. Es können mehrere Prozessoren ähnlich dem Prozessor 102 eingeschlossen sein. Es können mehrere Ausführungseinheiten eines gegebenen Typs (z. B. ganze Zahl, Gleitkomma, Vektor, Laden/Speichern usw.) eingeschlossen sein, und die Anzahl von Ausführungseinheiten eines gegebenen Typs kann sich von der Anzahl von Ausführungseinheiten eines anderen Typs unterscheiden. Zusätzlich, obwohl der L2-Cache 106 außerhalb des Prozessors 102 gezeigt ist, wird in Betracht gezogen, dass der L2-Cache 106 in anderen Ausführungsformen innerhalb des Prozessors 102 sein kann. Es wird ferner angemerkt, dass in solchen Ausführungsformen ein Level-drei-Cache (L3-Cache) (nicht gezeigt) verwendet werden kann. Außerdem kann das Computersystem 100 Grafikprozessoren, Videokarten, Videoerfassungsvorrichtungen, Benutzerschnittstellenvorrichtungen, Netzwerkkarten, optische Laufwerke und/oder andere Peripherievorrichtungen einschließen, die mit dem Prozessor 102 unter Verwendung eines Busses, eines Netzwerks oder eines anderen geeigneten Kommunikationskanals gekoppelt sind (alle der Einfachheit halber nicht gezeigt).
  • In verschiedenen Ausführungsformen kann der Prozessor 102 repräsentativ für einen Universalprozessor sein, der Rechenoperationen durchführt. Zum Beispiel kann es sich bei dem Prozessor 102 um eine Zentralverarbeitungseinheit (CPU), wie einen Mikroprozessor, einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (ASIC) oder eine feldprogrammierbare Gatteranordnung (FPGA), handeln. Der Prozessor 102 kann eine eigenständige Komponente sein oder kann in eine integrierte Schaltung mit anderen Komponenten (z. B. anderen Prozessoren oder anderen Komponenten in einem System-ona-Chip (SOC) usw.) integriert sein. Der Prozessor 102 kann eine Komponente in einem Multichip-Modul (MCM) mit anderen Komponenten sein.
  • Insbesondere kann der Prozessor 102, wie in 1 veranschaulicht, den Ausführungskern 120 einschließen. Der Ausführungskern 120 kann konfiguriert sein, um Anweisungen auszuführen, die in einer Anweisungssatzarchitektur definiert sind, die durch den Prozessor 102 implementiert wird. Der Ausführungskern 120 kann wie gewünscht beliebige mikroarchitektonische Merkmale und Implementierungsmerkmale aufweisen. Zum Beispiel kann der Ausführungskern 120 superskalare oder skalare Implementierungen einschließen. Der Ausführungskern 120 kann In-Order- oder Out-of-Order-Implementierungen und spekulative oder nicht spekulative Implementierungen einschließen. Der Ausführungskern 120 kann jede Kombination der vorstehenden Merkmale einschließen. Die Implementierungen können in einigen Ausführungsformen einen Mikrocode einschließen. Der Ausführungskern 120 kann eine Vielfalt von Ausführungseinheiten einschließen, wobei jede Ausführungseinheit konfiguriert ist, um Operationen verschiedener Art (z. B. die Ganzzahl-Ausführungseinheit 114, die Gleitkomma-Ausführungseinheit 116, die Vektorausführungseinheit 118, eine Laden/Speichern-Ausführungseinheit (nicht gezeigt) usw.) auszuführen. Der Ausführungskern 120 kann unterschiedliche Anzahlen von Pipeline-Stufen und verschiedene andere leistungssteigernde Merkmale, wie eine Verzweigungsvorhersage, einschließen. Der Ausführungskern 120 kann eine(n) oder mehrere von Anweisungsdecodiereinheiten, Planern oder Reservierungsstationen, Neuordnungspuffern, Speicherverwaltungseinheiten, E/A-Schnittstellen usw. einschließen.
  • Die Registerdatei 112 kann einen Satz von Registern einschließen, die zum Speichern von Operanden für verschiedene Anweisungen verwendet werden können. Die Registerdatei 112 kann Register verschiedener Datentypen basierend auf dem Typ von Operanden, zu dessen Speicherung in den Registern (z. B. Ganzzahl, Gleitkomma, Vektor usw.) der Ausführungskern 120 konfiguriert ist, einschließen. Die Registerdatei 112 kann architektonisch angelegte Register (d. h. diejenigen Register, die in der Anweisungssatzarchitektur angegeben sind, die von dem Prozessor 102 implementiert wird) einschließen. Alternativ oder außerdem kann die Registerdatei 112 physische Register (z. B., wenn eine Registerumbenennung in dem Ausführungskern 120 implementiert ist) einschließen.
  • Der L1-Cache 104 kann eine beliebige Caching-Struktur veranschaulichen. Zum Beispiel kann der L1-Cache 104 als eine Harvard-Architektur (separater Anweisungs-Cache zum Abrufen von Anweisungen und Daten-Cache zum Lesen/Schreiben von Daten durch Ausführungseinheiten für Speicher-Referenzierungs-Ops), als gemeinsam genutzter Anweisungs- und Daten-Cache usw. implementiert sein. In einigen Ausführungsformen können Laden/Speichern-Ausführungseinheiten bereitgestellt werden, um die Speicher-Referenzierungs-Ops auszuführen.
  • Eine Anweisung kann eine ausführbare Entität sein, die in einer Anweisungssatzarchitektur definiert ist, die von dem Prozessor 102 implementiert wird. Es gibt eine Vielfalt von Anweisungssatzarchitekturen (z. B. die ursprünglich von Intel entwickelte x86-Architektur, ARM von ARM Holdings, Power und PowerPC von IBM/Motorola usw.). Jede Anweisung ist in der Anweisungssatzarchitektur definiert, einschließlich ihrer Codierung in Speicher, ihres Betriebs und ihrer Auswirkung auf Register, Speicherorte und/oder einen anderen Prozessorzustand. Eine gegebene Implementierung der Anweisungssatzarchitektur kann jede Anweisung direkt ausführen, obwohl ihre Form durch Decodieren und eine andere Bearbeitung in der Prozessorhardware geändert werden kann. Eine andere Implementierung kann mindestens einige Anweisungen zur Ausführung durch die Ausführungseinheiten in dem Prozessor 102 in mehrere Anweisungsoperationen decodieren. Einige Anweisungen können in einigen Ausführungsformen mikrocodiert sein. Entsprechend kann der Begriff „Anweisungsoperation“ hierin verwendet werden, um sich auf eine Operation zu beziehen, zu deren Ausführung als einzelne Entität eine Ausführungseinheit in dem Prozessor 102/ Ausführungskern 120 konfiguriert ist. Anweisungen können eine Eins-zu-eins-Entsprechung mit Anweisungsoperationen aufweisen, und in einigen Fällen kann eine Anweisungsoperation eine Anweisung sein (möglicherweise in der Form innerhalb des Prozessors 102/Ausführungskerns 120 modifiziert). Anweisungen können auch eine Entsprechung von eins zu mehr als eins (eins zu viele) mit Anweisungsoperationen aufweisen. Eine Anweisungsoperation kann hierin kurz als „Op“ bezeichnet werden.
  • Die Massenspeicherungsvorrichtung 110, der Speicher 108, der L2-Cache 10 und der L1-Cache 104 sind Speicherungsvorrichtungen, die zusammen eine Speicherhierarchie bilden, die Daten und Anweisungen für den Prozessor 102 speichert. Insbesondere kann die Massenspeicherungsvorrichtung 110 ein nichtflüchtiger Speicher mit hoher Kapazität, wie ein Plattenlaufwerk oder eine große Flash-Speichereinheit mit langer Zugriffszeit, sein, während der L1-Cache 104, der L2-Cache 106 und der Speicher 108 kleiner und mit kürzeren Zugriffszeiten sein können. Diese schnelleren Halbleiterspeicher speichern Kopien häufig verwendeter Daten. Der Speicher 108 kann für eine Speichervorrichtung in der Familie dynamischer Direktzugriffsspeicher (DRAM-Familie) von Speichervorrichtungen repräsentativ sein. Die Größe des Speichers 108 ist üblicherweise größer als der L1-Cache 104 und der L2-Cache 106, während der L1-Cache 104 und der L2-Cache 106 üblicherweise unter Verwendung kleinerer Vorrichtungen in der Familie statischer Direktzugriffsspeicher (SRAM-Familie) von Vorrichtungen implementiert sind. In einigen Ausführungsformen werden der L2-Cache 106, der Speicher 108 und die Massenspeicherungsvorrichtung 110 zwischen einem oder mehreren Prozessoren in dem Computersystem 100 gemeinsam genutzt.
  • In einigen Ausführungsformen können die Vorrichtungen in der Speicherhierarchie (d. h. der L1-Cache 104 usw.) auf mehrere Cache-Zeilen pro Zyklus zugreifen (d. h. diese lesen und/oder schreiben). Diese Ausführungsformen können eine effektivere Verarbeitung von Speicherzugriffen ermöglichen, die basierend auf einem Vektor von Zeigern oder Array-Indizes auf nicht zusammenhängende Speicheradressen auftreten.
  • Es wird darauf hingewiesen, dass die nachstehend beschriebenen Datenstrukturen und Programmanweisungen (d. h. Code) auf einer nichtflüchtigen computerlesbaren Speicherungsvorrichtung gespeichert werden können, die eine beliebige Vorrichtung oder ein beliebiges Speicherungsmedium sein kann, die/das Code und/oder Daten zur Verwendung durch ein Computersystem (z. B. das Computersystem 100) speichern kann. Im Allgemeinen schließt eine nichtflüchtige computerlesbare Speicherungsvorrichtung, ohne darauf beschränkt zu sein, flüchtigen Speicher, nichtflüchtigen Speicher, magnetische und optische Speicherungsvorrichtungen, wie Plattenlaufwerke, Magnetband, Compact Discs (CDs), Digital Versatile Discs oder Digital Video Discs (DVDs) oder andere Medien ein, die in der Lage sind, computerlesbare Medien zu speichern, die jetzt bekannt sind oder zu einem späteren Zeitpunkt entwickelt werden. Deshalb sind die Massenspeicherungsvorrichtung 110, der Speicher 108, der L2-Cache 10 und der L1-Cache 104 alle Beispiele von nichtflüchtigen computerlesbaren Speichermedien.
  • Wie vorstehend erwähnt, kann der Ausführungskern 120 konfiguriert sein, um Vektoranweisungen (z. B. in der Vektorausführungseinheit 118) auszuführen. Die Vektoranweisungen können als Single Instruction Multiple Data-Anweisungen (SIMD-Anweisungen) im klassischen Sinne definiert sein, indem sie die gleiche Operation, die auf mehreren Datenelementen parallel durchgeführt werden soll, definieren können. Die Datenelemente, auf denen durch eine Instanz einer Anweisung gearbeitet wird, können als ein Vektor bezeichnet werden. Die Datenelemente, die den Vektor bilden, können als Vektorelemente bezeichnet werden. Vektorelemente selbst können einen beliebigen Datentyp (z. B. Ganzzahl, Gleitkomma usw.) aufweisen, und mehr als ein Datentyp kann für Vektorelemente unterstützt werden.
  • In einer Ausführungsform kann die Registerdatei 112 Vektorregister einschließen, die Operandenvektoren und Ergebnisvektoren enthalten können. In einigen Ausführungsformen können 32 Vektorregister in der Vektorregisterdatei vorhanden sein. In alternativen Ausführungsformen können jedoch unterschiedliche Anzahlen von Vektorregistern und/oder unterschiedliche Anzahlen von Bits pro Register vorhanden sein. Des Weiteren können Ausführungsformen, die eine Registerumbenennung implementieren, eine beliebige Anzahl von physischen Registern einschließen, die architektonisch angelegten Vektorregistern zugeordnet sein können. Architektonisch angelegte Register können Register sein, die als Operanden in Vektoranweisungen angebbar sind.
  • Insbesondere kann die Vektorausführungseinheit 118 konfiguriert sein, um die hierin beschriebenen Kompressionsunterstützungsanweisungen (oder aus den Kompressionsunterstützungsanweisungen decodierte Ops) zusätzlich zu verschiedenen Vektoroperationen, wie arithmetischen Operationen, Logik, Operationen, Verschiebungen usw., auszuführen.
  • 11 ist ein Blockdiagramm einer Ausführungsform von mindestens einem Abschnitt der Vektorausführungseinheit 118, einschließlich einer Schaltlogik, die konfiguriert ist, um verschiedene Kompressionsunterstützungsanweisungen auszuführen. Die in 11 gezeigte Schaltlogik kann Schaltlogik, die mit anderen Typen von Vektoroperationen gemeinsam genutzt wird, und/oder Schaltlogik, die für die Kompressionsunterstützungsanweisungen bestimmt ist, oder eine beliebige Kombination davon einschließen. Die Vektorausführungseinheit 118 ist mit Eingängen für die auszuführende Op sowie den Quelloperanden V1 und V2 gekoppelt. Die Ergebnisoperation kann als Teil der Op angegeben werden und kann mit dem Ergebnis an die Registerdatei 112 weitergeleitet werden.
  • Eine Steuerschaltung 130 kann die Op empfangen und kann die andere Schaltlogik in der Vektorausführungseinheit 118 entsprechend steuern. Somit kann die Steuerschaltung 130 mit der in 11 gezeigten anderen Schaltlogik gekoppelt sein, obwohl die Verbindungen in 11 nicht ausdrücklich veranschaulicht sind, um ein Verkomplizieren der Zeichnung zu vermeiden. Es kann eine Addiererschaltung 132 bereitgestellt sein, die mit dem zweiten Quelloperanden V2 gekoppelt sein kann. Die Addiererschaltung 132 kann konfiguriert sein, um verschiedene Elemente des Vektors V2 zu addieren. Wenn zum Beispiel der Quelloperand V2 ein Größenvektor ist, können Summen der Größen während der Ausführung der Op verwendet werden. Die Summe aller Vektorelemente kann bei der Aktualisierung des Bitzählwertfelds (n) verwendet werden, wenn der Ergebnisoperand ein Stapelregister ist. Zusätzlich können auch Teilsummen der Vektorelemente verwendet werden.
  • Zum Beispiel kann die Top-Anweisung implementiert werden, indem die MSBs des Stapels basierend auf den Teilsummen und der Größe der Vektorelemente nach rechts verschoben werden. In dem Fall von vier Vektorelementen, wenn Vektorelemente 32 Bits groß sind, kann eine Verschiebung der 32 MSBs um 32-b3 nach rechts x3 an dem VE3-Element im Ergebnisvektor ausrichten (z. B. eine Verschiebung nach rechts um die Vektorelementgröße (Vs)-b3). In ähnlicher Weise kann eine Verschiebung der 64 MSBs um 64-(b3+b2) nach rechts x2 an dem VE2-Element im Ergebnisvektor ausrichten (z. B. 2Vs-(b3+b2)); eine Verschiebung der 96 MSBs um 96-(b3+b2+bl) nach rechts kann x2 an dem VE1-Element im Ergebnisvektor ausrichten (z. B. 3Vs-(b3+b2+b1)) und eine Verschiebung der 128 MSBs um 128-(b3+b2+b1+b0) nach rechts kann x0 an dem VE0-Element im Ergebnisvektor ausrichten (z. B. 4Vs-(b3+b2+bl+b0)). Andere Elementgrößen und Anzahlen von Elementen können in ähnlicher Weise implementiert werden. Somit können die Schiebeschaltungen 134A-134N mit dem V1-Operanden und mit jeweiligen Summen von der Addiererschaltung 132 gekoppelt werden, um die Top-Anweisung auszuführen. Entsprechende Maskenschaltungen 136A-136N können mit den Ausgängen der Schiebeschaltungen 134A-134N gekoppelt sein, um die Bits zu maskieren, die nicht Teil der Vektorelemente sind (da z. B. x3 und x2 in den Quellstapelregistern aneinander angrenzen, können sich einige der Bits von x3 nach der Verschiebung in MSBs des VE2-Elements befinden und können maskiert sein). Während einzelne Schiebeschaltungen 134A-134N und Maskenschaltungen 136A-136N in 11 gezeigt sind, können andere Ausführungsformen eine gemeinsam genutzte Schiebeschaltung mit Steuereingängen von der Steuerschaltung 130 implementieren, um die Verschiebungen für jede Vektorelementposition basierend auf der Größe eines gegebenen Vektors zu steuern. Das heißt, die gemeinsam genutzte Schiebeschaltung kann so definiert werden, dass sie 2 64-Bit-Verschiebungen, 4 32-Bit-Verschiebungen, 8 16-Bit-Verschiebungen oder 16 8-Bit-Verschiebungen basierend auf der Größe der Vektorelemente eines gegebenen Operanden durchführt. Die Steuereingänge können die korrekten Verschiebungen auswählen, die basierend auf der für eine gegebene Op ausgewählten Größe durchzuführen sind. Die Schiebeschaltungen 134A-134N und die Maskenschaltungen 136A-136N können somit eine Implementierung der Extraktion von Bitfeldern aus der Vielzahl von Bits in dem Quellstapelregister in die Vektorelemente des Ergebnisvektorregisters sein.
  • Eine Schiebeschaltung 140 kann für die Pop-Anweisung/-Op bereitgestellt werden. Die Schiebeschaltung 140 kann den Stapelregisteroperanden um die Summe der Größen m Größenvektorregister (bereitgestellt von der Addiererschaltung 132) nach links verschieben. Somit kann die Schiebeschaltung 140 mit dem Addierer 132 und dem V1-Quelloperanden gekoppelt sein. Alternativ können die Schieberschaltungen 134A-134N konfiguriert sein, um die Verschiebung für die Pop-Op ebenfalls durchzuführen, und die Schiebeschaltung 136 wird möglicherweise nicht benötigt. Eine Rechen-n-Schaltung 138 kann bereitgestellt werden, um das aktualisierte n für die Pop-Anweisung/-Op sowie die Create- und Concat-Anweisungen/-Ops zu berechnen. Die Rechen-n-Schaltung 138 kann mit der Addiererschaltung 132 gekoppelt sein und kann die Summe der Größen der Vektorelemente (z. B. b3+b2+b 1+b0) empfangen, um n für die Pop- und Create-Anweisungen/-Ops zu berechnen.
  • Die Create-Anweisung/-Op kann in einer Ausführungsform auch unter Verwendung der Schiebeschaltungen 134A-134N durchgeführt werden, um die Quellvektorelemente zu den MSBs des Ergebnisses nach links zu verschieben. Zum Beispiel kann das x3-Element um die Vektorelementgröße (Vs), abzüglich der Größe des x3-Elements (b3) (z. B. Vs-b3), nach links verschoben werden. Das x2-Element kann um das Zweifache der Vektorelementgröße, abzüglich der Größe der x3- und x2-Elemente (z. B. 2Vs-(b3+b2)), nach links verschoben werden. In ähnlicher Weise kann das x1-Element um 3Vs-(b3+b2+bl) nach links verschoben werden, und das x0-Element kann um 4Vs-(b3+b2+b1+b0) nach links verschoben werden. Die resultierenden verschobenen Werte können maskiert und mit logisch miteinander OR-verknüpft werden, um die ausgegebene Vielzahl von Bits für das Ergebnisstapelregister zu erzeugen. Entsprechend können die von der Addiererschaltung 132 erzeugten Summen von den Schiebeschaltungen 134A-134N verwendet werden. Die Addiererschaltung 132 kann konfiguriert sein, um die vollen Verschiebungswerte, einschließlich der Vektorelementgrößen, zu erzeugen, oder die Schiebeschaltungen 134A-134N können die Vektorelementgrößen, explizit oder implizit, berücksichtigen.
  • Die Concat-Anweisung/-Op kann unter Verwendung der Schiebeschaltung 136 (um die p2-Bits um n1 nach rechts zu verschieben) und der Rechen-n-Schaltung 138 durchgeführt werden, um n1 und n2 zu addieren, um den Ausgang n zu erzeugen. Der verschobene p2 kann logisch mit den p1-Bits OR-verknüpft werden, um zum Beispiel die ausgegebenen Bits für das Ergebnisstapelregister zu erzeugen.
  • Die in 11 gezeigte Ausgangsauswahlschaltung 142 kann mit den Maskenschaltungen 136A-136N, der Rechen-n-Schaltung 138 und der Schiebeschaltung 140 gekoppelt sein und kann konfiguriert sein, um unter den Ausgängen basierend auf der aktuell durchgeführten Op auszuwählen, um einen Ausgang an die Registerdatei 112 bereitzustellen. Zum Beispiel können die Ausgänge der Maskenschaltungen 136A-136N, die miteinander verkettet sind, für die Top-Anweisung ausgewählt werden, während der Ausgang der Schiebeschaltung 140 und der Rechen-n-Schaltung 138 für die Pop-, Create- und Concat-Anweisungen ausgewählt werden können.
  • Es wird angemerkt, dass die Schaltlogik von 11 lediglich ein Beispiel einer Implementierung eines Abschnitts der Vektorausführungseinheit 118 ist. Jede andere gewünschte Schaltlogik kann verwendet werden. Zum Beispiel können die Schiebeschaltungen Drehschaltungen sein. Alle Äquivalente, einschließlich Boolescher Äquivalente, der gezeigten Schaltlogik können verwendet werden.
  • 12-15 sind Flussdiagramme, die den Betrieb einer Ausführungsform des Prozessors 102/des Ausführungskerns 120/der Vektorausführungseinheit 118 veranschaulichen, um die verschiedenen hierin beschriebenen Kompressionsunterstützungsanweisungen auszuführen. Während die Blöcke zur Erleichterung des Verständnisses in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Blöcke können parallel in einer kombinatorischen Logikschaltlogik in dem Prozessor 102/dem Ausführungskern 120/der Vektorausführungseinheit 118 durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder die Flussdiagramme als Ganzes können über mehrere Taktzyklen geleitet werden.
  • 12 ist ein Flussdiagramm, das den Betrieb zur Ausführung der Top-Anweisung für eine Ausführungsform veranschaulicht. Der Prozessor 102/der Ausführungskern 120/ die Vektorausführungseinheit 118 kann die Bitfelder aus den MSBs des Quellstapelregisters basierend auf dem Quellgrößenvektor extrahieren (Block 150). Zum Beispiel können b3 der MSBs als x3 extrahiert werden, die nächsten aufeinanderfolgenden (angrenzenden) b2 MSBs können als x2 extrahiert werden usw. Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann die Bitfelder an den Vektorelementen des Ergebnisvektorregisters ausrichten (Block 152). Die Extraktion und die Ausrichtung können durch Verschieben durchgeführt werden, wie vorstehend beschrieben. Andere Ausführungsformen können die Bitfelder auf andere Weise extrahieren. Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann den resultierenden Vektor in das Ergebnisvektorregister (das Vektorregister, das durch den Ergebnisoperanden identifiziert wird) schreiben (Block 154).
  • 13 ist ein Flussdiagramm, das den Betrieb zur Ausführung der Pop-Anweisung für eine Ausführungsform veranschaulicht. Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann einen verbleibenden Wert des Stapels basierend auf dem Quellgrößenvektor bestimmen (Block 156). Zum Beispiel kann der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 die Vektorelemente des Quellgrößenvektors hinzufügen und bestimmen, dass der verbleibende Stapel der Stapel ist, nachdem eine Anzahl von MSBs, die gleich der Summe der Vektorelemente des Quellgrößenvektors ist, entfernt wurde. Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann den Bitstapelabschnitt des Quellstapeloperanden verschieben, um den verbleibenden Stapel in die MSBs des Ergebnisstapelregisters zu stellen (Block 158). Zum Beispiel kann der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 den Quellstapel um die Summe der Vektorelemente des Quellgrößenvektors nach links verschieben. Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann n' als n aus dem Quellstapelregister, abzüglich der Summe der Vektorelemente des Größenvektors berechnen (Block 160) und kann den verschobenen Stapel und n' in das Ergebnisstapelregister schreiben (Block 162).
  • 14 ist ein Flussdiagramm, das den Betrieb zur Ausführung der Create-Anweisung für eine Ausführungsform veranschaulicht. Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann die Bitfelder aus den Quellvektorelementen basierend auf den Quellgrößenvektorelementen extrahieren (Block 170). Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann die Bitfelder an den MSBs des Ergebnisregisters ausrichten (Block 172). Die Extraktion und die Ausrichtung können durch Verschieben durchgeführt werden, wie zuvor erörtert. Andere Ausführungsformen können die Extraktion und die Ausrichtung auf andere Weise durchführen. Nachdem die Bitfelder ausgerichtet sind, können sie im Ergebnisregister aneinander angrenzen (z. B. kann das LSB von x3 an das MSB von x2 angrenzen, der LSB von x2 kann an das MSB von x1 angrenzen usw.). Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann n als Summe der Größenvektorelemente berechnen (Block 174) und kann den Ergebnisstapel (MSBs) und n (LSBs) in das Ergebnisstapelregister schreiben (Block 176).
  • 15 ist ein Flussdiagramm, das den Betrieb zur Ausführung der Concat-Anweisung für eine Ausführungsform veranschaulicht. Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann den Stapelabschnitt des Stapelquelloperanden 2 um n1 (die Anzahl von Bits im Stapelabschnitt des Zustandsquelloperanden 1) nach links verschieben (Block 178). Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann den Stapelabschnitt des Quellstapels 1 mit dem verschobenen Quellstapel 2-Feld zusammenführen (Block 180). Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann n gleich der Summe von n1 und n2 aus dem Quellstapelregister 1 bzw. dem Quellstapelregister 2 berechnen (Block 182). Der Prozessor 102/der Ausführungskern 120/die Vektorausführungseinheit 118 kann den zusammengeführten Stapel und n in das Ergebnisstapelregister schreiben (Block 184).
  • Zahlreiche Variationen und Modifikationen werden für den Fachmann ersichtlich, sobald die vorstehende Offenbarung vollständig verstanden ist. Es ist beabsichtigt, dass die folgenden Ansprüche derart interpretiert werden, dass alle solchen Variationen und Modifikationen eingeschlossen sind.

Claims (15)

  1. Prozessor, umfassend: eine Registerdatei, umfassend eine Vielzahl von Vektorregistern; und einen Ausführungskern, der mit der Registerdatei gekoppelt ist, wobei der Ausführungskern konfiguriert ist, um eine erste Anweisung auszuführen, die einen ersten Vektoroperanden, einen zweiten Operanden und einen Ergebnisvektoroperanden angibt, wobei sich der erste Vektoroperand in einem ersten Vektorregister der Vielzahl von Vektorregistern befindet, sich der zweite Operand in einem zweiten Register befindet und der Ergebnisvektoroperand in ein drittes Vektorregister der Vielzahl von Vektorregistern geschrieben werden soll, wobei der Ausführungskern konfiguriert ist, um eine Vielzahl von Bitfeldern von dem zweiten Operanden als Reaktion auf eine Vielzahl von Vektorelementen im ersten Vektoroperanden zu extrahieren und um die Vielzahl von extrahierten Bitfeldern als entsprechende Vektorelemente als Reaktion auf das Ausführen der ersten Anweisung in den Ergebnisvektoroperanden zu schreiben.
  2. Prozessor nach Anspruch 1, wobei das zweite Register eines der Vielzahl von Vektorregistern ist und wobei der Ausführungskern konfiguriert ist, um einen Abschnitt eines Werts im zweiten Register als Reaktion auf das Ausführen der ersten Anweisung als eine Vielzahl von aufeinanderfolgenden Bits anstelle der Vielzahl von Vektorelementen zu interpretieren.
  3. Prozessor nach Anspruch 2, wobei ein zweiter Abschnitt des Werts ein Bitzählwert ist, der eine Anzahl der Vielzahl von aufeinanderfolgenden Bits angibt.
  4. Prozessor nach Anspruch 3, wobei der Ausführungskern konfiguriert ist, um eine zweite Anweisung auszuführen, die den ersten Vektoroperanden, den zweiten Operanden und einen zweiten Ergebnisoperanden angibt, wobei der zweite Ergebnisoperand in ein viertes Register geschrieben werden soll und wobei der Ausführungskern konfiguriert ist, um eine Anzahl von Bits, die gleich einer Summe der Anzahlen von Bits ist, die durch die Vektorelemente des ersten Vektoroperanden angegeben ist, von dem Abschnitt des zweiten Operanden zu entfernen und einen Rest des Abschnitts des zweiten Operanden als Reaktion auf das Ausführen der zweiten Anweisung als den zweiten Ergebnisoperanden in das vierte Register zu schreiben.
  5. Prozessor nach Anspruch 4, wobei die entfernten Bits die höchstwertigen Bits des zweiten Operanden sind und wobei der Ausführungskern konfiguriert ist, um einen Rest des Abschnitts des zweiten Operanden als Reaktion auf das Ausführen der zweiten Anweisung in die höchstwertigen Bits des vierten Registers zu schreiben.
  6. Prozessor nach Anspruch 5, wobei der Ausführungskern konfiguriert ist, um die Summe der Anzahl von Bits, die durch die Vektorelemente des ersten Vektoroperanden angegeben ist, von dem Bitzählwert zu subtrahieren, um einen zweiten Bitzählwert zu erzeugen und den zweiten Bitzählwert als Reaktion auf das Ausführen der zweiten Anweisung in einen dritten Abschnitt des vierten Registers zu schreiben.
  7. Prozessor nach einem der Ansprüche 1-6, wobei ein erstes Bitfeld der Vielzahl von Bitfeldern eine Vielzahl von höchstwertigen Bits des zweiten Operanden umfasst, wobei eine Anzahl der Vielzahl von höchstwertigen Bits durch ein erstes Vektorelement der Vielzahl von Vektorelementen im ersten Vektoroperanden angegeben ist.
  8. Prozessor nach Anspruch 7, wobei ein zweites Bitfeld der Vielzahl von Bitfeldern an das erste Bitfeld im zweiten Operanden angrenzt und wobei eine Anzahl von Bits im zweiten Bitfeld durch ein zweites Vektorelement der Vielzahl von Vektorelementen im ersten Vektoroperanden angegeben ist, wobei das zweite Vektorelement an das erste Vektorelement im ersten Vektoroperanden angrenzt.
  9. Prozessor nach einem der Ansprüche 1-8, wobei der Ausführungskern konfiguriert ist, um eine dritte Anweisung auszuführen, die einen zweiten Vektoroperanden in einem zweiten Vektorregister der Vielzahl von Vektorregistern, einen dritten Vektoroperanden in einem dritten Vektorregister der Vielzahl von Vektorregistern und einen dritten Ergebnisoperanden angibt, und wobei der Ausführungskern konfiguriert ist, um eine Vielzahl von Bitfeldern von jeweiligen Vektorelementen des zweiten Vektoroperanden als Reaktion auf Werte in jeweiligen Vektorelementen des dritten Vektoroperanden zu extrahieren und um die Vielzahl von Bitfeldern als Reaktion auf das Ausführen der dritten Anweisung in den dritten Ergebnisoperanden zu schreiben.
  10. Prozessor nach Anspruch 9, wobei der Ausführungskern konfiguriert ist, um die Vielzahl von Bitfeldern als Reaktion auf das Ausführen der dritten Anweisung in angrenzende Bits in einem ersten Abschnitt des dritten Ergebnisoperanden zu schreiben.
  11. Prozessor nach Anspruch 10, wobei der Ausführungskern konfiguriert ist, um die Werte der jeweiligen Vektorelemente des dritten Vektoroperanden zu summieren und um die Summe als Reaktion auf das Ausführen der dritten Anweisung in einen zweiten Abschnitt des dritten Ergebnisoperanden zu schreiben.
  12. Prozessor nach einem der Ansprüche 1-11, wobei der Ausführungskern konfiguriert ist, um eine vierte Anweisung mit einem fünften Operanden in einem fünften Register, einem sechsten Operanden in einem sechsten Register und einem vierten Ergebnisoperanden auszuführen, und wobei der fünfte Operand einen ersten Abschnitt mit einer ersten Vielzahl von Bits und einen zweiten Abschnitt mit einem zweiten Bitzählwert, der eine Anzahl der ersten Vielzahl von Bits angibt, einschließt, und wobei der sechste Operand einen ersten Abschnitt mit einer zweiten Vielzahl von Bits und einen zweiten Abschnitt mit einem dritten Bitzählwert, der eine Anzahl der zweiten Vielzahl von Bits angibt, einschließt und wobei der Ausführungskern konfiguriert ist, um die erste Vielzahl von Bits und die zweite Vielzahl als Reaktion auf das Ausführen der vierten Anweisung in einem ersten Abschnitt des vierten Ergebnisoperanden zu verketten.
  13. Prozessor nach Anspruch 12, wobei der Ausführungskern konfiguriert ist, um den zweiten Bitzählwert und den dritten Bitzählwert zu summieren und um die Summe als Reaktion auf das Ausführen der vierten Anweisung in einen zweiten Abschnitt des vierten Ergebnisoperanden zu schreiben.
  14. Prozessor nach Anspruch 12, wobei das fünfte Register, das sechste Register und ein viertes Ergebnisregister, das den vierten Ergebnisoperanden speichert, in der Vielzahl von Vektorregistern eingeschlossen sind und der Ausführungskern konfiguriert ist, um Werte im fünften Register, im sechsten Register und im vierten Ergebnisregister als Reaktion auf das Ausführen der vierten Anweisung als die ersten Abschnitte und zweiten Abschnitte anstelle von Vektorelementen zu interpretieren.
  15. Verfahren, umfassend: Ausführen einer ersten Anweisung in einem Prozessor, der eine Registerdatei aufweist, die eine Vielzahl von Vektorregistern umfasst, wobei die erste Anweisung einen ersten Vektoroperanden, einen zweiten Operanden und einen Ergebnisvektoroperanden angibt und wobei sich der erste Vektoroperand in einem ersten Vektorregister der Vielzahl von Vektorregistern befindet, sich der zweite Operand in einem zweiten Register befindet und der Ergebnisvektoroperand in ein drittes Vektorregister der Vielzahl von Vektorregistern geschrieben werden soll; während des Ausführens, Extrahieren einer Vielzahl von Bitfeldern vom zweiten Operanden als Reaktion auf eine Vielzahl von Vektorelementen im ersten Vektoroperanden und während des Ausführens, Schreiben der Vielzahl von extrahierten Bitfeldern als entsprechende Vektorelemente in den Ergebnisvektoroperanden.
DE112020004266.9T 2019-09-10 2020-09-08 Kompressionsunterstützungsanweisungen Pending DE112020004266T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/566,344 2019-09-10
US16/566,344 US11086625B2 (en) 2019-09-10 2019-09-10 Compression assist instructions
PCT/US2020/049707 WO2021050423A1 (en) 2019-09-10 2020-09-08 Compression assist instructions

Publications (1)

Publication Number Publication Date
DE112020004266T5 true DE112020004266T5 (de) 2022-06-23

Family

ID=72644897

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020004266.9T Pending DE112020004266T5 (de) 2019-09-10 2020-09-08 Kompressionsunterstützungsanweisungen

Country Status (7)

Country Link
US (3) US11086625B2 (de)
JP (1) JP7385009B2 (de)
KR (1) KR20220045012A (de)
CN (1) CN114365083A (de)
DE (1) DE112020004266T5 (de)
GB (1) GB2601668B (de)
WO (1) WO2021050423A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11086625B2 (en) 2019-09-10 2021-08-10 Apple Inc. Compression assist instructions
US20220197643A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Speculative decompression within processor core caches

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57209570A (en) * 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
EP1046100A1 (de) 1998-08-06 2000-10-25 Trimedia Technologies, Inc. Datenprozessor und datenverarbeitungsverfahren
US6781529B1 (en) 2002-10-24 2004-08-24 Apple Computer, Inc. Methods and apparatuses for variable length encoding
GB2409061B (en) 2003-12-09 2006-09-13 Advanced Risc Mach Ltd Table lookup operation within a data processing system
JP2012033032A (ja) 2010-07-30 2012-02-16 Sony Corp 情報処理装置および情報処理方法
US9280342B2 (en) * 2011-07-20 2016-03-08 Oracle International Corporation Vector operations for compressing selected vector elements
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
US9904548B2 (en) 2014-12-22 2018-02-27 Intel Corporation Instruction and logic to perform a centrifuge operation
GB2540939B (en) * 2015-07-31 2019-01-23 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
US10338920B2 (en) 2015-12-18 2019-07-02 Intel Corporation Instructions and logic for get-multiple-vector-elements operations
WO2018150218A1 (en) * 2017-02-17 2018-08-23 Intel Corporation Vector instruction for accumulating and compressing values based on input mask
US20190065201A1 (en) 2017-08-31 2019-02-28 MIPS Tech, LLC Implicit global pointer relative addressing for global memory access
US11086625B2 (en) 2019-09-10 2021-08-10 Apple Inc. Compression assist instructions

Also Published As

Publication number Publication date
GB2601668B (en) 2023-04-26
JP2022546615A (ja) 2022-11-04
WO2021050423A1 (en) 2021-03-18
JP7385009B2 (ja) 2023-11-21
US11822921B2 (en) 2023-11-21
GB2601668A (en) 2022-06-08
US20230121984A1 (en) 2023-04-20
CN114365083A (zh) 2022-04-15
KR20220045012A (ko) 2022-04-12
US11086625B2 (en) 2021-08-10
GB202202417D0 (en) 2022-04-06
US20210072994A1 (en) 2021-03-11
US11537399B2 (en) 2022-12-27
US20210342154A1 (en) 2021-11-04

Similar Documents

Publication Publication Date Title
US10719318B2 (en) Processor
EP3676700B1 (de) Effiziente direktfaltung unter verwendung von simd-anweisungen
CN110337635A (zh) 用于点积操作的系统、方法和装置
US8713080B2 (en) Circuit for compressing data and a processor employing same
DE102015101414A1 (de) Verbesserter Rücksprungstapelpuffer
CN109992304A (zh) 用于加载片寄存器对的系统和方法
DE10297000T5 (de) Verfahren und Vorrichtung zur parallelen Datenverschiebung nach rechts mit Datenzusammenfügung
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE112010002773T5 (de) Entpacken von gepackten daten auf mehreren spuren
CN109992300A (zh) 用于点积操作的系统、方法和装置
DE102013013137A1 (de) Mehrstufige registerumbenennung durch entfernen von abhängigkeiten
DE112020004266T5 (de) Kompressionsunterstützungsanweisungen
DE112020003855T5 (de) Bitfolgeoperationen in Speicher
DE102014002510A1 (de) Präzise Ausnahmesignalisierung für Mehrfachdatenarchitektur
CN109992305A (zh) 用于将片寄存器对归零的系统和方法
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
CN109992243A (zh) 用于矩阵操作的系统、方法和装置
DE102022114563A1 (de) Vorrichtung für einen array-prozessor und zugehörige verfahren
DE3686984T2 (de) Verfahren und mittel zum laden und speichern von daten in einem rechner mit beschraenktem befehlssatz.
DE102019112186A1 (de) Doppelladebefehl
CN109992303A (zh) 用于将片寄存器对存储到存储器的系统和方法
DE112021003179T5 (de) Zusammenführung von Mikroprozessor-Speicheranweisungen
DE102018129116A1 (de) Einrichtung und Verfahren zum Rechtsverschieben von gepackten Vierwörtern und Extrahieren von gepackten Wörtern
DE102018006046A1 (de) Einrichtung und Verfahren zur Verschiebung und Extraktion von gepackten Datenelementen

Legal Events

Date Code Title Description
R012 Request for examination validly filed