DE112016004324T5 - Heterogene Kompressionsarchitektur für optimiertes Kompressionsverhältnis - Google Patents

Heterogene Kompressionsarchitektur für optimiertes Kompressionsverhältnis Download PDF

Info

Publication number
DE112016004324T5
DE112016004324T5 DE112016004324.4T DE112016004324T DE112016004324T5 DE 112016004324 T5 DE112016004324 T5 DE 112016004324T5 DE 112016004324 T DE112016004324 T DE 112016004324T DE 112016004324 T5 DE112016004324 T5 DE 112016004324T5
Authority
DE
Germany
Prior art keywords
byte
token
stream
symbol
string
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.)
Ceased
Application number
DE112016004324.4T
Other languages
English (en)
Inventor
James D. Guilford
Vinodh Gopal
Gilbert M. Wolrich
Daniel F. Cutter
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of DE112016004324T5 publication Critical patent/DE112016004324T5/de
Ceased 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
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • 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/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

Eine Verarbeitungsvorrichtung umfasst eine Speichervorrichtung, um Daten zu speichern, und einen Prozessor, um einen Tokenstrom zu erhalten, welcher mehrere Token umfasst, welche auf der Grundlage eines Byte-Stroms erzeugt werden, welcher mehrere Bytes umfasst, einen Graph, welcher mehrere Knoten und Kanten umfasst, auf der Grundlage des Tokenstroms zu erzeugen, auf der Grundlage des Graphen einen Weg zwischen einem ersten Knoten, welcher einem Anfangstoken des Tokenstroms zugeordnet ist, und einem Endknoten zu identifizieren, welcher einem letzten Token des Tokenstroms zugeordnet ist, und eine Entropiecodierung einer Teilmenge von Token durchzuführen, welche der Teilmenge von Knoten zugeordnet sind, um Ausgabedaten zu erzeugen.

Description

  • TECHNISCHES GEBIET
  • Die Ausführungsformen der Offenbarung betreffen im Allgemeinen Datenkompression und insbesondere eine heterogene Datenkompressionsarchitektur, um ein extremes Kompressionsverhältnis zu erzielen.
  • HINTERGRUND
  • Ein Datenkompressionssystem und -Verfahren wandeln Eingangsdaten in ein komprimiertes Format um, um die Datengröße zu reduzieren, wodurch eine effiziente Speicherung und Übertragung ermöglicht wird. Die Eingangsdaten können einen Byte-Strom von Bytes enthalten (was als ein Byte-Strom bezeichnet wird). Der Byte-Strom kann als eine Serie von Datenblöcken organisiert sein. Jeder Datenblock umfasst Daten-Bytes, welche in einer sequenziellen Reihenfolge angeordnet sind. Standard-Datenkompressionsverfahren können eine Kombination aus einem LZ77-String-Matcher und einem Huffman-Codierer umfassen, um ein komprimiertes Format der Eingangsdaten zu erzeugen.
  • Figurenliste
  • Die Offenbarung wird aus der nachfolgenden ausführlichen Beschreibung und aus den begleitenden Zeichnungen der verschiedenen Ausführungsformen der Offenbarung vollständiger verstanden. Die Zeichnungen dürfen jedoch nicht so verstanden werden, dass sie die Offenbarung auf die spezifischen Ausführungsformen begrenzen, sondern sie dienen nur zur Erklärung und zum Verständnis.
    • 1 illustriert eine Verarbeitungsvorrichtung, welche einen Prozessor umfasst, um eine Datenkompression gemäß einer Ausführungsform der vorliegenden Offenbarung durchzuführen.
    • 2 illustriert ein heterogenes System, welches einen Prozessor und eine Hardware-Verarbeitungsfunktionseinheit umfasst, um eine Datenkompression gemäß einer Ausführungsform der vorliegenden Offenbarung durchzuführen.
    • 3 illustriert einen beispielhaften Abschnitt eines Kostengraphen gemäß einer Ausführungsform der vorliegenden Offenbarung.
    • 4 ist ein Blockdiagramm eines Verfahrens, um eine Datenkompression gemäß einer Ausführungsform der vorliegenden Offenbarung durchzuführen.
    • 5A ist ein Blockdiagramm, welches eine Mikroarchitektur für einen Prozessor illustriert, welcher einen heterogenen Kern umfasst, in welchem eine Ausführungsform der Offenbarung verwendet werden kann.
    • 5B ist ein Blockdiagramm, welches eine In-Order-Pipeline und eine Registerumbenennungsstufe, eine Out-of-Order-Problem/Ausführungs-Pipeline illustriert, welche gemäß mindestens einer Ausführungsform der Offenbarung implementiert sind.
    • 6 illustriert ein Blockdiagramm der Mikroarchitektur für einen Prozessor, welcher Logik gemäß einer Ausführungsform der Offenbarung umfasst.
    • 7 ist ein Blockdiagramm, welches ein System illustriert, in welchem eine Ausführungsform der Offenbarung verwendet werden kann.
    • 8 ist ein Blockdiagramm eines Systems, in welchem eine Ausführungsform der Offenbarung betrieben werden kann.
    • 9 ist ein Blockdiagramm eines Systems, in welchem eine Ausführungsform der Offenbarung betrieben werden kann.
    • 10 ist ein Blockdiagramm eines Systems-auf-einem-Chip (SoC) gemäß einer Ausführungsform der vorliegenden Offenbarung.
    • 11 ist ein Blockdiagramm einer Ausführungsform eines SoC-Entwurfs gemäß der vorliegenden Offenbarung.
    • 12 illustriert ein Blockdiagramm einer Ausführungsform eines Computersystems.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Der LZ77-String-Matcher, welcher als Hardware oder als Software implementiert ist, ersetzt wiederholtes Auftreten von Daten durch Verweise auf eine einzelne Kopie dieser Daten, welche zuvor in dem unkomprimierten Datenstrom vorhanden sind. Bei manchen Implementierungen identifiziert der LZ77-String-Matcher wiederholte Teilketten von Bytes in dem Byte-Strom und ersetzt die identifizierten wiederholten Teilketten durch Rückverweise. Eine Byte-Teilkette umfasst mindestens zwei aufeinanderfolgende Bytes in einem Strom von Bytes (was als ein Byte-Strom bezeichnet wird). Zwei Byte-Teilketten werden wiederholt oder stimmen überein, wenn die beiden Teilketten identisch sind. Ein Rückverweis kann eine Länge der identifizierten wiederholten Teilkette und einen Byte-Abstand zwischen der identifizierten Teilkette und der vorhergehenden übereinstimmenden Teilkette aufweisen. Die Länge einer Teilkette kann in Bezug auf die Anzahl von Bytes in der Teilkette gemessen werden, und der Byte-Abstand kann in Bezug auf die Anzahl von Bytes zwischen den entsprechenden Byte-Positionen für die beiden übereinstimmenden Teilketten in dem Byte-Strom gemessen werden. Wenn der LZ77-String-Matcher eine wiederholte Teilkette nicht identifizieren kann, welche an einer Byte-Position beginnt, wird das Daten-Byte in dem Ausgangsstrom durch das unmittelbare Byte dargestellt. Folglich konvertiert der LZ77-String-Matcher den Byte-Eingangsstrom in einen Tokenstrom, welcher eine Serie von Token variabler Länge umfasst, so dass jedes Token einen Rückverweis einer wiederholten Byte-Teilkette mit einer Teilkettenlänge oder ein unmittelbares Byte speichern kann. Die Anzahl von Token in dem Tokenstrom ist kleiner als die Anzahl von Bytes in dem entsprechenden Byte-Strom, weil die Rückverweise ein Auftreten wiederholter Teilketten beseitigen. Ein Entropiecodierer, wie beispielsweise der Huffman-Codierer, kann dann die Serie von Token codieren und die Eingangsdaten in das komprimierte Datenformat umwandeln.
  • Weil die Token in dem Tokenstrom, welche durch den LZ77-String-Matcher erzeugt werden, variable Längen aufweisen, hängen die Bits (die Anzahl von Bits, welche zum Codieren verwendet werden, wird auch als die Kosten bezeichnet), welche verwendet werden, um diese Token durch den Entropiecodierer (wie beispielsweise den „Huffman-Codierer“) zu codieren, nicht nur von der Anzahl von Token ab, welche durch den LZ77-String-Matcher identifiziert werden, sondern auch von der Anzahl von Bits ab, welche verwendet werden, um jedes Token zu codieren. Folglich kann ein kürzerer Tokenstrom, welcher von einem LZ77-String-Matcher erzeugt wird, nicht zu einer besser komprimierten Datenausgabe führen, weil es möglich ist, mehr Bits zum Codieren jedes Token in dem kürzeren Tokenstrom zu verwenden.
  • Der LZ77-String-Matcher kann in Abhängigkeit von der maximalen Kettenlänge, nach welcher der LZ77-String-Matcher sucht, auf verschiedenen Entwicklungsstufen ausgeführt werden. Beispielsweise kann die Stufe der Kettenübereinstimmung für den LZ77-String-Matcher von Stufe 1 bis 9 reichen, wobei ein LZ77-String-Matcher der Stufe 1 nach Teilkettenübereinstimmungen bis zu einer kleinen Kettenlänge (z. B. vier Bytes lang) sucht und ein LZ77-String-Matcher der Stufe 9 nach Teilkettenübereinstimmungen bis zu einer großen Kettenlänge (z. B. dreizehn Bytes lang) sucht. Je höher die Stufe ist, auf welcher ein LZ77-String-Matcher ist, desto mehr Verarbeitungsbetriebsmittel sind erforderlich.
  • Ein „Lazy-Matching“-Verfahren kann eingesetzt werden, um die Suche nach Teilkettenübereinstimmungen zu verbessern. Beim „Lazy-Matching“ schaut der „Lazy“-LZ77-String-Matcher nach Identifizieren der längsten Teilkettenübereinstimmung für ein aktuelles Byte, und wenn der Teilkette ein unmittelbares Byte in dem Byte-Strom nachfolgt, auf das nächste Byte, welches dem aktuellen Byte in dem Byte-Strom nachfolgt, um zu bestimmen, ob für das nächste Byte eine längere Teilkettenübereinstimmung existiert. Wenn die längere Übereinstimmung vorhanden ist, erzeugt der „Lazy“-LZ77-String-Matcher zu Gunsten des nächsten Byte kein Rückverweistoken für das aktuelle Byte. Der „Lazy“-LZ77-String-Matcher verwendet Heuristiken, welche aus Bytes abgeleitet werden, welche dem aktuellen Byte benachbart sind, um Token auszuwählen und versäumt folglich, die globalen Eigenschaften des Byte-Stroms zu betrachten. Folglich können aktuelle LZ77-String-Matcher nicht zuverlässig die beste Datenkompression für die Eingangsdaten erzeugen, weil sie nicht alle Bits betrachten, welche benötigt werden, um den Byte-Strom zu codieren.
  • An Stelle der Ausführung einer Auswahl von übereinstimmenden Byte-Teilketten auf der Grundlage lokaler Eigenschaften um ein aktuelles Byte herum, führen Ausführungsformen der vorliegenden Offenbarung die Auswahl auf der Grundlage einer Messung der gesamten Anzahl von Bits durch, um die Eingangsdaten zu codieren. Dazu identifizieren Ausführungsformen der vorliegenden Offenbarung die übereinstimmende Byte-Teilkette (wie beispielsweise die längste übereinstimmende Byte-Teilkette) für jedes Byte in dem Byte-Eingangsstrom und erzeugen ein Token für jedes Byte in dem Byte-Strom. Ausführungsformen ordnen dem Token eine Kostenmessung zu, welche dem Huffman-Codierer zugeordnet ist, wobei die Kostenmessung eine Kostenfunktion sein kann, welche die Anzahl von Bits misst, welche eingesetzt werden, um Symbole zu codieren, welche dem Token zugeordnet sind. Dann wird ein optimaler Tokensatz gemäß bestimmten Kostenkriterien ausgewählt, wobei mehrere mögliche Kombinationen der Token betrachtet werden.
  • 1 illustriert eine Verarbeitungsvorrichtung 100, welche einen Prozessor umfasst, um eine Datenkompression gemäß einer Ausführungsform der vorliegenden Offenbarung durchzuführen. Die Verarbeitungsvorrichtung 100 kann einen Prozessor 102 und eine Speichervorrichtung 104 umfassen, welche betriebsfähig an den Prozessor 102 angeschlossen ist. Der Prozessor 102 kann weiterhin einen oder mehrere Verarbeitungskerne (nicht gezeigt) umfassen, welche konfiguriert werden können, Befehle der Datenkompression auszuführen. Die Speichervorrichtung 104 kann ein geeigneter Speichervorrichtungstyp sein, um Daten entweder in einem unkomprimierten Format oder in einem komprimierten Format zu speichern.
  • Bei einer Ausführungsform kann der Prozessor 102 Eingangsdaten in einem unkomprimierten Format erhalten, welches in ein komprimiertes Format umgewandelt werden soll. Die Eingangsdaten umfassen einen Strom von Bytes (oder einen Byte-Strom), welcher gemäß einer sequenziellen Reihenfolge angeordnet ist. Folglich kann jedes Byte in dem Byte-Strom auf eine Byte-Position in Bezug auf ein Verweis-Byte (z. B. das erste Byte des Byte-Stroms) referenziert werden. Die Byte-Position stellt die Anzahl von Bytes zu dem Verweis-Byte dar und kann gemäß der Anzahl von Bytes gemessen werden, welche sie von dem Verweis-Byte entfernt ist. Bei manchen Ausführungsformen können die Bytes in dem Byte-Strom in Datenblöcken organisiert werden, von welchen jeder vorbestimmte Größen aufweisen kann (z. B. kann ein Datenblock 16K, 32K oder 64K Bytes enthalten). Folglich kann ein Byte-Strom eine bestimmte Anzahl von Datenblöcken von Bytes umfassen.
  • Bei einer Ausführungsform kann der Prozessor 102 als Reaktion auf ein Erhalten der Eingangsdaten, welche den Byte-Strom umfassen, einem Tokengenerator 106 zugeordnet sein, um einen Tokenstrom zu erzeugen, welcher ein oder mehrere Token für jedes Byte in dem Byte-Strom umfasst. Der Tokengenerator 106 kann eine Hardware-Logik (welche als eine Funktionsverarbeitungseinheit bezeichnet wird) sein, welche konfiguriert ist, den Tokenstrom zu erzeugen. Ein Token kann einen Rückverweis für eine übereinstimmende Byte-Teilkette (wie beispielsweise die längste übereinstimmende Teilkette) enthalten, wenn es ein übereinstimmendes oder, wenn es keine Übereinstimmung gibt, ein unmittelbares Byte gibt. Im Gegensatz zu dem LZ77-String-Matcher führt der Tokengenerator 106 für jedes Byte in dem Byte-Strom einen Teilketten-Übereinstimmungsvergleich durch. Der Prozessor 102 kann weiterhin einen Tokenselektor 108 ausführen, um einen Tokensatz gemäß bestimmten globalen Kostenkriterien auszuwählen. Der ausgewählte Tokensatz ist eine optimale Repräsentation des Byte-Stroms gemäß den Kostenkriterien. Der Prozessor 102 kann dann einen Huffman-Codierer 110 ausführen, um den ausgewählten Tokensatz zu codieren und die komprimierte Datenausgabe zu erzeugen.
  • Der Tokengenerator 106 führt die Berechnung durch, um für jedes Byte in dem Byte-Strom nach der übereinstimmenden Byte-Teilkette zu suchen. Bei einer Ausführungsform ist die übereinstimmende Byte-Teilkette die längste Byte-Teilkette, welche aus dem aktuellen Byte herrührt, welches mit einer vorhergehenden Byte-Teilkette übereinstimmt, welche von einem Byte vor dem aktuellen Byte herrührt. Bei einer Ausführungsform kann, wie in 1 gezeigt, der Prozessor 102 eine Software-Anwendung auf dem Prozessor 102 ausführen, um die Operationen des Tokengenerators 106 durchzuführen. Bei einer anderen Ausführungsform kann, wie in 2 gezeigt, der Prozessor 102 mit einer Hardware-Verarbeitungsfunktionseinheit 112 zusammenarbeiten, welche die Operationen des Tokengenerators 106 in Hardware implementiert.
  • 2 illustriert ein heterogenes System 200, welches einen Prozessor 102 und eine Hardware-Verarbeitungsfunktionseinheit 112 umfasst, um eine Datenkompression gemäß einer Ausführungsform der vorliegenden Offenbarung durchzuführen. Bei einer Ausführungsform kann das heterogene System 200 ein System-auf-einem-Chip (SoC) sein, welches den Prozessor 102, die Speichervorrichtung 104 und die Hardware-Verarbeitungsfunktionseinheit 112 umfassen kann. Der Prozessor 102 und die Speichervorrichtung 104 können die gleichen oder ähnliche Vorrichtungen sein, wie in 1 gezeigt. Die Hardware-Verarbeitungsfunktionseinheit 112 kann eine Logikschaltung umfassen, welche angefertigt wurde, um die Funktion des Suchens nach der übereinstimmenden Byte-Teilkette für jedes Byte durchzuführen und einen Tokenstrom zu erzeugen, welcher ein oder mehrere Token für jedes Byte in dem Byte-Strom umfasst. Bei einer Ausführungsform kann die Hardware-Verarbeitungsfunktionseinheit 112 auf einem Chipsatz angeordnet sein, welcher kommunikativ an ein oder mehrere Schnittstellen des Prozessors 102 angeschlossen ist. Folglich kann, wie in 2 gezeigt, der Prozessor 102 die Eingangsdaten erhalten, welche den Byte-Strom umfassen, und den Byte-Strom an die Hardware-Verarbeitungsfunktionseinheit 112 übertragen, welche den Tokenstrom auf der Grundlage des Byte-Stroms berechnen kann. Die Hardware-Verarbeitungsfunktionseinheit 112 kann den erzeugten Tokenstrom in einem Puffer (nicht gezeigt) speichern und ein Signal senden, um den Prozessor 102 zu informieren, dass der Tokenstrom bereit ist. Als Reaktion kann der Prozessor 102 den Tokenstrom aus der Hardware-Verarbeitungsfunktionseinheit 112 zur weiteren Verarbeitung abrufen.
  • Implementiert entweder in Hardware, wie in 2 gezeigt, oder in Software, wie in 1 gezeigt, kann der Tokengenerator 106 den Byte-Strom der Eingangsdaten erhalten und einen entsprechenden Tokenstrom erzeugen. Bei einer Ausführungsform kann der Tokengenerator 106 für jedes Byte in dem Byte-Strom nach einer längsten Byte-Teilkette suchen, welche aus dem aktuellen Byte herrührt und mit einer anderen Byte-Teilkette übereinstimmt, welche aus einem Byte vor dem aktuellen Byte in dem Byte-Strom herrührt. Bei einer Ausführungsform kann der Tokengenerator 106 nach der längsten Byte-Teilkette innerhalb eines Bereichs von Byte-Längen suchen. Beispielsweise kann der Tokengenerator 106 nach einer vorhergehenden übereinstimmenden Byte-Teilkette innerhalb des Kettenlängenbereichs von [3 Bytes, 13 Bytes] suchen. Bei einer anderen Ausführungsform kann der Tokengenerator 106 nach einer übereinstimmenden Byte-Teilkette suchen, welche länger als 3 Bytes ist.
  • Der Tokengenerator 106 kann ein Token erzeugen, welches dem Byte entspricht, wobei das Token ein Datenobjekt ist, welches Symbole enthält, um Informationen zu speichern, welche das Byte betreffen. Beispielsweise kann ein Symbol Bits, welche die Länge einer Teilkette oder eines unmittelbaren Byte darstellen, oder ein unmittelbares Byte sein. Ein anderes Symbol kann Bits sein, welche den Byte-Abstand zu einem Verweis-Byte darstellen. Die Informationen, welche in dem Token gespeichert sind, welches dem Byte entspricht, können davon abhängen, ob der Tokengenerator 106 erfolgreich eine übereinstimmende Byte-Teilkette lokalisiert hat. Wenn der Tokengenerator 106 keine vorhergehende übereinstimmende Byte-Teilkette für das aktuelle Byte identifizieren kann, kann der Tokengenerator 106 ein Token erzeugen, welches ein Symbol enthält, welches das unmittelbare Byte des aktuellen Byte darstellt. Wenn der Tokengenerator 106 jedoch eine vorhergehende übereinstimmende Byte-Teilkette für das aktuelle Byte identifiziert, kann der Tokengenerator 106 ein Token erzeugen, welches ein erstes Symbol, welches die Byte-Kettenlänge (z. B. in Bezug auf eine Anzahl von Bytes) der identifizierten Byte-Teilkette darstellt, und ein zweites Symbol enthält, welches einen Byte-Abstand zwischen den übereinstimmenden Byte-Teilketten darstellt. Der Byte-Abstand kann in Bezug auf die Anzahl von Bytes zwischen den Köpfen der beiden übereinstimmenden Byte-Teilketten gemessen werden. Bei einer Ausführungsform kann das Token ein 3-Byte-Token in der Form von <Symbol A, Symbol B> sein, wobei Symbol A ein Byte lang sein kann, um ein unmittelbares Byte (wenn es keine übereinstimmende Teilkette gibt) oder eine übereinstimmende Teilkettenlänge darzustellen (wenn es eine übereinstimmende Teilkette gibt), und Symbol B zwei Bytes lang sein kann, um den Byte-Abstand zu einem Verweis-Byte darzustellen (wenn es eine übereinstimmende Teilkette gibt).
  • Folglich ist jedem Byte in dem Byte-Strom ein jeweiliges Token zugeordnet, und alle Token bilden einen Tokenstrom für den Byte-Strom aus. Der Tokenstrom kann in einem Puffer gespeichert werden, welcher der Hardware-Verarbeitungsfunktionseinheit 112 zugeordnet ist. Der Prozessor 102 kann den Tokenstrom zur weiteren Verarbeitung aus der Hardware-Verarbeitungsfunktionseinheit 112 abrufen. Bei einer Ausführungsform kann der Tokengenerator 106 nur Token speichern, welche eine übereinstimmende Byte-Teilkette enthalten, aber keine Token für unmittelbare Bytes. Wenn der Prozessor 102 auf den ursprünglichen Byte-Eingangsstrom zugreifen kann, kann der Prozessor 102 diejenigen Token erzeugen, welche ein unmittelbares Byte aus dem ursprünglichen Byte-Strom enthalten und diese an ihren korrekten Positionen einfügen. Auf diese Weise kann die Datenmenge, welche zwischen dem Prozessor 102 und der Hardware-Verarbeitungsfunktionseinheit 106 übertragen wird, reduziert werden.
  • Beim Erhalten des erzeugten Tokenstroms kann der Prozessor 102 den Tokenselektor 108 ausführen, um eine Teilmenge von Token zu erzeugen, welche den Byte-Eingangsstrom darstellen. Zu diesem Zweck kann der Tokenselektor 108 unter Verwendung der Token in dem Tokenstrom zuerst einen Graph erzeugen und dann die Teilmenge von Token auf der Grundlage des Graphen auswählen. Bei einer Ausführungsform kann der Graph mehrere Knoten umfassen, welche durch mehrere Kanten miteinander verbunden sind. Für jedes Token in dem Tokenstrom kann der Tokenselektor 108 einen entsprechenden Knoten in dem Graph erzeugen. Für jeden Knoten erzeugt der Tokenselektor 108 eine Vorgabekante, welche den Knoten mit einem nachfolgenden Knoten verbindet, welcher dem nächsten Token in dem Tokenstrom entspricht. Wenn das Token ferner Informationen über eine übereinstimmende Byte-Teilkette enthält, welche aus einem vorhergehenden Byte herrührt, kann der Tokenselektor 108 eine Kante erzeugen, welche den Knoten, welcher dem Token des aktuellen Byte entspricht, mit einem anderen Knoten verbindet, welcher einem vorhergehenden Token entspricht, welches dem vorhergehenden Byte entspricht. Folglich können jedem Knoten in dem Graph eine oder mehrere Kanten zugeordnet sein.
  • Bei einer Ausführungsform kann der Tokenselektor 108 jeder Kante in dem Graph Codierkosten zuordnen. Die Codierkosten sind die Anzahl Bits, welche benötigt werden, um das Token zu codieren, welches dem Knoten zugeordnet ist. Weil die Codierkosten, welche jeder Kante zugeordnet sind, unbekannt sind, bevor das Codieren tatsächlich geschieht, kann der Tokenselektor 108 auf der Grundlage bestimmter Heuristiken geschätzte Kosten zuordnen.
  • Bei einer Ausführungsform kann ein Token ein erstes Symbol (S1), welches entweder das unmittelbare Byte oder die Länge der übereinstimmenden Teilkette darstellt, und ein zweites Symbol (S2) umfassen, welches den Byte-Abstand darstellt, wenn das Token auf ein anderes Token rückverwiesen ist. Die Werte der unmittelbaren Bytes, der Teilkettenlängen und der Byte-Abstände können durch Symbole zusammen mit null oder mehreren zusätzlichen Bits dargestellt werden, welche durch das Codierschema spezifiziert sind. Folglich können die Kosten zum Codieren eines Tokens die Kosten zum Codieren der Symbole (S1, S2) plus der null oder mehreren zusätzlichen Bits umfassen. Die Anzahl zusätzlicher Bits, welche einem Symbol zugeordnet sind, kann gemäß bestimmten Abbildungstabellen des Codierschemas bestimmt werden. Unter einem Huffman-Codierschema stellt ein Symbol (S1) ein unmittelbares Byte ohne die Notwendigkeit für zusätzliche Bits dar. Einem Symbol (S1), welches den Wert einer Teilkettenlänge darstellt, können null oder mehrere zusätzliche Bits gemäß einer ersten Abbildungstabelle zugeordnet sein, welche den Wert auf zusätzliche Bits abbildet. Beispielsweise wird gemäß der ersten Abbildungstabelle eine Länge von 11 durch ein Symbol „265“ ohne ein zusätzliches Bit dargestellt und wird eine Länge von 12 durch das gleiche Symbol „265“ mit einem zusätzlichen Bit dargestellt. Genauso können einem Symbol (S1), welches den Wert eines Byte-Abstands darstellt, null oder mehrere zusätzliche Bits gemäß einer zweiten Abbildungstabelle zugeordnet sein. Bei einer Ausführungsform kann die zweite Abbildungstabelle den Wert eines Byte-Abstands auf bis zu 13 zusätzliche Bits abbilden.
  • Die zusätzlichen Bits, welche den Symbolen (S1, S2) zugeordnet sind, sind nicht codiert und können gemäß den Abbildungstabellen auf der Grundlage des unmittelbaren Byte, der Teilkettenlängen oder der Byte-Anstände ermittelt werden, welche in Token enthalten sind. Jedoch ist die genaue Anzahl von Bits, welche zum Codieren dieser Symbole (S1, S2) verwendet werden, bis nach der Huffman-Codierung nicht bekannt. Bei einer Ausführungsform kann der Tokenselektor 108 die Anzahl von Bits, welche zum Codieren dieser Symbole verwendet werden, gemäß einer bestimmten Schätzformel schätzen. Beispielsweise wird bei einer Ausführungsform die Anzahl von Bits zum Codieren als eine Funktion davon geschätzt, in welchem Block das Token ist. Wie oben stehend diskutiert, kann der Byte-Strom (oder genauso der Tokenstrom) gemäß einer Sequenz von Byte-Datenblöcken (oder Token) organisiert sein. Die Größen von Blöcken können vorbestimmt sein. Beispielsweise kann der erste Block 16k Bytes (oder Token) umfassen und jeder nachfolgende Block kann 64k Bytes (oder Token) umfassen. Für Symbole, welche Teilkettenlängen in dem ersten Block des Tokenstroms darstellen, wird, unter der Annahme einer minimalen Teilkettenlänge von 3, der Länge von 3 eine Schätzung von 3 Bits zugeordnet. Die Anzahl zugeordneter Bits erhöht sich linear auf 13 Bits bis zu einer Teilkettenlänge von 29 in dem ersten Block. Eine Länge länger als 13 wird mit 13 Bits abgeflacht. Für Symbole, welche Teilkettenlängen in den Blöcken darstellen, welche dem ersten Block nachfolgen, wird der Länge von 3 auch eine Schätzung von 3 Bits zugeordnet. Jedoch erhöht sich die Anzahl zugeordneter Bits linear auf 13 Bits für die Länge von 43, bevor sie bei 13 Bits abflacht. Weiterhin wird allen Symbolen, welche den Byte-Abstand darstellen, eine Schätzung von 5 Bits zugeordnet. Den Symbolen, welche ein unmittelbares Byte darstellen, kann in dem ersten Block eine Schätzung der durchschnittlichen Kosten von 8,5 Bits und in nachfolgenden Blöcken eine Schätzung der durchschnittlichen Kosten von 9,5 Bits zugeordnet werden. Die oben stehenden zugeordneten Bit-Schätzungen sind Beispiele. Es können auch andere zugeordnete Schätzungen verwendet werden.
  • Folglich können jeder Kante Kosten zugeordnet werden, welche die geschätzten Bits angeben (einschließlich der zugeordneten Bit-Schätzungen zum Codieren von Symbolen des Tokens und der zusätzlichen Bits, welche den Symbolen zugeordnet sind), um ein Codieren unter Verwendung der Knoten (oder der entsprechenden Token) durchzuführen, welche durch die Kante verbunden sind. Bei einer Ausführungsform kann der Tokenselektor 108 den Graph unter Verwendung eines geeigneten Graphdurchlaufverfahrens durchlaufen (z. B. Breite-zuerst- und Tiefe-zuerst-Durchlaufverfahren), um einen Weg zu bestimmen, welcher Kanten enthält, welche Knoten von einem ersten Ende des Graphen bis zu einem zweiten Ende des Graphen verbinden. Bei einer Ausführungsform wird der bestimmte Weg unter Verwendung von Kriterien geringster Kosten oder der geringsten Anzahl geschätzter Bits, um die Symbole entlang des Wegs zu codieren, ausgewählt. Die Kriterien geringster Kosten können den Weg, welcher unter allen potenziellen Wegen zwischen den beiden Enden die geringsten kumulierten Kosten entlang des Wegs aufweist, unter Verwendung beispielsweise des Dijkstra-Algorithmus oder des Floyd-Warshall-Algorithmus bestimmen. Das erste Ende und das zweite Ende können dem Anfangstoken oder dem Terminierungstoken in dem Tokenstrom entsprechen. Folglich kann der Tokenselektor 108 den Tokensatz auswählen, welcher den Knoten entlang des bestimmten Wegs entspricht, und den ausgewählten Tokensatz dem Huffman-Codierer 110 bereitstellen, um das Codieren auszuführen und eine Ausgabe erzeugen, welche eine komprimierte Version der Eingangsdaten ist.
  • Der Huffman-Codierer 110 kann eine geeignete Implementierung eines Entropiecodierers sein, welcher ausgelegt ist, den ausgewählten Tokensatz (oder die darin gespeicherten Symbole) zu codieren. Weil der erste Durchlauf des Graphen auf geschätzten Kosten basiert, welche Kanten zugeordnet sind, ist der ausgewählte Tokensatz eventuell nicht die beste Auswahl. Bei einer Ausführungsform können nach der Huffman-Codierung 110 die Kosten, welche Kanten entlang des Wegs zugeordnet sind, mit der tatsächlichen Anzahl von Bits aktualisiert werden, welche von dem Huffman-Codierer 110 verwendet werden, um Symbole entlang des Wegs zu Token zu codieren. Der Tokenselektor 108 kann dann den Graph auf der Grundlage der aktualisierten Kosten, welche Kanten in dem Graph zugeordnet sind, erneut durchlaufen, um einen zweiten Weg in dem Graph zu bestimmen. Der Tokenselektor 108 kann dann einen zweiten Tokensatz entlang des zweiten Wegs auswählen und dem Huffman-Codierer 110 für einen zweiten Codierlauf bereitstellen und andere Ausgabedaten erzeugen, welche eine andere komprimierte Version der Eingangsdaten sind.
  • Bei einer Ausführungsform wird die Größe der zweiten Ausgabedaten mit der Größe der ersten Ausgabedaten verglichen, um zu bestimmen, ob weitere Iterationen des Graphdurchlaufs und der Huffman-Codierung benötigt werden. Wenn bei einer Ausführungsform ein Verhältnis der Größendifferenz zwischen der zweiten Ausgabe und der Größe der ersten Ausgabe zu der Größe der ersten Ausgabe kleiner ist als ein Schwellenwert (z. B. 10 %), wird die Iteration gestoppt. Andernfalls kann die Iteration fortgesetzt werden, bis das Verhältnis den Terminierungsschwellenwert erreicht.
  • 3 illustriert einen beispielhaften Abschnitt eines Graphen 300, welcher von einem Tokenselektor gemäß einer Ausführungsform der vorliegenden Offenbarung erzeugt wurde. Wie in 3 gezeigt, kann der Graph 300 einen Abschnitt umfassen (wie beispielsweise Knoten 56 bis 61, wie in 3 gezeigt), welcher einem Abschnitt der Tokenpositionen 56 bis 61 in einem Tokenstrom entspricht, welche wiederum den Byte-Positionen 56 bis 61 in dem zugrundeliegenden Byte-Strom entsprechen. Vor dem Huffman Codieren können jeder Kante in dem Graph geschätzte Kosten zugeordnet werden, welche durch die Bezugszeichen C1 bis C9 dargestellt sind, wobei C1 bis C5 die Kosten zum Codieren eines unmittelbaren Byte darstellen und C6 bis C9 die Kosten zum Codieren von Token darstellen, welche eine Teilkettenlänge und einen Byte-Abstand umfassen. Zur Vereinfachung werden die Bezugszeichen C1 bis C9 verwendet, um sowohl Kanten als auch die Codierkosten darzustellen, welche den Kanten zugeordnet sind. Bestimmten Knoten (wie beispielsweise der Knoten 57) können Kanten (C1, C2) zugeordnet sein, welche nur mit ihren benachbarten Knoten (Knoten 56, 58) verbunden sind. Diese Knoten entsprechen Token, welche nur ein unmittelbares Byte enthalten, weil an diesen Positionen keine wiederholte Teilkette identifiziert wird. Anderen Knoten können Byte-Positionen zugeordnet sein, bei welchen ein oder mehrere übereinstimmende Teilketten gefunden wurden. Bei diesem Beispiel weist der Knoten 56 auf eine 5-Byte-Übereinstimmung mit Knoten 61 auf und ist deshalb über eine Kante (C8) mit dem Knoten 61 verbunden. Die Kanten (C7, C6) können aus Kante (C8) gefolgert werden, weil eine längere Übereinstimmung mehrere kürzere Übereinstimmungen an der gleichen Byte-Position impliziert. Für dieses Beispiel weisen die Kanten, welche übereinstimmende Knoten verbinden (wie beispielsweise C6 bis C9) eine minimale Länge von drei Bytes auf. Obwohl nicht gezeigt, können auch andere Kanten aus einem vorhergehenden Abschnitt des Graphen (wie beispielsweise aus Knoten vor dem Knoten 56) mit diesen Knoten verbunden sein, und die Knoten 56 bis 61 können auch mit Knoten über den Knoten 61 hinaus verbunden sein.
  • Ein geeigneter Graphdurchlaufalgorithmus kann verwendet werden, um einen Weg zu identifizieren, welcher einen ersten Knoten (z. B. Knoten 1) des Graphen mit einem Endknoten des Graphen verbindet. Der Weg kann gemäß bestimmten Kriterien (wie beispielsweise einem Kriterium der geringsten Kosten) ausgewählt werden, dass er durch eine ausgewählte Teilmenge von Knoten über Kanten verläuft, welche der Teilmenge von Knoten zugeordnet sind. Der Graphdurchlauf kann von dem Knoten 1 zu dem Endknoten oder vice versa fortschreiten. Dem Knoten 1 können Anfangscodierkosten zum Codieren eines unmittelbaren Byte oder Kosten von null Kosten zugeordnet sein, wenn ein spezieller Dummy-Knoten als der Knoten 1 verwendet wird. Der Durchlauf kann als eine Serie von Schritten aus einem Ursprung (was als ein Quellknoten bezeichnet wird) angesehen werden, um ein Ziel (was als ein Zielknoten bezeichnet wird) zu bestimmen. Ein Quellknoten kann mit einer Anzahl von potenziellen Zielknoten durch Kanten verbunden sein, welche dem Quellknoten zugeordnet sind. Allen potenziellen Zielknoten, welche von dem Quellknoten erreicht werden können, werden die Kosten, um bis zu dem Quellknoten zu codieren, plus die Kosten der Kante zugeordnet, welche zu diesen potenziellen Zielknoten führt. Der Zielknoten mit den geringsten Kosten kann in einem nächsten Schritt ein neuer Quellknoten werden, um während des Durchlaufs einen nächsten Zielknoten zu suchen. Folglich kann durch Durchlaufen des Graphen auf der Grundlage der Kosten, welche den Kanten in dem Graph zugeordnet sind, ein Weg mit geringsten Kosten von dem Knoten 1 zu dem Endknoten bestimmt werden.
  • Bei einer Ausführungsform erzeugt der Tokengenerator 106 nicht nur die längste übereinstimmende Byte-Teilkette für ein Byte in dem Byte-Strom in einem Token, sondern auch andere Übereinstimmungstypen in dem Token. Beispielsweise identifiziert der Tokengenerator 106 zusätzlich zum Identifizieren der längsten übereinstimmenden Teilkette einer Länge auch die nächste Übereinstimmung von Länge - 1 Bytes und/oder von Länge - 2 Bytes usw. Die zusätzlichen Informationen können in dem Token gespeichert werden, welches dem Tokenselektor 108 bereitgestellt wird. Der Tokenselektor 108 kann auf der Grundlage der zusätzlichen Informationen zusätzliche Kanten in dem Graph erzeugen, um die Kompressionsleistung zu verbessern.
  • 4 ist ein Blockdiagramm eines Verfahrens 400, um eine Datenkompression gemäß einer Ausführungsform der vorliegenden Offenbarung durchzuführen. Das Verfahren 400 kann durch Verarbeitungslogik durchgeführt werden, welche Hardware (z. B. einen Schaltkomplex, dedizierte Logik, programmierbare Logik, Mikrocode usw.), Software (wie beispielsweise Befehle, welche auf einer Verarbeitungsvorrichtung, einem Universalcomputersystem oder einer dedizierten Maschine laufen), Firmware oder eine Kombination davon umfassen kann. Bei einer Ausführungsform kann das Verfahren 400 teilweise durch Verarbeitungslogiken der Verarbeitungsvorrichtung 102 durchgeführt werden, wie in 1 gezeigt.
  • Zur Vereinfachung der Erklärung wird das Verfahren 400 als eine Serie von Aktionen dargestellt und beschrieben. Aktionen gemäß dieser Offenbarung können jedoch in verschieden Reihenfolgen und/oder gleichzeitig und mit anderen Aktionen auftreten, welche hier nicht dargestellt und beschrieben sind. Weiterhin müssen nicht alle illustrierten Aktionen durchgeführt werden, um das Verfahren 400 gemäß dem offenbarten Gegenstand zu implementieren. Außerdem verstehen und erkennen Durchschnittsfachleute, dass das Verfahren 400 ersatzweise als eine Serie in Wechselbeziehung stehender Zustände über ein Zustandsdiagramm oder über Ereignisse dargestellt werden kann.
  • Unter Bezugnahme auf 4 kann der Prozessor bei 402 einen Tokenstrom erhalten, welcher Token umfasst, welche aus einem Byte-Strom erzeugt wurden. Bei einer Ausführungsform kann der Tokenstrom durch eine Verarbeitungsfunktionseinheit, welche betriebsfähig an den Prozessor angeschlossen ist, auf der Grundlage des Byte-Stroms berechnet worden sein, welcher von dem Prozessor erhalten wurde. Ersatzweise kann der Tokenstrom von dem Prozessor durch Ausführen von Software-Anwendungen auf der Grundlage des erhaltenen Byte-Stroms berechnet werden. Jedes Token in dem Tokenstrom kann einem Byte in dem Byte-Strom entsprechen und jedes Token kann ein erstes Symbol enthalten, welches eine Länge einer ersten Byte-Teilkette umfasst, wenn die erste Byte-Teilkette mit einer zweiten Byte-Teilkette übereinstimmt, welche vor der ersten Byte-Teilkette angeordnet ist, oder ein unmittelbares Byte umfasst, wenn die erste Byte-Teilkette keine übereinstimmende zweite Byte-Teilkette aufweist. Das Token kann ein zweites Symbol enthalten, welches einen Byte-Abstand zwischen der ersten Byte-Teilkette und der zweiten Byte-Teilkette umfasst. Der Byte-Abstand ist null, wenn es keine übereinstimmende zweite Byte-Teilkette gibt.
  • Als Reaktion auf Erhalten des Tokenstroms kann der Prozessor bei 404 einen Graph erzeugen, welcher Knoten und Kanten umfasst. Jeder Knoten in dem Graph kann einem Token in dem Tokenstrom entsprechen. Wenn ein Token Symbole enthält, welche angeben, dass das Token Informationen zwischen einer ersten Byte-Teilkette und einer zweiten übereinstimmenden Byte-Teilkette enthält, kann der Prozessor eine Kante erzeugen, um das erste Token, welches dem Anfangs-Byte der ersten Byte-Teilkette entspricht, und das zweite Token zu verbinden, welches dem Anfangs-Byte der zweiten Byte-Teilkette entspricht. Der Prozessor kann der Kante Codierkosten zuordnen. Die Codierkosten sind eine Schätzung darüber, wie viele Bits benötigt werden, um Symbole zu codieren, welche dem ersten Token zugeordnet sind. Folglich sind jeder Kante in dem Graph geschätzte Kosten zugeordnet.
  • Bei 406 kann der Prozessor auf der Grundlage des Graphen gemäß bestimmten Kriterien einen Weg zwischen einem Anfangstoken des Tokenstroms und einem Endknoten identifizieren, welcher einem letzten Token des Tokenstroms zugeordnet ist. Bei einer Ausführungsform können die Kriterien ein Kriterium der geringsten Kosten umfassen, welches den Weg mit den geringsten akkumulierten Gesamtkosten (oder Bits, welche zum Codieren von Symbolen verwendet werden, welche Knoten zugeordnet sind) entlang des Wegs auswählt. Der Weg kann durch Knoten laufen, welche einer Teilmenge von Token entsprechen, welche Rückverweise und unmittelbare Bytes umfassen, um den Byte-Eingangsstrom ausreichend darzustellen.
  • Bei 408 kann der Prozessor eine Entropiecodierung (wie beispielsweise eine Huffman-Codierung) der identifizierten Teilmenge von Token durchführen, welche den Knoten auf dem Weg entsprechen, um eine Ausgabe einer komprimierten Version der Eingangsdaten zu erzeugen.
  • 5A ist ein Blockdiagramm, welches eine Mikroarchitektur für einen Prozessor 500 illustriert, welcher die Verarbeitungsvorrichtung implementiert, welche gemäß einer Ausführungsform der Offenbarung heterogene Kerne umfasst. Insbesondere stellt der Prozessor 500 einen Kern mit In-Order-Architektur und eine Registerumbenennungslogik, eine Out-of-Order-Problem/Ausführungslogik dar, welche gemäß mindestens einer Ausführungsform der Offenbarung in einen Prozessor aufgenommen werden soll.
  • Der Prozessor 500 umfasst eine Vorfeldeinheit 530, welche mit einer Ausführungsfunktionseinheit 550 verbunden ist, und beide sind mit einer Speichereinheit 570 verbunden. Der Prozessor 500 kann einen Computerkern mit reduziertem Befehlssatz (RISC), einen Computerkern mit komplexem Befehlssatz (CISC), einen Kern mit sehr langem Befehlswort (VLIW) oder einen hybriden oder alternativen Kerntyp umfassen. Als wieder eine andere Option kann der Prozessor 500 ein Spezialkern umfassen, wie beispielsweise einen Netzwerk- oder Kommunikationskern, eine Kompressionsfunktionseinheit, einen Grafikkern oder dergleichen. Bei einer Ausführungsform kann der Prozessor 500 ein mehrkerniger Prozessor sein, oder er kann Teil eines Parallelprozessorsystems sein.
  • Die Vorfeldeinheit 530 umfasst eine Zweigprädiktionseinheit 532, welche mit einer Befehls-Cache-Einheit 534 verbunden ist, welche mit einem Befehlsübersetzungs-Lookaside-Puffer (TLB) 536 verbunden ist, welcher mit einer Befehlsabrufeinheit 538 verbunden ist, welche mit einer Decodiereinheit 540 verbunden ist. Die Decodiereinheit 540 (auch als ein Decodierer bekannt) kann Befehle decodieren und eine oder mehrere Mikrooperationen, Mikrocode-Einsprungstellen, Mikrobefehle, andere Befehle oder andere Steuerungssignale als eine Ausgabe erzeugen, welche aus den ursprünglichen Befehlen decodiert werden oder diese auf andere Weise wiedergeben oder aus diesen abgeleitet werden. Der Decodierer 540 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele geeigneter Mechanismen umfassen, ohne jedoch darauf beschränkt zu sein, Suchtabellen, Hardware-Implementierungen, programmierbare Logik-Arrays (PLAs), Mikrocode-Nur-Lese-Speicher (ROMs) usw. Die Befehls-Cache-Einheit 534 ist ferner mit der Speichereinheit 570 verbunden. Die Decodiereinheit 540 ist mit einer Umbenennungs-/Zuordnungseinheit 552 in der Ausführungsfunktionseinheit 550 verbunden.
  • Die Ausführungsfunktionseinheit 550 umfasst die Umbenennungs-/Zuordnungseinheit 552, welche mit einer Ruheeinheit 554 und einem Satz einer oder mehrerer Einplanungseinheit(en) 556 verbunden ist. Die Einplanungseinheit(en) 556 repräsentiert eine beliebige Anzahl verschiedener Einplaner, einschließlich Reservierungsstationen (RS), einem zentralen Befehlsfenster usw. Die Einplanungseinheit(en) 556 ist(sind) mit der(den) physikalischen Registerdatei(en)-Einheit(en) 558 verbunden. Jede der physikalischen Registerdatei(en)-Einheiten 558 repräsentiert eine oder mehrere physikalische Registerdateien, von welchen verschiedene einen oder mehrere unterschiedliche Datentypen speichern, wie beispielsweise eine skalare ganze Zahl, eine skalare Fließkommazahl, eine gepackte ganze Zahl, eine gepackte Fließkommazahl, einen Vektor ganzer Zahlen, einen Vektor aus Fließkommazahlen usw., einen Status (z. B. einen Befehlszeiger, welcher die Adresse des nächsten Befehls ist, welcher ausgeführt werden soll) usw. Die physikalische(n) Registerdatei(en)-Einheit(en) 558 wird von der Ruheeinheit 554 überlappt, um verschiedene Weisen zu illustrieren, auf welchen eine Registerumbenennung und eine Out-of-Order-Ausführung implementiert werden kann (z. B. unter Verwendung eines Aufzeichnungspuffers (von Aufzeichnungspuffern) und einer Ruheregisterdatei (von Ruheregisterdateien), unter Verwendung einer Zukunftsdatei (von Zukunftsdateien), eines Historienpuffers (von Historienpuffern) und einer Ruheregisterdatei (von Ruheregisterdateien); unter Verwendung von Registerabbildungen und einem Registerpool; usw.).
  • Bei einer Implementierung kann der Prozessor 500 der gleiche wie der Prozessor 102 sein, welcher hinsichtlich 1A beschrieben wurde.
  • Im Allgemeinen sind die Strukturregister von außerhalb des Prozessors oder aus der Perspektive eines Programmierers sichtbar. Die Register sind nicht auf einen bestimmten bekannten Schaltungstyp beschränkt. Verschiedene unterschiedliche Registertypen sind geeignet, solange sie in der Lage sind, Daten zu speichern und bereitzustellen, wie hier beschrieben. Beispiele geeigneter Register umfassen, ohne jedoch darauf beschränkt zu sein, dedizierte physikalische Register, dynamisch zugeordnete physikalische Register unter Verwendung von Registerumbenennung, Kombinationen dedizierter und dynamisch zugeordneter physikalischer Register usw. Die Ruheeinheit 554 und die physikalische Registerdatei(en)-Einheit(en) 558 sind mit dem(den) Ausführungs-Cluster(n) 560 verbunden. Der(die) Ausführungs-Cluster 560 umfasst einen Satz einer oder mehrerer Ausführungseinheiten 562 und einen Satz einer oder mehrerer Speicherzugriffseinheiten 564. Die Ausführungseinheiten 562 können verschiedene Operationen durchführen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und mit verschiedenen Datentypen operieren (z. B. skalare Fließkommazahl, gepackte ganze Zahl, gepackte Fließkommazahl, Vektor ganzer Zahlen, Vektor von Fließkommazahlen).
  • Während manche Ausführungsformen eine Anzahl von Ausführungseinheiten umfassen können, welche für spezifische Funktionen oder Funktionssätze vorgesehen sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, von welchen jede alle Funktionen durchführt. Die Einplanungseinheit(en) 556, die physikalische(n) Registerdatei(en)-Einheit(en) 558 und der(die) Ausführungs-Cluster 560 werden als möglicherweise Mehrzahl gezeigt, weil bestimmte Ausführungsformen separate Pipelines für bestimmte Datentypen/Operationen erzeugen (z. B. eine Pipeline für skalare ganze Zahlen, eine Pipeline für skalare Fließkommazahlen/gepackte ganze Zahlen/gepackte Fließkommazahlen/Vektoren ganzer Zahlen/Vektoren von Fließkommazahlen und/oder eine Pipeline für Speicherzugriffe, welche jede ihre eigene Einplanungseinheit, physikalische Registerdatei(en)-Einheit und/oder ihre eigenen Ausführungs-Cluster aufweisen - und im Fall einer separaten Pipeline für Speicherzugriffe werden bestimmte Ausführungsformen implementiert, bei welchen nur der Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 564 aufweist). Es versteht sich auch, dass wo separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Problem/Ausführung und der Rest In-Order sein können.
  • Der Satz Speicherzugriffseinheiten 564 ist mit der Speichereinheit 570 verbunden, welche einen Datenvorabrufer 580, eine Daten-TLB-Einheit 572, eine Daten-Cache-Einheit (DCU) 574 und eine Level-2-(L2)-Cache-Einheit 576 aufweisen kann, um ein paar Beispiele zu nennen. Bei manchen Ausführungsformen ist die DCU 574 auch als ein Level-1-Daten-Cache (LI-Cache) bekannt. Die DCU 574 kann mehrfache unerledigte Cache-Fehlgriffe bewältigen und fortfahren, eingehende Speicherungen und Ladungen zu bedienen. Sie unterstützt auch ein Erhalten einer Cache-Kohärenz. Die Daten-TLB-Einheit 572 ist ein Cache, welcher verwendet wird, um eine Übersetzungsgeschwindigkeit virtueller Adressen durch Abbilden virtueller und physikalischer Adressräume zu verbessern. Bei einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 564 eine Ladeeinheit, eine Speicheradresseinheit und eine Speicherdateneinheit umfassen, von welchen jede mit der Daten-TLB-Einheit 572 in der Speichereinheit 570 verbunden ist. Die L2-Cache-Einheit 576 kann mit einem oder mehreren anderen Cache-Levels und schließlich mit einem Hauptspeicher verbunden sein.
  • Bei einer Ausführungsform lädt/vorabruft der Datenvorabrufer 580 Daten spekulativ in die DCU 574 durch automatisches Vorhersagen, welche Daten ein Programm gerade benötigen wird. Vorabrufen kann ein Übertragen von Daten, welche in einem Speicherort einer Speicherhierarchie (z. B. Caches oder Speicher mit niedrigem Level) gespeichert sind, an einen Speicherort mit höherem Level bezeichnen, welcher näher (was z. B. eine geringere Zugriffslatenz ergibt) an dem Prozessor ist, bevor die Daten tatsächlich von dem Prozessor angefordert werden. Insbesondere kann Vorabrufen das frühe Abrufen von Daten aus Caches/Speichern mit niedrigerem Level in einen Daten-Cache und/oder in einen Vorabrufpuffer bezeichnen, bevor der Prozessor eine Anforderung zum Abfragen der spezifischen Daten ausgibt.
  • Der Prozessor 500 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, welche bei neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, CA; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen, wie beispielsweise NEON) der ARM Holdings in Sunnyvale, CA).
  • Es versteht sich, dass der Kern eine Multi-Thread-Verarbeitung (Ausführen von mindestens zwei parallelen Sätzen von Operationen oder Threads) unterstützen kann, und dies auf verschiedene Weisen tun kann, welche eine Zeitscheiben-Multi-Thread-Verarbeitung, eine gleichzeitige Multi-Thread-Verarbeitung (wo ein einzelner physikalischer Kern einen logischen Kern für jeden der Threads bereitstellt, welche dieser physikalische Kern gleichzeitig per Multi-Thread-Verarbeitung verarbeitet) oder eine Kombination davon umfasst (z. B. Zeitscheibenabrufen und Decodieren und danach eine gleichzeitige Multi-Thread-Verarbeitung, wie beispielsweise bei der IntelⓇ-Hyperthreading-Technik).
  • Während eine Registerumbenennung in dem Kontext einer Out-of-Oder-Ausführung beschrieben ist, versteht es sich, dass eine Registerumbenennung in einer In-Oder-Architektur verwendet werden kann. Während die illustrierte Ausführungsform des Prozessors auch separate Befehls- und Daten-Cache-Einheiten und eine gemeinsam genutzte L2-Cache-Einheit umfasst, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Befehle als auch für Daten aufweisen, wie beispielsweise einen internen Level-1-(L1)-Cache oder mehrere Level interner Caches. Bei manchen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache umfassen, welcher außerhalb des Kerns und/oder des Prozessors ist. Ersatzweise können alle Caches außerhalb des Kerns und/oder des Prozessors sein.
  • 5B ist ein Blockdiagramm, welches eine In-Order-Pipeline und eine Registerumbenennungsstufe, eine Out-of-Order-Problem/Ausführungs-Pipeline illustriert, welche durch die Verarbeitungsvorrichtung 500 der 5A gemäß manchen Ausführungsformen der Offenbarung implementiert sind. Die durchgezogen gezeichneten Kästchen in 5B illustrieren eine In-Order-Pipeline, während die unterbrochen gezeichneten Kästchen eine Out-of-Order-Problem/Ausführungs-Pipeline zur Registerumbenennung illustrieren. In 5B umfasst eine Prozessor-Pipeline 500 eine Abrufstufe 502, eine Längendecodierstufe 504, eine Decodierstufe 506, eine Zuordnungsstufe 508, eine Umbenennungsstufe 510, eine Einplanungstufe 512 (auch als eine Abfertigungs- oder Ausgabestufe bekannt), eine Registerlese-/Speicherlesestufe 514, eine Ausführungsstufe 516, eine Zurückschreib-/Speicherschreibstufe 518, eine Ausnahmebehandlungsstufe 522 und eine Übergabestufe 524. Bei manchen Ausführungsformen kann die Reihenfolge der Stufen 502 bis 524 von der illustrierten verschieden sein, und sie sind nicht auf die spezifische in 5B gezeigte Reihenfolge beschränkt.
  • 6 illustriert ein Blockdiagramm der Mikroarchitektur für einen Prozessor 600, welcher gemäß einer Ausführungsform der Offenbarung hybride Kerne umfasst. Bei manchen Ausführungsformen kann ein Befehl gemäß einer Ausführungsform implementiert sein, um mit Datenelementen, welche Größen eines Byte, eines Worts, eines Doppelworts, eines Vierfachworts usw. aufweisen, sowie mit Datentypen zu arbeiten, wie beispielsweise Datentypen einfacher ganzer Zahlen und von solchen mit doppelter Länge sowie von Fließkommazahlen. Bei einer Ausführungsform ist die In-Order-Vorfeldeinheit 601 der Teil des Prozessors 600, welcher Befehle abruft, welche ausgeführt werden sollen, und sie vorbereitet, damit sie später in der Prozessor-Pipeline verwendet werden.
  • Die Vorfeldeinheit 601 kann mehrere Einheiten umfassen. Bei einer Ausführungsform ruft der Befehlsvorabrufer 626 Befehle aus einem Speicher ab und speist sie einem Befehlsdecodierer 628 ein, welcher sie wiederum decodiert oder interpretiert. Beispielsweise decodiert der Decodierer bei einer Ausführungsform einen erhaltenen Befehl in eine oder mehrere Operationen, welche „Mikrobefehle“ oder „Mikrooperationen“ genannt werden (auch micro op oder uops genannt), welche die Maschine ausführen kann. Bei anderen Ausführungsformen zergliedert der Decodierer den Befehl zu einen Operationscode und entsprechenden Daten und Steuerfeldern, welche von der Mikroarchitektur verwendet werden, um Operationen gemäß einer Ausführungsform durchzuführen. Bei einer Ausführungsform nimmt der Spuren-Cache 630 decodierte uops und setzt sie zu programmgeordneten Sequenzen oder Spuren in der uop-Warteschlange 634 zur Ausführung zusammen. Wenn der Spuren-Cache 630 auf einen komplexen Befehl trifft, stellt der Mikrocode-ROM 632 die uops bereit, welche zum Abschließen der Operation benötigt werden.
  • Einige Befehle werden zu einer einzelnen Mikrooperation umgewandelt, wohingegen andere mehrere Mikrooperationen benötigen, um die volle Operation abzuschließen. Wenn bei einer Ausführungsform mehr als vier Mikrooperationen benötigt werden, um einen Befehl abzuschließen, greift der Decodierer 628 auf den Mikrocode-ROM 632 zu, um den Befehl auszuführen. Für eine Ausführungsform kann ein Befehl zu einer kleinen Anzahl von Mikrooperationen zum Verarbeiten an dem Befehlsdecodierer 628 decodiert werden. Bei einer anderen Ausführungsform kann ein Befehl innerhalb des Mikrocode-ROM 632 gespeichert werden, wenn eine Anzahl von Mikrooperationen benötigt werden sollte, um die Operation zu erzielen. Der Spuren-Cache 630 verweist auf ein programmierbares Logik-Array (PLA) für Einsprungstellen, um einen korrekten Mikrobefehlszeiger zum Lesen der Mikrocodesequenzen zu bestimmen, um einen oder mehrere Befehle gemäß einer Ausführungsform aus dem Mikrocode-ROM 632 abzuschließen. Nachdem der Mikrocode-ROM 632 ein Sequenzieren von Mikrooperationen für einen Befehl beendet, fährt die Vorfeldeinheit 601 der Maschine mit dem Abrufen von Mikrooperationen aus dem Spuren-Cache 630 fort.
  • In der Out-of-Order-Ausführungsfunktionseinheit 603 werden die Befehle zur Ausführung vorbereitet. Die Out-of-Order-Ausführungslogik weist eine Anzahl von Puffern auf, um den Strom von Befehlen beim Durchgang durch die Pipeline und beim Einplanen zur Ausführung zu glätten und neu zu ordnen, um ein Leistungsvermögen zu optimieren. Die Zuordnungslogik teilt die Maschinenpuffer und Betriebsmittel zu, welche jede uop benötigt, um ausgeführt zu werden. Die Registerumbenennungslogik benennt Logikregister auf Einträge in einer Registerdatei um. Der Zuordner teilt auch einen Eintrag für jede uop in eine der zwei uop-Warteschlangen, eine für Speicheroperationen und eine für Nicht-Speicheroperationen, vor den Befehlseinplanern zu: Speichereinplaner, schneller Einplaner 602, langsamer/allgemeiner Fließkommazahleinplaner 604 und einfacher Fließkommazahleinplaner 606. Die uop-Einplaner 602, 604, 606 bestimmen, wann eine uop bereit ist, ausgeführt zu werden, auf der Grundlage der Bereitschaft ihrer abhängigen Eingangsregister-Operandenquellen und der Verfügbarkeit der Ausführungsressourcen, welche die uops benötigen, um ihre Operation abzuschließen. Der schnelle Einplaner 602 einer Ausführungsform kann bei jeder Hälfte des Haupttaktzyklus einplanen, während die anderen Einplaner nur einmal pro Hauptprozessor-Taktzyklus einplanen können. Die Einplaner entscheiden die Abfertigungsports zum Einplanen von uops zur Ausführung.
  • Zwischen den Einplanern 602, 604, 606 und den Ausführungseinheiten 612, 614, 616, 618, 620, 622, 624 in dem Ausführungsblock 611 sitzen die Registerdateien 608, 610. Es gibt eine separate Registerdatei 608, 610 für Ganzzahl- bzw. Fließkommazahloperationen. Jede Registerdatei 608, 610 einer Ausführungsform umfasst auch ein Umgehungsnetzwerk, welches gerade abgeschlossene Ergebnisse, welche bis jetzt nicht in die Registerdatei geschrieben wurden, umgehen oder an neue abhängige uops weiterleiten kann. Die Ganzzahl-Registerdatei 608 und die Fließkommazahl-Registerdatei 610 sind auch in der Lage, untereinander Daten zu kommunizieren. Für eine Ausführungsform ist die Ganzzahl-Registerdatei 608 in zwei separate Registerdateien aufgeteilt, eine Registerdatei für die niederwertigen 32 Bits der Daten und eine zweite Registerdatei für die höherwertigen 32 Bits der Daten. Die Fließkommazahl-Registerdatei 610 einer Ausführungsform weist 128 Bits breite Einträge auf, weil Fließkommazahlbefehle typischerweise Operanden mit einer Breite von 64 bis 128 Bits aufweisen.
  • Der Ausführungsblock 611 enthält die Ausführungseinheiten 612, 614, 616, 618, 620, 622, 624, wo die Befehle tatsächlich ausgeführt werden. Dieser Abschnitt umfasst die Registerdateien 608, 610, welche die Werte der Ganzzahl- und Fließkommazahl-Datenoperanden speichern, welche von den Mikrobefehlen ausgeführt werden müssen. Der Prozessor 600 einer Ausführungsform umfasst eine Anzahl von Ausführungseinheiten: eine Adresserzeugungseinheit (AGU) 612, AGU 614, eine schnelle ALU 616, eine schnelle ALU 618, eine langsame ALU 620, eine Fließkommazahl-ALU 622, eine Fließkommazahl-Bewegungseinheit 624. Bei einer Ausführungsform führen die Fließkommazahl-Ausführungsblöcke 622, 624 Fließkommazahl-, MMX-, SIMD- und SSE- oder andere Operationen aus. Die Fließkommazahl-ALU 622 einer Ausführungsform umfasst einen Fließkommazahlteiler von 64 Bits durch 64 Bits, um Divisions-, Quadratwurzel- und Rest-Mikrooperationen auszuführen. Für Ausführungsformen der vorliegenden Offenbarung können Befehle, welche einen Fließkommazahlenwert einbeziehen, mit der Fließkommazahl-Hardware abgewickelt werden.
  • Bei einer Ausführungsform gehen die ALU-Operationen an die Hochgeschwindigkeits-ALU-Ausführungseinheiten 616, 618. Die schnellen ALU 616, 618 einer Ausführungsform können schnelle Operationen mit einer effektiven Latenz von einem halben Taktzyklus ausführen. Bei einer Ausführungsform gehen die meisten komplexen Ganzzahloperationen an die langsame ALU 620, da die langsame ALU 620 Ganzzahlausführungs-Hardware für Operationen vom langen Latenztyp umfasst, wie beispielsweise einen Multiplizierer, Verschieber, Kennzeichenlogik und Zweigverarbeitung. Speicherlade-/speicheroperationen werden durch die AGU 612, 614 ausgeführt. Für eine Ausführungsform sind die Ganzzahl-ALU 616, 618, 620 in dem Kontext des Durchführens von Ganzzahloperationen auf Datenoperanden von 64 Bits beschrieben. Bei alternativen Ausführungsformen können die ALU 616, 618, 620 implementiert sein, um verschiedene Datenbits zu unterstützen, welche 16, 32, 128, 256 usw. umfassen. Genauso können die Fließkommazahleinheiten 622, 624 implementiert sein, um einen Bereich von Operanden mit Bits von verschiedenen Breiten zu unterstützen. Bei einer Ausführungsform können die Fließkommazahleinheiten 622, 624 auf 128 Bits breite gepackte Datenoperanden in Verbindung mit SIMD- und Multimedienbefehlen arbeiten.
  • Bei einer Ausführungsform fertigen die uops-Einplaner 602, 604, 606 abhängige Operationen ab, bevor die Ausführung der Elternlast beendet ist. Da uops spekulativ eingeplant und in dem Prozessor 600 ausgeführt werden, umfasst der Prozessor 600 auch Logik, um Speicherfehlgriffe zu behandeln. Wenn eine Datenladung in dem Daten-Cache fehlt, können abhängige Operationen gerade in der Pipeline vorhanden sein, welche den Einplaner mit vorübergehend inkorrekten Daten verlassen haben. Ein Wiederholungsmechanismus verfolgt Befehle, welche inkorrekte Daten verwenden, und führt sie erneut aus. Nur die abhängigen Operationen müssen wiederholt werden und den unabhängigen wird ermöglicht, abgeschlossen zu werden. Die Einplaner und der Wiederholungsmechanismus einer Ausführungsform eines Prozessors sind auch ausgelegt, Befehlssequenzen für Vergleichsoperationen von Textketten zu erfassen.
  • Der Prozessor 600 umfasst auch Logik, um eine Speicheradressenvorhersage zur Speicherdisambiguierung gemäß Ausführungsformen der Offenbarung zu implementieren. Bei einer Ausführungsform kann der Ausführungsblock 611 des Prozessors 600 einen Speicheradressenvorhersager (nicht gezeigt) zum Implementieren einer Speicheradressenvorhersage zur Speicherdisambiguierung umfassen.
  • Der Begriff „Register“ kann Prozessorspeicherorte auf der Platine bezeichnen, welche als Teil von Befehlen verwendet werden, um Operanden zu identifizieren. Mit anderen Worten, Register können solche sein, welche von außerhalb des Prozessors verwendbar sind (aus der Perspektive eines Programmierers). Jedoch dürfen die Register einer Ausführungsform nicht in ihrer Bedeutung auf einen bestimmten Schaltungstyp beschränkt werden. Stattdessen ist ein Register einer Ausführungsform in der Lage, Daten zu speichern und bereitzustellen und die hier beschriebenen Funktionen durchzuführen. Die hier beschriebenen Register können durch einen Schaltkomplex innerhalb eines Prozessors unter Verwendung einer beliebigen Anzahl von verschiedenen Verfahren implementiert werden, wie beispielsweise dedizierte physikalische Register, dynamisch zugeordnete physikalische Register unter Verwendung von Registerumbenennung, Kombinationen dedizierter und dynamisch zugeordneter physikalischer Register usw. Bei einer Ausführungsform speichern Ganzzahlregister Ganzzahldaten von zweiunddreißig Bits. Eine Registerdatei einer Ausführungsform enthält auch acht Multimedien-SIMD-Register für gepackte Daten.
  • Für die nachfolgenden Diskussionen werden die Register als Datenregister verstanden, welche ausgelegt sind, gepackte Daten zu halten, wie beispielsweise 64 Bits breite MMXTM-Register (welche in manchen Fällen auch als ,mm‘-Register bezeichnet werden) in Mikroprozessoren mit MMX-Technik von Intel Corporation in Santa Clara, Kalifornien. Diese MMX-Register, welche sowohl in einer Ganzzahl- als auch in einer Fließkommazahlform verfügbar sind, können mit gepackten Datenelementen arbeiten, welche SIMD- und SSE-Befehle begleiten. Genauso können auch 128 Bits breite XMM-Register, welche SSE2-, SSE3-, SSE4- oder höher (generisch als „SSEx-“ bezeichnet) Technik betreffen, verwendet werden, um derartige gepackte Datenoperanden zu halten. Bei einer Ausführungsform müssen beim Speichern von gepackten Daten und von Ganzzahldaten die Register nicht zwischen den beiden Datentypen unterscheiden. Bei einer Ausführungsform sind ganze Zahlen und Fließkommazahlen entweder in der gleichen Registerdatei oder in verschiedenen Registerdateien enthalten. Weiterhin können bei einer Ausführungsform Fließkommazahl- und Ganzzahldaten in verschiedenen Registern oder in den gleichen Registern gespeichert werden.
  • Jetzt unter Bezugnahme auf 7 ist ein Blockdiagramm gezeigt, welches ein System 700 illustriert, bei welchem eine Ausführungsform der Offenbarung verwendet werden kann. Wie in 7 gezeigt, ist das Multiprozessorsystem 700 ein Punkt-zu-Punkt-Verbindungssystem und umfasst einen ersten Prozessor 770 und einen zweiten Prozessor 780, welche über eine Punkt-zu-Punkt-Zwischenverbindung 750 verbunden sind. Während es mit nur zwei Prozessoren 770, 780 gezeigt ist, versteht es sich, dass der Schutzumfang der Ausführungsformen der Offenbarung nicht so beschränkt ist. Bei anderen Ausführungsformen können ein oder mehrere zusätzliche Prozessoren in einem gegebenen Prozessor vorhanden sein. Bei einer Ausführungsform kann das Multiprozessorsystem 700 hybride Kerne implementieren, wie hier beschrieben.
  • Die Prozessoren 770 und 780 sind so gezeigt, dass sie integrierte Speichersteuerungseinheiten 772 bzw. 782 umfassen. Der Prozessor 770 umfasst als Teil seiner Bussteuerungseinheiten auch die Punkt-zu-Punkt-(P-P)-Schnittstellen 776 und 778; genauso umfasst der zweite Prozessor 780 die P-P-Schnittstellen 786 und 788. Die Prozessoren 770, 780 können unter Verwendung der P-P-Schnittstellenschaltungen 778, 788 Informationen über eine Punkt-zu-Punkt-(P-P)-Schnittstelle 750 austauschen. Wie in 7 gezeigt, verbinden die IMC 772 und 782 die Prozessoren mit jeweiligen Speichern, namentlich einem Speicher 732 und einem Speicher 734, welche Abschnitte des Hauptspeichers sein können, welcher lokal an die jeweiligen Prozessoren angeschlossen ist.
  • Die Prozessoren 770, 780 können jeder über individuelle P-P-Schnittstellen 752, 754 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 776, 794, 786, 798 Informationen mit einem Chipsatz 790 austauschen. Der Chipsatz 790 kann auch über eine Hochleistungs-Grafikschnittstelle 739 Informationen mit einer Hochleistungs-Grafikschaltung 738 austauschen.
  • Ein gemeinsam genutzter Cache (nicht gezeigt) kann in einem Prozessor enthalten sein oder außerhalb von beiden Prozessoren sein, jedoch derartig über eine P-P-Zwischenverbindung mit den Prozessoren verbunden sein, dass lokale Cache-Informationen eines Prozessors oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden können, wenn ein Prozessor in eine Betriebsart mit geringer Leistung gebracht wird.
  • Der Chipsatz 790 kann über eine Schnittstelle 796 mit einem ersten Bus 716 verbunden sein. Bei einer Ausführungsform kann der erste Bus 716 ein Peripheral-Component-Interconnect-(PCI)-Bus oder ein Bus sein, wie beispielsweise ein PCI-Express-Bus oder ein anderer E/A-Zwischenverbindungsbus der dritten Generation, obwohl der Schutzumfang der vorliegenden Offenbarung nicht so beschränkt ist.
  • Wie in 7 gezeigt, können verschiedene E/A-Vorrichtungen 714 mit dem ersten Bus 716 zusammen mit einer Busbrücke 718 verbunden sein, welche den ersten Bus 716 mit einem zweiten Bus 720 verbindet. Bei einer Ausführungsform kann der zweite Bus 720 ein Bus mit geringer Anschlusszahl (LPC-Bus) sein. Verschiedene Vorrichtungen können bei einer Ausführungsform mit dem zweiten Bus 720 verbunden sein, einschließlich beispielsweise eine Tastatur und/oder Maus 722, Kommunikationsvorrichtungen 727 und eine Speichereinheit 728, wie beispielsweise ein Plattenlaufwerk oder eine andere Massenspeichervorrichtung, welche Befehle/Code und Daten 730 umfassen kann. Weiterhin kann ein Audio-E/A 724 mit dem zweiten Bus 720 verbunden sein. Es ist zu beachten, dass andere Architekturen möglich sind. Beispielsweise kann ein System an Stelle der Punkt-zu-Punkt-Architektur der 7 einen Mehrpunktbus oder eine andere derartige Architektur implementieren.
  • Jetzt unter Bezugnahme auf 8 ist ein Blockdiagramm eines Systems 800 gezeigt, bei welchem eine Ausführungsform der Offenbarung arbeiten kann. Das System 800 kann einen oder mehrere Prozessoren 810, 815 umfassen, welche mit einer Grafikspeicher-Steuerungszentralstation (GMCH) 820 verbunden sind. Die optionale Natur der zusätzlichen Prozessoren 815 ist in 8 mit unterbrochenen Linien bezeichnet. Bei einer Ausführungsform implementieren die Prozessoren 810, 815 hybride Kerne gemäß Ausführungsformen der Offenbarung.
  • Jeder Prozessor 810, 815 kann eine beliebige Version aus Schaltkreis, integrierter Schaltkreis, Prozessor und/oder integrierter Silizium-Schaltkreis sein, wie oben stehend beschrieben. Es sollte jedoch angemerkt werden, dass es unwahrscheinlich ist, dass integrierte Grafiklogik- und integrierte Speichersteuerungseinheiten in den Prozessoren 810, 815 vorhanden sind. 8 illustriert, dass die GMCH 820 mit einem Speicher 840 verbunden sein kann, welcher beispielsweise ein dynamischer Schreib-/Lesespeicher (DRAM) sein kann. Der DRAM kann bei mindestens einer Ausführungsform einem nicht flüchtigen Cache zugeordnet sein.
  • Die GMCH 820 kann ein Chipsatz oder ein Abschnitt eines Chipsatzes sein. Die GMCH 820 kann mit dem(den) Prozessor(en) 810, 815 kommunizieren und eine Interaktion zwischen dem(den) Prozessor(en) 810, 815 und dem Speicher 840 steuern. Die GMCH 820 kann auch als eine beschleunigte Busschnittstelle zwischen dem(den) Prozessor(en) 810, 815 und anderen Elementen des Systems 800 fungieren. Bei mindestens einer Ausführungsform kommuniziert die GMCH 820 mit dem(den) Prozessor(n) 810, 815 über einen Mehrpunktbus, wie beispielsweise über einen Frontside-Bus (FSB) 895.
  • Weiterhin ist die GMCH 820 mit einer Anzeige 845 verbunden (wie beispielsweise einem Flachbildschirm oder einer berührungsempfindlichen Anzeige). Die GMCH 820 kann einen integrierten Grafikbeschleuniger umfassen. Die GMCH 820 ist ferner mit einer Eingabe/Ausgabe-(E/A)-Steuerungszentralstation (ICH) 850 verbunden, welche verwendet werden kann, um verschiedene Peripheriegeräte mit dem System 800 zu verbinden. Gezeigt ist beispielsweise bei der Ausführungsform der 8 eine externe Grafikvorrichtung 860, welche eine diskrete Grafikvorrichtung sein kann und welche zusammen mit einem anderen Peripheriegerät 870 mit der ICH 850 verbunden ist.
  • Ersatzweise können auch zusätzliche oder verschiedene Prozessoren in dem System 800 vorhanden sein. Beispielsweise kann ein zusätzlicher Prozessor (können zusätzliche Prozessoren) 815 einen zusätzlichen Prozessor (zusätzliche Prozessoren), welche die gleichen sind wie der Prozessor 810, einen zusätzlichen Prozessor (zusätzliche Prozessoren), welche heterogen oder asymmetrisch zu dem Prozessor 810 sind, Beschleuniger (wie beispielsweise Grafikbeschleuniger oder digitale Signalverarbeitungseinheiten (DSP)), feldprogrammierbare Gate-Array oder jeden anderen Prozessor umfassen. Es können verschiedene Unterschiede zwischen dem(den) Prozessor(en) 810, 815 in Bezug auf ein Spektrum von Gütemetriken vorhanden sein, welche Struktur-, Mikrostruktur-, thermische, Stromverbrauchs-Eigenschaften und dergleichen umfassen. Diese Unterschiede können sich effektiv als Asymmetrie und Heterogenität unter den Prozessoren 810, 815 zeigen. Bei mindestens einer Ausführungsform können sich die verschiedene Prozessoren 810, 815 in dem gleichen Chip-Paket befinden.
  • Jetzt unter Bezugnahme auf 9 ist ein Blockdiagramm eines Systems 900 gezeigt, bei welchem eine Ausführungsform der Offenbarung arbeiten kann. 9 illustriert die Prozessoren 970, 980. Bei einer Ausführungsform können die Prozessoren 970, 980 hybride Kerne implementieren, wie oben stehend beschrieben. Die Prozessoren 970, 980 können integrierten Speicher und E/A-Steuerungslogik („CL“) 972 bzw. 982 umfassen und untereinander über die Punkt-zu-Punkt-Zwischenverbindung 950 zwischen den Punkt-zu-Punkt-(P-P)-Schnittstellen 978 bzw. 988 kommunizieren. Die Prozessoren 970, 980 kommunizieren jeder über die Punkt-zu-Punkt-Zwischenverbindungen 952 und 954 durch die jeweiligen P-P-Schnittstellen 976 bis 994 und 986 bis 998 mit dem Chipsatz 990, wie gezeigt. Bei mindestens einer Ausführungsform kann die CL 972, 982 integrierte Speichersteuerungseinheiten umfassen. Die CL 972, 982 können E/A-Steuerungslogik umfassen. Wie dargestellt, sind die Speicher 932, 934 mit den CL 972, 982 verbunden, und die E/A-Vorrichtungen 914 sind auch mit der Steuerungslogik 972, 982 verbunden. Vorläufer-E/A-Vorrichtungen 915 sind über die Schnittstelle 996 mit dem Chipsatz 990 verbunden.
  • Ausführungsformen können in vielen verschiedenen Systemtypen implementiert werden. 10 ist ein Blockdiagramm eines SoC 1000 gemäß einer Ausführungsform der vorliegenden Offenbarung. Unterbrochen gezeichnete Kästchen sind optionale Merkmale auf fortgeschritteneren SoC. In 10 ist eine (sind) Zwischenverbindungseinheit(en) 1012 verbunden mit: einem Anwendungsprozessor 1020, welcher einen Satz eines oder mehrerer Kerne 1002A-N und eine gemeinsam genutzte Cache-Einheit(en) 1006 umfasst; einer Systemagenteneinheit 1010; einer Bussteuerungseinheit(en) 1016; einer integrierten Speichersteuerungseinheit(en) 1014; einem Satz oder einem oder mehreren Medienprozessoren 1018, welche integrierte Grafiklogik 1008, einen Bildprozessor 1024 zum Bereitstellen von Foto- und/oder Videokamerafunktionen, einen Audioprozessor 1026 zum Bereitstellen einer Hardware-Audiobeschleunigung und einen Videoprozessor 1028 zum Bereitstellen von Videocodier-/decodierbeschleunigung umfassen können; einer statischen Direktzugriffsspeicher-(SRAM)-Einheit 1030; einer Direktspeicherzugriffs-(DMA)-Einheit 1032; und einer Anzeigeeinheit 1040 zum Verbinden mit einer oder mehreren externen Anzeigen. Bei einer Ausführungsform kann ein Speichermodul in der(den) integrierten Speichersteuerungseinheit(en) 1014 enthalten sein. Bei einer anderen Ausführungsform kann das Speichermodul in einer oder mehreren anderen Komponenten des SoC 1000 enthalten sein, welches verwendet werden kann, auf einen Speicher zuzugreifen und/oder diesen zu steuern. Der Anwendungsprozessor 1020 kann einen Speicheradressenvorhersager zum Implementieren von hybriden Kernen umfassen, wie hier bei Ausführungsformen beschrieben.
  • Die Speicherhierarchie umfasst einen oder mehrere Level von Cache innerhalb der Kerne, einen Satz oder eine oder mehrere gemeinsam genutzte Cache-Einheiten 1006 und externen Speicher (nicht gezeigt), welcher mit dem Satz der integrierten Speichersteuerungseinheiten 1014 verbunden ist. Der Satz gemeinsam genutzter Cache-Einheiten 1006 kann ein oder mehrere Caches mit mittlerem Level umfassen, wie beispielsweise Level-2-(L2)-, Level-3-(L3)-, Level-4-(L4)- oder Caches anderer Level, ein Letzter-Level-Cache (LLC) und/oder Kombinationen davon.
  • Bei manchen Ausführungsformen, sind ein oder mehrere der Kerne 1002A-N in der Lage zu einer Multi-Thread-Verarbeitung. Der Systemagent 1010 umfasst solche Komponenten, welche die Kerne 1002A-N koordinieren und betreiben. Die Systemagenteneinheit 1010 kann beispielsweise eine Leistungssteuerungseinheit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Komponenten sein oder umfassen, welche zum Regulieren des Leistungszustands der Kerne 1002A-N und der integrierten Grafiklogik 1008 benötigt werden. Die Anzeigeeinheit dient zum Antreiben einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 1002A-N können in Bezug auf Architektur und/oder Befehlssatz homogen oder heterogen sein. Beispielsweise können einige der Kerne 1002A-N In-Order sein während andere Out-of-Order sind. Als ein anderes Beispiel können mindestens zwei der Kerne 1002A-N zur Ausführung des gleichen Befehlssatzes in der Lage sein, während andere zum Ausführen nur eine Teilmenge dieses Befehlssatzes oder eines verschiedenen Befehlssatzes in der Lage sein können.
  • Der Anwendungsprozessor 1020 kann ein Universalprozessor sein, wie beispielsweise ein Core™ i3, i5, i7, 2 Duo und Quad, Xeon™, Itanium™, Atom™ oder Quark™ Prozessor, welche erhältlich sind von Intel™ Corporation in Santa Clara, Kalifornien. Ersatzweise kann der Anwendungsprozessor 1020 von einer anderen Firma sein, wie beispielsweise ARM Holdings™, Ltd, MIPS™ usw. Der Anwendungsprozessor 1020 kann ein Spezialprozessor sein, wie beispielsweise ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsfunktionseinheit, ein Grafikprozessor, ein Co-Prozessor, ein eingebetteter Prozessor oder dergleichen. Der Anwendungsprozessor 1020 kann auf einem oder mehreren Chips implementiert sein. Der Anwendungsprozessor 1020 kann ein Teil eines oder mehrerer Substrate sein, und/oder er kann auf diesen unter Verwendung einer beliebigen aus einer Anzahl von Prozesstechniken implementiert sein, wie beispielsweise BiCMOS, CMOS oder NMOS.
  • 11 ist ein Blockdiagramm einer Ausführungsform eines System-on-Chip-(SoC)-Entwurfs gemäß der vorliegenden Offenbarung. Als ein spezifisches illustrierendes Beispiel ist der SoC 1100 in einem Benutzergerät (UE) enthalten. Bei einer Ausführungsform bezeichnet UE eine Vorrichtung, welche von einem Endbenutzer zum Kommunizieren verwendet wird, wie beispielsweise ein tragbares Telefon, ein Smartphone, ein Tablet-Computer, ein ultradünnes Notebook, ein Notebook mit Breitbandadapter oder jede andere ähnliche Kommunikationsvorrichtung. Oft verbindet sich ein UE mit einer Basisstation oder einem Knoten, welche in ihrer Natur einer Mobilstation (MS) in einem GSM-Netzwerk entsprechen.
  • Hier umfasst der SOC 1100 2 Kerne - 1106 und 1107. Die Kerne 1106 und 1107 können einer Befehlssatzarchitektur gehorchen, wie beispielsweise ein Prozessor auf der Grundlage von Intel® Architecture Core™, ein Prozessor von Advanced Micro Devices, Inc. (AMD), ein MIPS-basierter Prozessor, ein ARM-basierter Prozessorentwurf oder von einem Kunden davon sowie ihren Lizenznehmern oder Anwendern. Die Kerne 1106 und 1107 sind mit einer Cache-Steuerung 1108 verbunden, welcher die Busschnittstelleneinheit 1109 und der L2-Cache 1110 zugeordnet sind, um mit anderen Teilen des Systems 1100 zu kommunizieren. Die Zwischenverbindung 1110 umfasst eine Zwischenverbindung auf einem Chip, wie beispielsweise eine IOSF, AMBA oder eine andere oben stehend diskutierte Zwischenverbindung, welche potenziell einen oder mehrere Gesichtspunkte der beschriebenen Offenbarung implementiert. Bei einer Ausführungsform können die Kerne 1106, 1107 hybride Kerne implementieren, wie hier in Ausführungsformen beschrieben.
  • Die Zwischenverbindung 1110 stellt Kommunikationskanäle an die anderen Komponenten bereit, wie beispielsweise ein Teilnehmeridentitätsmodul (SIM) 1130, um eine SIM-Karte anzukoppeln, ein Boot-ROM 1135, um Boot-Code zur Ausführung durch die Kerne 1106 und 1107 zu halten, um den SoC 1100 zu initialisieren und hochzufahren, eine SDRAM-Steuervorrichtung 1140, um externen Speicher (z. B. DRAM 1160) anzukoppeln, eine Flash-Steuervorrichtung 1145, um nicht flüchtigen Speicher (z. B. Flash 1165) anzukoppeln, eine Peripheriesteuerung 1150 (z. B. Serial Peripheral Interface), um Peripheriegeräte anzukoppeln, Video- Codecs 1120 und eine Videoschnittstelle 1125, um eine Eingabe (z. B. eine berührungsempfindliche Eingabe) anzuzeigen und zu erhalten, eine GPU 1115, um auf Grafik bezogene Berechnungen durchzuführen, usw. Jede dieser Schnittstellen kann Gesichtspunkte der hier beschriebenen Offenbarung einbeziehen. Zusätzlich illustriert das System 1100 Peripheriegeräte zur Kommunikation, wie beispielsweise ein Bluetooth-Modul 1170, ein 3G-Modem 1175, ein GPS 1180 und Wi-Fi 1185.
  • 12 illustriert eine beispielhafte grafische Darstellung einer Maschine eines Computersystems 1200, bei welchem ein Satz von Befehlen zum Veranlassen der Maschine, eine oder mehrere der hier diskutierten Methodologien durchzuführen, ausgeführt werden kann. Bei alternativen Ausführungsformen kann die Maschine mit anderen Maschinen in einem LAN, einem Intranet, einem Extranet oder dem Internet verbunden (z. B. vernetzt) sein. Die Maschine kann in der Kapazität eines Servers oder eines Teilnehmergeräts in einer Client-Server-Netzwerkumgebung oder als eine Peer-Maschine in einer Peer-to-Peer-(oder verteilten)-Netzwerkumgebung arbeiten. Die Maschine kann ein Personal-Computer (PC), ein Tablet-PC, eine Set-Top-Box (STB), ein PDA-Minicomputer, ein Mobilfunktelefon, ein Webfähiges Gerät, ein Server, ein Netzwerk-Router, ein Koppler oder eine Brücke oder jede Maschine sein, welche zum Ausführen eines Satzes von Befehlen (sequenziell oder auf andere Weise) in der Lage ist, welche Aktionen spezifizieren, welche von der Maschine ausgeführt werden sollen. Während nur eine einzelne Maschine illustriert ist, soll der Begriff „Maschine“ ferner auch verstanden werden, jede Sammlung von Maschinen zu umfassen, welche individuell oder gemeinsam einen Satz (oder mehrere Sätze) von Befehlen ausführen, um eine oder mehrere der hier diskutierten Methodologien durchzuführen.
  • Das Computersystem 1200 umfasst eine Verarbeitungsvorrichtung 1202, einen Hauptspeicher 1204 (z. B. Nur-Lese-Speicher (ROM), Flash-Speicher, dynamischen Schreib-/Lesespeicher (DRAM) (wie beispielsweise synchroner DRAM (SDRAM) oder DRAM (RDRAM) usw.), einen statischen Speicher 1206 (z. B. Flash-Speicher, statischen Direktzugriffsspeicher (SRAM) usw.) und eine Datenspeichervorrichtung 1218, welche über einen Bus 1230 miteinander kommunizieren.
  • Die Verarbeitungsvorrichtung 1202 kann eine oder mehrere universelle Verarbeitungsvorrichtungen repräsentieren, wie beispielsweise einen Mikroprozessor, eine Zentraleinheit oder dergleichen. Insbesondere kann die Verarbeitungsvorrichtung ein Computer-Mikroprozessor mit komplexem Befehlssatz (CISC), ein Computer-Mikroprozessor mit reduziertem Befehlssatz (RISC), ein Mikroprozessor mit sehr langen Befehlsworten (VLIW) oder ein Prozessor, welcher andere Befehlssätze implementiert, oder Prozessoren sein, welche eine Kombination von Befehlssätzen implementieren. Die Verarbeitungsvorrichtung 1202 kann auch eine oder mehrere Spezialverarbeitungsvorrichtungen sein, wie beispielsweise ein anwendungsspezifischer integrierter Schaltkreis (ASIC), ein feldprogrammierbares Gate-Array (FPGA), ein digitaler Signalprozessor (DSP), ein Netzwerkprozessor oder dergleichen. Bei einer Ausführungsform kann die Verarbeitungsvorrichtung 1202 einen oder mehrere Verarbeitungskerne umfassen. Die Verarbeitungsvorrichtung 1202 ist konfiguriert, die Verarbeitungslogik 1226 zum Durchführen der hier diskutierten Operationen und Schritte auszuführen. Bei einer Ausführungsform ist die Verarbeitungsvorrichtung 1202 die gleiche wie die Prozessorarchitektur 100, welche hinsichtlich 1 beschrieben ist, wie hier mit Ausführungsformen der Offenbarung beschrieben.
  • Das Computersystem 1200 kann weiterhin eine Netzwerkschnittstellenvorrichtung 1208 umfassen, welche kommunikationsfähig mit einem Netzwerk 1220 verbunden ist. Das Computersystem 1200 kann auch eine Videoanzeigeeinheit 1210 (z. B. eine Flüssigkristallanzeige (LCD) oder eine Kathodenstrahlröhre (CRT)), eine alphanumerische Eingabevorrichtung 1212 (z. B. eine Tastatur), eine Positionsmarken-Steuerungsvorrichtung 1214 (z. B. eine Maus) und eine Signalerzeugungsvorrichtung 1216 (z. B. einen Lautsprecher) umfassen. Weiterhin kann das Computersystem 1200 eine Grafikverarbeitungseinheit 1222, eine Videoverarbeitungseinheit 1228 und eine Audioverarbeitungseinheit 1232 umfassen.
  • Die Datenspeichervorrichtung 1218 kann ein maschinengerechtes Speichermedium 1224 umfassen, auf welchem eine Software 1226 gespeichert ist, welche eine oder mehrere der hier beschriebenen Methodologien von Funktionen implementiert, wie beispielsweise Implementieren einer Speicheradressenvorhersage zur Speicherdisambiguierung, wie oben stehend beschrieben. Die Software 1226 kann sich während ihrer Ausführung durch das Computersystem 1200 auch vollständig oder mindestens teilweise innerhalb des Hauptspeichers 1204 als Befehle 1226 und/oder innerhalb der Verarbeitungsvorrichtung 1202 als Verarbeitungslogik 1226 befinden; der Hauptspeicher 1204 und die Verarbeitungsvorrichtung 1202 stellen auch maschinengerechte Speichermedien dar.
  • Das maschinenlesbare Speichermedium 1224 kann auch verwendet werden, um Befehle 1226 zu speichern, welche eine Speicheradressenvorhersage für Hybrid-Kerne implementieren, wie beispielsweise gemäß Ausführungsformen der Offenbarung beschrieben. Während das maschinengerechte Speichermedium 1128 in einer beispielhaften Ausführungsform als ein einzelnes Medium gezeigt ist, muss der Begriff „maschinengerechtes Speichermedium“ so verstanden werden, dass er ein einzelnes Medium oder mehrere Medien (z. B. eine zentrale oder verteilte Datenbank und/oder dazugehörige Caches und Server) umfasst, welche den einen oder die mehreren Befehlssätze speichern. Der Begriff „maschinengerechtes Speichermedium“ muss auch so verstanden werden, dass er jedes Medium umfasst, welches zum Speichern, Codieren oder Befördern eines Befehlssatzes zur Ausführung durch die Maschine in der Lage ist und welches bewirkt, dass die Maschine eine oder mehrere der Methodologien der vorliegenden Offenbarung durchführt. Der Begriff „maschinengerechtes Speichermedium“ muss dementsprechend so verstanden werden, dass er mindestens Halbleiterspeicher und optische sowie magnetische Medien umfasst.
  • Die folgenden Beispiele betreffen weitere Ausführungsformen. Beispiel 1 ist eine Verarbeitungsvorrichtung, welche eine Speichervorrichtung, um Daten zu speichern, und einen Prozessor umfasst, welcher betriebsfähig mit der Speichervorrichtung verbunden ist, wobei der Prozessor einen Tokenstrom erhält, welcher mehrere Token umfasst, welche auf der Grundlage eines Byte-Stroms erzeugt werden, welcher mehrere Bytes umfasst, wobei jedes Token in dem Tokenstrom mindestens ein Symbol umfasst, welches einem jeweiligen Byte in dem Byte-Strom zugeordnet ist, und wobei das mindestens eine Symbol entweder das jeweilige Byte, eine Länge einer ersten Byte-Kette, beginnend an dem jeweiligen Byte, oder einen Byte-Abstand zwischen der ersten Byte-Kette und einer übereinstimmenden zweiten Byte-Kette darstellt, einen Graph erzeugt, welcher mehrere Knoten und Kanten auf der Grundlage des Tokenstroms umfasst, wobei jedes Token in dem Tokenstrom einem jeweiligen Knoten zugeordnet ist, welcher durch mindestens eine Kante mit einem anderen Knoten verbunden ist, und wobei der mindestens einen Kante eine Kostenfunktion zugeordnet ist, um das mindestens eine Symbol zu codieren, welches in dem jeweiligen Token gespeichert ist, auf der Grundlage des Graphen einen Weg identifiziert zwischen einem ersten Knoten, welcher einem Anfangstoken des Tokenstroms zugeordnet ist, und einem Endknoten, welcher einem letzten Token des Tokenstroms zugeordnet ist, wobei der Weg eine Teilmenge von Knoten und Kanten umfasst, welche die Teilmenge von Knoten verbinden, und eine Entropiecodierung einer Teilmenge von Token durchführt, welche der Teilmenge von Knoten zugeordnet sind, um Ausgabedaten zu erzeugen.
  • Bei Beispiel 2 kann der Gegenstand des Beispiels 1 gegebenenfalls bereitstellen, dass der Prozessor ferner den Byte-Strom, welcher die mehreren Bytes umfasst, als Eingangsdaten erhält, wobei der Prozessor ferner die Ausgabedaten in der Speichervorrichtung speichert und wobei die Entropiecodierung eine Huffman-Codierung umfasst.
  • Bei Beispiel 3 kann der Gegenstand eines der Beispiele 1 und 2 gegebenenfalls bereitstellen, dass die erste Byte-Kette mindestens drei Bytes umfasst, welche bei dem jeweiligen Byte beginnen.
  • Bei Beispiel 4 kann der Gegenstand des Beispiels 1 weiterhin eine Funktionsverarbeitungseinheit umfassen, welche betriebsfähig mit dem Prozessor verbunden ist, wobei die Funktionsverarbeitungseinheit den Byte-Strom von dem Prozessor erhält und den Tokenstrom produziert, wobei der Tokenstrom mindestens so viele Token umfasst wie eine Anzahl von Bytes in dem Byte-Strom.
  • Bei Beispiel 5 kann der Gegenstand eines der Beispiele 1 und 4 gegebenenfalls bereitstellen, dass die Funktionsverarbeitungseinheit für jedes Byte in dem Byte-Strom bestimmt, ob die erste Byte-Kette, welche bei einer ersten Byte-Position des jeweiligen Byte anfängt, mit der zweiten Byte-Kette übereinstimmt, welche bei einer zweiten Byte-Position vor der ersten Byte-Position anfängt, als Reaktion auf ein Bestimmen, dass die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, ein Token erzeugt, welches ein erstes Symbol, welches die Länge der ersten Byte-Kette umfasst, und ein zweites Symbol umfasst, welches den Byte-Abstand zwischen der ersten Byte-Position und der zweiten Byte-Position umfasst, als Reaktion auf ein Bestimmen, dass die erste Byte-Kette nicht mit einer anderen Byte-Kette übereinstimmt, das Token erzeugt, welches das erste Symbol, welches das jeweilige Byte umfasst, und/oder ein zweites Symbol umfasst, welches eine Null umfasst, und den Tokenstrom erzeugt, welcher das Token umfasst.
  • Bei Beispiel 6 kann der Gegenstand des Beispiels 5 gegebenenfalls bereitstellen, dass ein Bestimmen, ob die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, ein Bestimmen einer längsten Byte-Kette umfasst, welche mit der ersten Byte-Kette übereinstimmt.
  • Bei Beispiel 7 kann der Gegenstand des Beispiels 5 gegebenenfalls bereitstellen, dass die Funktionsverarbeitungseinheit weiterhin mindestens ein zusätzliches Token erzeugt, welches dem jeweiligen Byte zugeordnet ist, und wobei ein Bestimmen, ob die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, für eine vorbestimmte Kettenlänge ein Bestimmen eines kürzesten Byte-Abstands zu der ersten Byte-Kette umfasst, und wobei der Byte-Abstand zwischen zwei Byte-Ketten definiert ist als ein Byte-Abstand zwischen den Anfangs-Bytes dieser beiden Byte-Ketten.
  • Bei Beispiel 8 kann der Gegenstand des Beispiels 1 gegebenenfalls bereitstellen, dass die Kostenfunktion zum Codieren des mindestens einen Symbols zugeordnet wird, der Prozessor eine erste Tokenposition des jeweiligen Tokens bestimmt, welches das mindestens eine Symbol umfasst, und die Kostenfunktion als eine Funktion der ersten Tokenposition in dem Tokenstrom berechnet.
  • Bei Beispiel 9 kann der Gegenstand eines der Beispiele 1 und 8 gegebenenfalls bereitstellen, dass die Kostenfunktion eine Anzahl von Bits definiert, welche eingesetzt werden, um das mindestens eine Symbol zu codieren, und wobei die berechnete Kostenfunktion besondere Bits zusätzlich zu Bits umfasst, welche zum Codieren des mindestens einen Symbols verwendet werden.
  • Bei Beispiel 10 kann der Gegenstand des Beispiels 9 gegebenenfalls bereitstellen, dass der Prozessor den Weg auf der Grundlage eines Kriteriums der geringsten Kosten identifiziert.
  • Bei Beispiel 11 kann der Gegenstand des Beispiels 10 gegebenenfalls bereitstellen, dass der Prozessor weiterhin als Reaktion auf Durchführen der Entropiecodierung eine Anzahl von Bits bestimmt, welche zum Codieren des mindestens einen Symbols verwendet werden, welches in jedem Token in der Teilmenge von Token gespeichert ist, die Kostenfunktion zum Codieren des mindestens einen Symbols, welches in jedem Token in der Teilmenge von Token gespeichert ist, auf der Grundlage der Anzahl von verwendeten Bits aktualisiert, auf der Grundlage des Graphen einen zweiten Weg zwischen dem ersten Knoten und dem Endknoten identifiziert, wobei der zweite Weg eine zweite Teilmenge von Knoten umfasst, und die Entropiecodierung einer zweiten Teilmenge von Token durchführt, welche der zweiten Teilmenge von Knoten zugeordnet sind, um zweite Ausgabedaten zu erzeugen.
  • Bei Beispiel 12 kann der Gegenstand des Beispiels 11 gegebenenfalls bereitstellen, dass der Prozessor weiterhin die Kostenfunktion aktualisiert, bis die Anzahl von Bits, welche zum Codieren des mindestens einen Symbols verwendet werden, auf eine feste Anzahl konvergiert.
  • Beispiel 13 ist ein Verfahren, welches Erhalten eines Tokenstroms durch einen Prozessor, welcher mehrere Token umfasst, welche auf der Grundlage eines Byte-Stroms erzeugt werden, welcher mehrere Bytes umfasst, wobei jedes Token in dem Tokenstrom mindestens ein Symbol umfasst, welches einem jeweiligen Byte in dem Byte-Strom zugeordnet ist, und wobei das mindestens eine Symbol entweder das jeweilige Byte, eine Länge einer ersten Byte-Kette, beginnend an dem jeweiligen Byte, oder einen Byte-Abstand zwischen der ersten Byte-Kette und einer übereinstimmenden zweiten Byte-Kette darstellt, Erzeugen eines Graphen, welcher mehrere Knoten und Kanten auf der Grundlage des Tokenstroms umfasst, wobei jedes Token in dem Tokenstrom einem jeweiligen Knoten zugeordnet ist, welcher durch mindestens eine Kante mit einem anderen Knoten verbunden ist, und wobei der mindestens einen Kante eine Kostenfunktion zugeordnet ist, um das mindestens eine Symbol zu codieren, welches in dem jeweiligen Token gespeichert ist, Identifizieren auf der Grundlage des Graphen eines Wegs zwischen einem ersten Knoten, welcher einem Anfangstoken des Tokenstroms zugeordnet ist, und einem Endknoten, welcher einem letzten Token des Tokenstroms zugeordnet ist, wobei der Weg eine Teilmenge von Knoten und Kanten umfasst, welche die Teilmenge von Knoten verbinden, und Durchführen einer Entropiecodierung einer Teilmenge von Token umfasst, welche der Teilmenge von Knoten zugeordnet sind, um Ausgabedaten zu erzeugen.
  • Bei Beispiel 14 kann der Gegenstand des Beispiels 13 weiterhin Erhalten des Byte-Stroms, welcher die mehreren Bytes als Eingangsdaten umfasst, und Speichern der Ausgabedaten in einer Speichervorrichtung umfassen.
  • Bei Beispiel 15 kann der Gegenstand eines der Beispiele 13 und 14 gegebenenfalls bereitstellen, dass die erste Byte-Kette mindestens drei Bytes umfasst, welche bei dem jeweiligen Byte beginnen.
  • Bei Beispiel 16 kann der Gegenstand des Beispiels 13 weiterhin Übertragen des Byte-Stroms an eine Funktionsverarbeitungseinheit, wobei die Funktionsverarbeitungseinheit für jedes Byte in dem Byte-Strom bestimmt, ob die erste Byte-Kette, welche bei einer ersten Byte-Position des jeweiligen Byte anfängt, mit der zweiten Byte-Kette übereinstimmt, welche bei einer zweiten Byte-Position vor der ersten Byte-Position anfängt, als Reaktion auf ein Bestimmen, dass die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, ein Token erzeugt, welches ein erstes Symbol, welches die Länge der ersten Byte-Kette umfasst, und ein zweites Symbol umfasst, welches den Byte-Abstand zwischen der ersten Byte-Position und der zweiten Byte-Position umfasst, als Reaktion auf ein Bestimmen, dass die erste Byte-Kette nicht mit einer anderen Byte-Kette übereinstimmt, das Token erzeugt, welches das erste Symbol, welches das jeweilige Byte umfasst, und/oder ein zweites Symbol umfasst, welches eine Null umfasst, und den Tokenstrom erzeugt, welcher das Token umfasst, und Erhalten des Tokenstroms von der Funktionsverarbeitungseinheit umfassen.
  • Bei Beispiel 17 kann der Gegenstand eines der Beispiele 13 und 16 gegebenenfalls bereitstellen, dass zum Bestimmen, ob die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, die Funktionsverarbeitungseinheit eine längste Byte-Kette bestimmt, welche mit der ersten Byte-Kette übereinstimmt.
  • Bei Beispiel 18 kann der Gegenstand des Beispiels 13 weiterhin Bestimmen einer ersten Tokenposition des jeweiligen Tokens, welches das mindestens eine Symbol umfasst, und Berechnen der Kostenfunktion als eine Funktion der ersten Tokenposition in dem Tokenstrom umfassen.
  • Bei Beispiel 19 kann der Gegenstand eines der Beispiele 13 und 18 weiterhin Identifizieren des Wegs auf der Grundlage eines Kriteriums der geringsten Kosten umfassen.
  • Bei Beispiel 20 kann der Gegenstand des Beispiels 19 weiterhin als Reaktion auf Durchführen der Entropiecodierung Bestimmen einer Anzahl von Bits, welche zum Codieren des mindestens einen Symbols verwendet werden, welches in jedem Token in der Teilmenge von Token gespeichert ist, Aktualisieren der Kostenfunktion zum Codieren des mindestens einen Symbols, welches in jedem Token in der Teilmenge von Token gespeichert ist, auf der Grundlage der Anzahl von verwendeten Bits, Identifizieren auf der Grundlage des Graphen eines zweiten Wegs zwischen dem ersten Knoten und dem Endknoten, wobei der zweite Weg eine zweite Teilmenge von Knoten umfasst, und Durchführen der Entropiecodierung einer zweiten Teilmenge von Token umfassen, welche der zweiten Teilmenge von Knoten zugeordnet sind, um zweite Ausgabedaten zu erzeugen.
  • Beispiel 21 ist eine Vorrichtung, welche Folgendes umfasst: Mittel zum Durchführen des Gegenstands eines der Beispiele 13 bis 15.
  • Beispiel 22 ist ein maschinenlesbares nichtflüchtiges Medium mit darauf gespeicherten Programmcodes, welche, wenn sie ausgeführt werden, Operationen durchführen, welche Erhalten eines Tokenstrom durch den Prozessor, welcher mehrere Token umfasst, welche auf der Grundlage eines Byte-Stroms erzeugt werden, welcher mehrere Bytes umfasst, wobei jedes Token in dem Tokenstrom mindestens ein Symbol umfasst, welches einem jeweiligen Byte in dem Byte-Strom zugeordnet ist, und wobei das mindestens eine Symbol entweder das jeweilige Byte, eine Länge einer ersten Byte-Kette, beginnend an dem jeweiligen Byte, oder einen Byte-Abstand zwischen der ersten Byte-Kette und einer übereinstimmenden zweiten Byte-Kette darstellt, Erzeugen eines Graphen, welcher mehrere Knoten und Kanten auf der Grundlage des Tokenstroms umfasst, wobei jedes Token in dem Tokenstrom einem jeweiligen Knoten zugeordnet ist, welcher durch mindestens eine Kante mit einem anderen Knoten verbunden ist, und wobei die mindestens eine Kante einer Kostenfunktion zugeordnet ist, um das mindestens eine Symbol zu codieren, welches in dem jeweiligen Token gespeichert ist, Identifizieren auf der Grundlage des Graphen eines Wegs zwischen einem ersten Knoten, welcher einem Anfangstoken des Tokenstroms zugeordnet ist, und einem Endknoten, welcher einem letzten Token des Tokenstroms zugeordnet ist, wobei der Weg eine Teilmenge von Knoten und Kanten umfasst, welche die Teilmenge von Knoten verbinden, und Durchführen einer Entropiecodierung einer Teilmenge von Token umfassen, welche der Teilmenge von Knoten zugeordnet sind, um Ausgabedaten zu erzeugen.
  • Bei Beispiel 23 kann der Gegenstand des Beispiels 22 weiterhin Erhalten des Byte-Stroms, welcher die mehreren Bytes als Eingangsdaten umfasst, und Speichern der Ausgabedaten in einer Speichervorrichtung umfassen.
  • Beispiel 24 ist ein System-auf-einem-Chip (SoC), welches einen Prozessor, um einen Byte-Strom zu erhalten, welcher mehrere Bytes umfasst, und eine Funktionsverarbeitungseinheit umfasst, welche betriebsfähig mit einem Prozessor verbunden ist, um den Byte-Strom zu erhalten, für jedes Byte in dem Byte-Strom zu bestimmen, ob eine erste Byte-Kette, welche bei einer ersten Byte-Position jedes Byte anfängt, mit einer zweiten Byte-Kette übereinstimmt, welche bei einer zweiten Byte-Position vor der ersten Byte-Position anfängt, als Reaktion auf ein Bestimmen, dass die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, ein Token zu erzeugen, welches ein erstes Symbol, welches eine Länge der ersten Byte-Kette umfasst, und ein zweites Symbol umfasst, welches einen Byte-Abstand zwischen der ersten Byte-Position und der zweiten Byte-Position umfasst, als Reaktion auf ein Bestimmen, dass die erste Byte-Kette nicht mit einer anderen Byte-Kette übereinstimmt, das Token zu erzeugen, welches das erste Symbol, welches das Byte umfasst, und ein zweites Symbol umfasst, welches eine Null umfasst, und den Tokenstrom, welcher das Token umfasst, für den Prozessor zu erzeugen.
  • Bei Beispiel 25 kann der Gegenstand des Beispiels 24 gegebenenfalls bereitstellen, dass der Prozessor den Tokenstrom von der Funktionsverarbeitungseinheit erhält, um einen Graph zu erzeugen, welcher mehrere Knoten und Kanten auf der Grundlage des Tokenstroms umfasst, wobei jedes Token in dem Tokenstrom einem jeweiligen Knoten zugeordnet ist, welcher durch mindestens eine Kante mit einem anderen Knoten verbunden ist, und wobei der mindestens einen Kante eine Kostenfunktion zugeordnet ist, um das erste Symbol und das zweite Symbol zu codieren, welche in dem Token gespeichert sind, auf der Grundlage des Graphen einen Weg zwischen einem ersten Knoten, welcher einem Anfangstoken des Tokenstroms zugeordnet ist, und einem Endknoten zu identifizieren, welcher einem letzten Token des Tokenstroms zugeordnet ist, wobei der Weg eine Teilmenge von Knoten und Kanten umfasst, welche die Teilmenge von Knoten verbinden, und eine Entropiecodierung einer Teilmenge von Token durchzuführen, welche der Teilmenge von Knoten zugeordnet sind, um Ausgabedaten zu erzeugen.
  • Während die vorliegende Offenbarung hinsichtlich einer begrenzten Anzahl von Ausführungsformen beschrieben wurde, erkennen Durchschnittsfachleute zahlreiche Modifikationen und Variationen davon. Es ist vorgesehen, dass die angefügten Ansprüche alle derartigen Modifikationen und Variationen als innerhalb des wahren Geists und Schutzumfangs dieser vorliegenden Offenbarung fallend abdecken.
  • Ein Entwurf kann von der Erschaffung über die Simulation zur Herstellung verschiedene Stufen durchlaufen. Daten, welche einen Entwurf darstellen, können den Entwurf auf eine Anzahl von Arten repräsentieren. Zuerst kann, wie es bei Simulationen nützlich ist, die Hardware unter Verwendung einer Hardware-Beschreibungssprache oder einer anderen funktionalen Beschreibungssprache dargestellt werden. Zusätzlich kann ein Modell auf der Schaltungsebene mit Logik und/oder Transistorgattern auf bestimmten Stufen des Entwurfsprozesses hergestellt werden. Weiterhin erreichen die meisten Entwürfe auf einer bestimmten Stufe eine Datenebene, welche die physikalische Anordnung der verschiedenen Vorrichtungen in dem Hardware-Modell darstellt. In dem Fall, bei welchem herkömmliche Halbleiter-Herstellungsverfahren verwendet werden, können die Daten, welche das Hardware-Modell darstellen, die Daten sein, welche die Gegenwart oder Abwesenheit verschiedener Merkmale auf verschiedenen Maskenschichten für Masken spezifizieren, welche zum Produzieren der integrierten Schaltungsvorrichtung verwendet werden. Bei allen Repräsentationen des Entwurfs können die Daten auf jeder Form eines maschinenlesbaren Mediums gespeichert werden. Ein Speicher oder eine magnetische oder optische Speicherung, wie beispielsweise eine Platte, kann das maschinenlesbare Medium sein, um Informationen zu speichern, welche über eine optische oder elektrische Welle übertragen werden, welche moduliert oder auf andere Weise erzeugt wird, um derartige Informationen zu übertragen. Wenn eine elektrische Trägerwelle, welche den Code oder den Entwurf wiedergibt oder trägt, soweit übertragen wird, dass Kopieren, Puffern oder eine erneute Übertragung des elektrischen Signals durchgeführt wird, wird eine neue Kopie angefertigt. Folglich kann ein Kommunikationsanbieter oder ein Netzwerkanbieter mindestens vorübergehend einen Gegenstand, wie beispielsweise Informationen, welche in einer Trägerwelle codiert sind, auf einem greifbaren maschinenlesbaren Medium speichern, wobei Verfahren der Ausführungsformen der vorliegenden Offenbarung verkörpert werden.
  • Ein Modul, wie es hier verwendet wird, betrifft jede Kombination von Hardware, Software und/oder Firmware. Beispielsweise umfasst ein Modul Hardware, wie beispielsweise eine Mikrosteuervorrichtung, welcher ein nichtflüchtiges Medium zugeordnet ist, um Code zu speichern, welcher angepasst ist, um durch die Mikrosteuervorrichtung ausgeführt zu werden. Deshalb betrifft ein Verweis auf ein Modul bei einer Ausführungsform die Hardware, welche besonders konfiguriert ist, den Code zu erkennen und/oder auszuführen, welcher auf einem nichtflüchtigen Medium gehalten werden soll. Weiterhin betrifft bei einer anderen Ausführungsform, eine Verwendung eines Moduls das nichtflüchtige Medium, welches den Code umfasst und welches besonders angepasst ist, um durch die Mikrosteuerung ausgeführt zu werden, um vorgegebene Operationen durchzuführen. Und wie daraus geschlossen werden kann, kann bei wieder einer anderen Ausführungsform der Begriff Modul (bei diesem Beispiel) die Kombination aus der Mikrosteuerung und dem nichtflüchtigen Medium betreffen. Oft variieren Modulgrenzen, welche als getrennt illustriert sind, gemeinsam und überlappen eventuell. Beispielsweise können ein erstes und ein zweites Modul Hardware, Software, Firmware oder eine Kombination davon gemeinsam benutzen, während sie eventuell manche unabhängige Hardware, Software oder Firmware behalten. Bei einer Ausführungsform umfasst eine Verwendung des Begriffs Logik Hardware, wie beispielsweise Transistoren, Register oder andere Hardware, wie beispielsweise programmierbare Logikvorrichtungen.
  • Eine Verwendung der Phrase ,ist konfiguriert‘ betrifft bei einer Ausführungsform Anordnen, Zusammenstellen, Herstellen, zum Verkauf Anbieten, Importieren und/oder Entwerfen einer Vorrichtung, von Hardware, von Logik oder eines Elements, um eine vorgegebene oder bestimmte Aufgabe durchzuführen. Bei diesem Beispiel ist eine Vorrichtung oder ein Element davon, welches nicht betrieben wird, immer noch ,konfiguriert‘, eine vorgegebene Aufgabe durchzuführen, wenn dieses ausgelegt, angeschlossen und/oder miteinander verbunden ist, die vorgegebene Aufgabe durchzuführen. Als ein rein illustrierendes Beispiel kann ein Logikgatter während des Betriebs eine 0 oder eine 1 bereitstellen. Ein Logikgatter jedoch, welches „konfiguriert ist‘, einem Takt ein Freigabesignal bereitzustellen, umfasst nicht jedes potenzielle Logikgatter, welches eine 1 oder eine 0 bereitstellen kann. Stattdessen ist das Logikgatter eines, welches auf irgendeine Weise verbunden ist, dass während des Betriebs die Ausgabe von 1 oder 0 den Takt freigibt. Es ist nochmals zu beachten, dass eine Verwendung des Begriffs ,ist konfiguriert‘ keine Operation erfordert, sondern sich stattdessen auf den latenten Zustand einer Vorrichtung, einer Hardware und/oder eines Elements fokussiert, wo die Vorrichtung, die Hardware und/oder das Element entworfen ist, in dem latenten Zustand eine bestimmte Aufgabe durchzuführen, wenn die Vorrichtung, die Hardware und/oder das Element betrieben werden.
  • Weiterhin betrifft eine Verwendung der Phrasen „um zu‘, ,ist in der Lage, um‘ und/oder ,ist betriebsfähig, um‘ bei einer Ausführungsform irgendeine Vorrichtung, Logik, Hardware und/oder ein Element, welche in einer derartigen Weise ausgelegt sind, eine Verwendung der Vorrichtung, Logik, Hardware und/oder eines Elements in einer bestimmten Weise zu ermöglichen. Es ist wie oben stehend beschrieben zu beachten, dass eine Verwendung von um zu, ist in der Lage, um, oder ist betriebsfähig, um bei einer Ausführungsform den latenten Zustand einer Vorrichtung, Logik, Hardware und/oder eines Elements betrifft, wo die Vorrichtung, Logik, Hardware und/oder das Element nicht betrieben werden, aber auf eine derartige Weise entworfen sind, um eine Verwendung einer Vorrichtung in einer bestimmten Weise zu ermöglichen.
  • Ein Wert, wie er hier verwendet, umfasst jede bekannte Repräsentation einer Zahl, eines Zustands, eines logischen Zustands oder eines binären logischen Zustands. Oft wird die Verwendung von Logikpegeln, Logikwerten oder logischen Werten auch als Einsen und Nullen bezeichnet, welche einfach binäre Logikzustände darstellen. Beispielsweise bezeichnet eine 1 einen hohen Logikpegel und bezeichnet 0 einen niedrigen Logikpegel. Bei einer Ausführungsform kann eine Speicherzelle, wie beispielsweise ein Transistor oder eine Flash-Speicherzelle, in der Lage sein, einen einzelnen logischen Wert oder mehrere logische Werte zu halten. Jedoch wurden andere Repräsentationen von Werten in Computersystemen verwendet. Beispielsweise kann die Dezimalzahl Zehn auch als ein binärer Wert von 910 und als ein hexadezimaler Buchstabe A dargestellt werden. Deshalb umfasst ein Wert jede Darstellung von Informationen, welche in einem Computersystem gehalten werden können.
  • Weiterhin können Zustände durch Werte oder Abschnitte von Werten dargestellt werden. Beispielsweise kann ein erster Wert, wie beispielsweise eine logische Eins, einen Standard- oder Anfangszustand darstellen, während ein zweiter Wert, wie beispielsweise eine logische Null, einen Nicht-Standardwert darstellen kann. Zusätzlich bezeichnen die Begriffe Zurücksetzen und Setzen bei einer Ausführungsform einen Standard- und einen aktualisierten Wert bzw. Zustand. Beispielsweise umfasst ein Standardwert eventuell einen hohen logischen Wert, d. h. ein Zurücksetzen, während ein aktualisierter Wert eventuell einen niedrigen logischen Wert, d. h. ein Setzen, umfasst. Es ist zu beachten, dass jede Kombination von Werten eingesetzt werden kann, um jede Anzahl von Zuständen darzustellen.
  • Die oben stehend beschriebenen Ausführungsformen der Verfahren, der Hardware, der Software, der Firmware oder des Codes können über Befehle oder Code implementiert werden, welche auf einem maschinengerechten, maschinenlesbaren, computergerechten oder computerlesbaren Medium gespeichert sind und welche durch ein Verarbeitungselement ausführbar sind. Ein nichtflüchtiges maschinengerechtes/-lesbares Medium umfasst einen beliebigen Mechanismus, welcher Informationen in einer Form bereitstellt (d. h. speichert und/oder überträgt), welche durch eine Maschine lesbar ist, wie beispielsweise durch einen Computer oder ein elektronisches System. Beispielsweise umfasst ein nichtflüchtiges maschinengerechtes Medium Direktzugriffsspeicher (RAM), wie beispielsweise statischen RAM (SRAM) oder dynamischen RAM (DRAM); ROM; ein magnetisches oder optisches Speichermedium; Flash-Speichervorrichtungen; elektrische Speichervorrichtungen; optische Speichervorrichtungen; akustische Speichervorrichtungen; andere Formen von Speichervorrichtungen zum Halten von Informationen, welche aus flüchtigen (sich fortpflanzenden) Signalen (z. B. Trägerwellen, Infrarotsignalen, digitalen Signalen) erhalten werden; usw., welche von den nichtflüchtigen Medien unterschieden werden müssen, welche Informationen davon erhalten können.
  • Befehle, welche verwendet werden, um Logik zu programmieren, um Ausführungsformen der Offenbarung durchzuführen, können innerhalb eines Speichers in dem System gespeichert werden, wie beispielsweise DRAM, Cache-Speicher, Flash-Speicher oder ein anderer Speicher. Weiterhin können die Befehle über ein Netzwerk oder auf dem Weg anderer computerlesbarer Medien verteilt werden. Folglich kann ein maschinenlesbares Medium einen beliebigen Mechanismus zum Speichern oder Übertragen von Informationen in einer Form umfassen, welche durch eine Maschine (z. B. einen Computer) lesbar ist, jedoch nicht begrenzt ist auf Floppy-Disketten, optische Platten, Compact Disc Nur-Lese-Speicher (CD-ROMs) und magneto-optische Platten, Nur-Lese-Speicher (ROMs), Direktzugriffsspeicher (RAM), löschbaren programmierbaren Nur-Lese-Speicher (EPROM), elektrisch löschbaren programmierbaren Nur-Lese-Speicher (EEPROM), magnetische oder optische Karten, Flash-Speicher oder einen greifbaren maschinenlesbaren Speicher, welcher bei der Übertragung von Informationen über das Internet über elektrische, optische, akustische oder andere Formen sich fortpflanzender Signale (z. B. Trägerwellen, Infrarotsignale, digitale Signale usw.) verwendet wird. Dementsprechend umfasst das computerlesbare Medium jeden Typ eines greifbaren maschinenlesbaren Mediums, welches zum Speichern oder Übertragen von elektronischen Befehlen oder Informationen in einer Form geeignet ist, welche durch eine Maschine (z. B. einen Computer) lesbar ist.
  • Der Verweis überall in dieser Beschreibung auf „eine Ausführungsform“ bedeutet, dass mindestens eine Ausführungsform der vorliegenden Offenbarung ein bestimmtes Merkmal, eine Struktur oder eine Eigenschaft umfasst, welche im Zusammenhang mit der Ausführungsform beschrieben wird. Folglich betrifft das Auftreten der Phrasen „bei einer Ausführungsform“ oder „in einer Ausführungsform“ an verschiedenen Stellen überall in dieser Beschreibung nicht notwendigerweise immer die gleiche Ausführungsform. Weiterhin können die bestimmten Merkmale, Strukturen oder Eigenschaften in jeder geeigneten Weise bei einer oder mehreren Ausführungsformen kombiniert werden.
  • In der vorangehenden Beschreibung wurde eine ausführliche Beschreibung unter Bezugnahme auf spezifische beispielhafte Ausführungsformen vorgestellt. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Veränderungen daran durchgeführt werden können, ohne den breiteren Geist und Schutzumfang der Offenbarung zu verlassen, wie er in den angefügten Ansprüchen dargelegt ist. Die Beschreibung und die Zeichnungen sind dementsprechend in einem beispielhaften Sinn statt in einem einschränkenden Sinn zu sehen. Weiterhin betrifft die vorstehende Verwendung von Ausführungsform und anderer beispielhafter Sprache nicht notwendigerweise die gleiche Ausführungsform oder das gleiche Beispiel, sondern kann verschiedene und distinkte Ausführungsformen sowie eventuell die gleiche Ausführungsform betreffen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • CL 972982 [0068]

Claims (25)

  1. System, Folgendes umfassend: eine Speichervorrichtung, um Daten zu speichern; und einen Prozessor, welcher betriebsfähig mit der Speichervorrichtung verbunden ist, wobei der Prozessor: einen Tokenstrom erhält, welcher mehrere Token umfasst, welche auf der Grundlage eines Byte-Stroms erzeugt werden, welcher mehrere Bytes umfasst, wobei jedes Token in dem Tokenstrom mindestens ein Symbol umfasst, welches einem jeweiligen Byte in dem Byte-Strom zugeordnet ist, und wobei das mindestens eine Symbol entweder das jeweilige Byte, eine Länge einer ersten Byte-Kette, beginnend an dem jeweiligen Byte, oder einen Byte-Abstand zwischen der ersten Byte-Kette und einer übereinstimmenden zweiten Byte-Kette darstellt; einen Graph erzeugt, welcher mehrere Knoten und Kanten auf der Grundlage des Tokenstroms umfasst, wobei jedes Token in dem Tokenstrom einem jeweiligen Knoten zugeordnet ist, welcher durch mindestens eine Kante mit einem anderen Knoten verbunden ist, und wobei der mindestens einen Kante eine Kostenfunktion zugeordnet ist, um das mindestens eine Symbol zu codieren, welches in dem jeweiligen Token gespeichert ist; auf der Grundlage des Graphen einen Weg zwischen einem ersten Knoten, welcher einem Anfangstoken des Tokenstroms zugeordnet ist, und einem Endknoten identifiziert, welcher einem letzten Token des Tokenstroms zugeordnet ist, wobei der Weg eine Teilmenge von Knoten und Kanten umfasst, welche die Teilmenge von Knoten verbinden; und eine Entropiecodierung einer Teilmenge von Token durchführt, welche der Teilmenge von Knoten zugeordnet sind, um Ausgabedaten zu erzeugen.
  2. Verarbeitungsvorrichtung nach Anspruch 1, wobei der Prozessor ferner den Byte-Strom, welcher die mehreren Bytes umfasst, als Eingangsdaten erhält, wobei der Prozessor ferner die Ausgabedaten in der Speichervorrichtung speichert und wobei die Entropiecodierung eine Huffman-Codierung umfasst.
  3. Verarbeitungsvorrichtung nach einem der Ansprüche 1 und 2, wobei die erste Byte-Kette mindestens drei Bytes umfasst, welche bei dem jeweiligen Byte beginnen.
  4. Verarbeitungsvorrichtung nach Anspruch 1, weiterhin Folgendes umfassend: eine Funktionsverarbeitungseinheit, welche betriebsfähig mit dem Prozessor verbunden ist, wobei die Funktionsverarbeitungseinheit: den Byte-Strom von dem Prozessor erhält; und den Tokenstrom erzeugt, wobei der Tokenstrom mindestens so viele Token umfasst wie eine Anzahl von Bytes in dem Byte-Strom.
  5. Verarbeitungsvorrichtung nach einem der Ansprüche 1 und 4, wobei die Funktionsverarbeitungseinheit: für jedes Byte in dem Byte-Strom bestimmt, ob die erste Byte-Kette, welche bei einer ersten Byte-Position des jeweiligen Byte beginnt, mit der zweiten Byte-Kette übereinstimmt, welche bei einer zweiten Byte-Position vor der ersten Byte-Position beginnt; als Reaktion auf ein Bestimmen, dass die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, ein Token erzeugt, welches ein erstes Symbol, welches die Länge der ersten Byte-Kette umfasst, und ein zweites Symbol umfasst, welches den Byte-Abstand zwischen der ersten Byte-Position und der zweiten Byte-Position umfasst; als Reaktion auf ein Bestimmen, dass die erste Byte-Kette nicht mit einer anderen Byte-Kette übereinstimmt, das Token erzeugt, welches das erste Symbol, welches das jeweilige Byte umfasst, und/oder ein zweites Symbol umfasst, welches eine Null umfasst; und den Tokenstrom erzeugt, welcher das Token umfasst.
  6. Verarbeitungsvorrichtung nach Anspruch 5, wobei ein Bestimmen, ob die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, ein Bestimmen einer längsten Byte-Kette umfasst, welche mit der ersten Byte-Kette übereinstimmt.
  7. Verarbeitungsvorrichtung nach Anspruch 6, wobei die Funktionsverarbeitungseinheit weiterhin mindestens ein zusätzliches Token erzeugt, welches dem jeweiligen Byte zugeordnet ist, und wobei ein Bestimmen, ob die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, für eine vorbestimmte Kettenlänge ein Bestimmen eines kürzesten Byte-Abstands zu der ersten Byte-Kette umfasst, und wobei der Byte-Abstand zwischen zwei Byte-Ketten definiert ist als ein Byte-Abstand zwischen den Anfangs-Bytes dieser beiden Byte-Ketten.
  8. Verarbeitungsvorrichtung nach Anspruch 1, wobei zum Zuordnen der Kostenfunktion, um das mindestens eine Symbol zu codieren, der Prozessor: eine erste Tokenposition des jeweiligen Tokens bestimmt, welches das mindestens eine Symbol umfasst; und die Kostenfunktion als eine Funktion der ersten Tokenposition in dem Tokenstrom berechnet.
  9. Verarbeitungsvorrichtung nach einem der Ansprüche 1 und 8, wobei die Kostenfunktion eine Anzahl von Bits definiert, welche eingesetzt werden, um das mindestens eine Symbol zu codieren, und wobei die berechnete Kostenfunktion besondere Bits zusätzlich zu Bits umfasst, welche zum Codieren des mindestens einen Symbols verwendet werden.
  10. Verarbeitungsvorrichtung nach Anspruch 9, wobei der Prozessor den Weg auf der Grundlage eines Kriteriums der geringsten Kosten identifiziert.
  11. Verarbeitungsvorrichtung nach Anspruch 10, wobei der Prozessor ferner: als Reaktion auf Durchführen der Entropiecodierung eine Anzahl von Bits bestimmt, welche zum Codieren des mindestens einen Symbols verwendet werden, welches in jedem Token in der Teilmenge von Token gespeichert ist; die Kostenfunktion zum Codieren des mindestens einen Symbols, welches in jedem Token in der Teilmenge von Token gespeichert ist, auf der Grundlage der Anzahl von verwendeten Bits aktualisiert; auf der Grundlage des Graphen einen zweiten Weg zwischen dem ersten Knoten und dem Endknoten identifiziert, wobei der zweite Weg eine zweite Teilmenge von Knoten umfasst; und die Entropiecodierung einer zweiten Teilmenge von Token durchführt, welche der zweiten Teilmenge von Knoten zugeordnet sind, um zweite Ausgabedaten zu erzeugen.
  12. Verarbeitungsvorrichtung nach Anspruch 11, wobei der Prozessor weiterhin die Kostenfunktion aktualisiert, bis die Anzahl von Bits, welche zum Codieren des mindestens einen Symbols verwendet werden, auf eine feste Anzahl konvergiert.
  13. Verfahren, Folgendes umfassend: Erhalten durch einen Prozessor eines Tokenstroms, welcher mehrere Token umfasst, welche auf der Grundlage eines Byte-Stroms erzeugt werden, welcher mehrere Bytes umfasst, wobei jedes Token in dem Tokenstrom mindestens ein Symbol umfasst, welches einem jeweiligen Byte in dem Byte-Strom zugeordnet ist, und wobei das mindestens eine Symbol entweder das jeweilige Byte, eine Länge einer ersten Byte-Kette, beginnend an dem jeweiligen Byte, oder einen Byte-Abstand zwischen der ersten Byte-Kette und einer übereinstimmenden zweiten Byte-Kette darstellt; Erzeugen eines Graphen, welcher mehrere Knoten und Kanten auf der Grundlage des Tokenstroms umfasst, wobei jedes Token in dem Tokenstrom einem jeweiligen Knoten zugeordnet ist, welcher durch mindestens eine Kante mit einem anderen Knoten verbunden ist, und wobei der mindestens einen Kante eine Kostenfunktion zugeordnet ist, um das mindestens eine Symbol zu codieren, welches in dem jeweiligen Token gespeichert ist; Identifizieren auf der Grundlage des Graphen eines Wegs zwischen einem ersten Knoten, welcher einem Anfangstoken des Tokenstroms zugeordnet ist, und einem Endknoten, welcher einem letzten Token des Tokenstroms zugeordnet ist, wobei der Weg eine Teilmenge von Knoten und Kanten umfasst, welche die Teilmenge von Knoten verbinden; und Durchführen einer Entropiecodierung einer Teilmenge von Token, welche der Teilmenge von Knoten zugeordnet sind, um Ausgabedaten zu erzeugen.
  14. Verfahren nach Anspruch 13, weiterhin Folgendes umfassend: Erhalten des Byte-Stroms, welcher die mehreren Bytes als Eingangsdaten umfasst; und Speichern der Ausgabedaten in einer Speichervorrichtung.
  15. Verfahren nach einem der Ansprüche 13 und 14, wobei die erste Byte-Kette mindestens drei Bytes umfasst, welche bei dem jeweiligen Byte beginnen.
  16. Verfahren nach Anspruch 13, weiterhin Folgendes umfassend: Übertragen des Byte-Stroms an eine Funktionsverarbeitungseinheit, wobei die Funktionsverarbeitungseinheit: für jedes Byte in dem Byte-Strom bestimmt, ob die erste Byte-Kette, welche bei einer ersten Byte-Position des jeweiligen Byte beginnt, mit der zweiten Byte-Kette übereinstimmt, welche bei einer zweiten Byte-Position vor der ersten Byte-Position beginnt; als Reaktion auf ein Bestimmen, dass die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, ein Token erzeugt, welches ein erstes Symbol, welches die Länge der ersten Byte-Kette umfasst, und ein zweites Symbol umfasst, welches den Byte-Abstand zwischen der ersten Byte-Position und der zweiten Byte-Position umfasst; als Reaktion auf ein Bestimmen, dass die erste Byte-Kette nicht mit einer anderen Byte-Kette übereinstimmt, das Token erzeugt, welches das erste Symbol, welches das jeweilige Byte umfasst, und/oder ein zweites Symbol umfasst, welches eine Null umfasst; und den Tokenstrom erzeugt, welcher das Token umfasst; und Erhalten des Tokenstroms von der Funktionsverarbeitungseinheit.
  17. Verfahren nach einem der Ansprüche 13 und 16, wobei zum Bestimmen, ob die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, die Funktionsverarbeitungseinheit eine längste Byte-Kette bestimmt, welche mit der ersten Byte-Kette übereinstimmt.
  18. Verfahren nach Anspruch 13, weiterhin Folgendes umfassend: Bestimmen einer ersten Tokenposition des jeweiligen Tokens, welches das mindestens eine Symbol umfasst; und Berechnen der Kostenfunktion als eine Funktion der ersten Tokenposition in dem Tokenstrom.
  19. Verfahren nach einem der Ansprüche 13 und 18, weiterhin Folgendes umfassend: Identifizieren des Wegs auf der Grundlage eines Kriteriums der geringsten Kosten.
  20. Verfahren nach Anspruch 19, weiterhin Folgendes umfassend: Bestimmen als Reaktion auf Durchführen der Entropiecodierung einer Anzahl von Bits, welche zum Codieren des mindestens einen Symbols verwendet werden, welches in jedem Token in der Teilmenge von Token gespeichert ist; Aktualisieren der Kostenfunktion zum Codieren des mindestens einen Symbols, welches in jedem Token in der Teilmenge von Token gespeichert ist, auf der Grundlage der Anzahl von verwendeten Bits; Identifizieren auf der Grundlage des Graphen eines zweiten Wegs zwischen dem ersten Knoten und dem Endknoten, wobei der zweite Weg eine zweite Teilmenge von Knoten umfasst; und Durchführen der Entropiecodierung einer zweiten Teilmenge von Token, welche der zweiten Teilmenge von Knoten zugeordnet sind, um zweite Ausgabedaten zu erzeugen.
  21. Vorrichtung, Folgendes umfassend: Mittel zum Durchführen des Verfahrens nach einem der Ansprüche 13 bis 15.
  22. Maschinenlesbares nichtflüchtiges Medium mit darauf gespeicherten Programmcodes, welche, wenn sie ausgeführt werden, Operationen durchführen, welche Folgendes umfassen: Erhalten durch den Prozessor eines Tokenstroms, welcher mehrere Token umfasst, welche auf der Grundlage eines Byte-Stroms erzeugt werden, welcher mehrere Bytes umfasst, wobei jedes Token in dem Tokenstrom mindestens ein Symbol umfasst, welches einem jeweiligen Byte in dem Byte-Strom zugeordnet ist, und wobei das mindestens eine Symbol entweder das jeweilige Byte, eine Länge einer ersten Byte-Kette, beginnend an dem jeweiligen Byte, oder einen Byte-Abstand zwischen der ersten Byte-Kette und einer übereinstimmenden zweiten Byte-Kette darstellt; Erzeugen eines Graphen, welcher mehrere Knoten und Kanten auf der Grundlage des Tokenstroms umfasst, wobei jedes Token in dem Tokenstrom einem jeweiligen Knoten zugeordnet ist, welcher durch mindestens eine Kante mit einem anderen Knoten verbunden ist, und wobei der mindestens einen Kante eine Kostenfunktion zugeordnet ist, um das mindestens eine Symbol zu codieren, welches in dem jeweiligen Token gespeichert ist; Identifizieren auf der Grundlage des Graphen eines Wegs zwischen einem ersten Knoten, welcher einem Anfangstoken des Tokenstroms zugeordnet ist, und einem Endknoten, welcher einem letzten Token des Tokenstroms zugeordnet ist, wobei der Weg eine Teilmenge von Knoten und Kanten umfasst, welche die Teilmenge von Knoten verbinden; und Durchführen einer Entropiecodierung einer Teilmenge von Token, welche der Teilmenge von Knoten zugeordnet sind, um Ausgabedaten zu erzeugen.
  23. Maschinenlesbares nichtflüchtiges Medium nach Anspruch 22, weiterhin Folgendes umfassend: Erhalten des Byte-Stroms, welcher die mehreren Bytes als Eingangsdaten umfasst; und Speichern der Ausgabedaten in einer Speichervorrichtung.
  24. System-auf-einem-Chip (SoC), Folgendes umfassend: einen Prozessor, um einen Byte-Strom zu erhalten, welcher mehrere Bytes umfasst; und eine Funktionsverarbeitungseinheit, welche betriebsfähig mit einem Prozessor verbunden ist, um den Byte-Strom zu erhalten; für jedes Byte in dem Byte-Strom zu bestimmen, ob eine erste Byte-Kette, welche bei einer ersten Byte-Position des jeweiligen Byte beginnt, mit einer zweiten Byte-Kette übereinstimmt, welche bei einer zweiten Byte-Position vor der ersten Byte-Position beginnt; als Reaktion auf ein Bestimmen, dass die erste Byte-Kette mit der zweiten Byte-Kette übereinstimmt, ein Token zu erzeugen, welches ein erstes Symbol, welches eine Länge der ersten Byte-Kette umfasst, und ein zweites Symbol umfasst, welches einen Byte-Abstand zwischen der ersten Byte-Position und der zweiten Byte-Position umfasst; als Reaktion auf ein Bestimmen, dass die erste Byte-Kette nicht mit einer anderen Byte-Kette übereinstimmt, das Token zu erzeugen, welches das erste Symbol, welches das jeweilige Byte umfasst, und ein zweites Symbol umfasst, welches eine Null umfasst; und für den Prozessor den Tokenstrom zu erzeugen, welcher das Token umfasst.
  25. System-auf-einem-Chip (SoC) nach Anspruch 24, wobei der Prozessor: den Tokenstrom von der Funktionsverarbeitungseinheit erhält; einen Graph erzeugt, welcher mehrere Knoten und Kanten auf der Grundlage des Tokenstroms umfasst, wobei jedes Token in dem Tokenstrom einem jeweiligen Knoten zugeordnet ist, welcher durch mindestens eine Kante mit einem anderen Knoten verbunden ist, und wobei der mindestens einen Kante eine Kostenfunktion zugeordnet ist, um das erste Symbol und das zweite Symbol zu codieren, welche in dem Token gespeichert sind; auf der Grundlage des Graphen einen Weg zwischen einem ersten Knoten, welcher einem Anfangstoken des Tokenstroms zugeordnet ist, und einem Endknoten identifiziert, welcher einem letzten Token des Tokenstroms zugeordnet ist, wobei der Weg eine Teilmenge von Knoten und Kanten umfasst, welche die Teilmenge von Knoten verbinden; und eine Entropiecodierung einer Teilmenge von Token durchführt, welche der Teilmenge von Knoten zugeordnet sind, um Ausgabedaten zu erzeugen.
DE112016004324.4T 2015-09-25 2016-07-27 Heterogene Kompressionsarchitektur für optimiertes Kompressionsverhältnis Ceased DE112016004324T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/866,115 2015-09-25
US14/866,115 US9537504B1 (en) 2015-09-25 2015-09-25 Heterogeneous compression architecture for optimized compression ratio
PCT/US2016/044303 WO2017052758A1 (en) 2015-09-25 2016-07-27 Heterogeneous compression architecture for optimized compression ratio

Publications (1)

Publication Number Publication Date
DE112016004324T5 true DE112016004324T5 (de) 2018-06-28

Family

ID=57682461

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112016004324.4T Ceased DE112016004324T5 (de) 2015-09-25 2016-07-27 Heterogene Kompressionsarchitektur für optimiertes Kompressionsverhältnis

Country Status (5)

Country Link
US (2) US9537504B1 (de)
CN (1) CN107925420B (de)
DE (1) DE112016004324T5 (de)
TW (1) TWI692213B (de)
WO (1) WO2017052758A1 (de)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US9537504B1 (en) * 2015-09-25 2017-01-03 Intel Corporation Heterogeneous compression architecture for optimized compression ratio
US10311074B1 (en) 2016-12-15 2019-06-04 Palantir Technologies Inc. Identification and compiling of information relating to an entity
US10235461B2 (en) * 2017-05-02 2019-03-19 Palantir Technologies Inc. Automated assistance for generating relevant and valuable search results for an entity of interest
US20180357287A1 (en) * 2017-06-10 2018-12-13 ScaleFlux, Inc. Hybrid software-hardware implementation of edit distance search
WO2020009989A1 (en) * 2018-07-05 2020-01-09 Mythic, Inc. Systems and methods for implementing an intelligence processing computing architecture
US11238102B1 (en) 2018-12-10 2022-02-01 Palantir Technologies, Inc. Providing an object-based response to a natural language query
CN115793989B (zh) * 2023-02-06 2023-06-20 江苏华存电子科技有限公司 一种基于NAND的NVMe KV SSD数据管理方法

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5353024A (en) * 1992-05-01 1994-10-04 Intersecting Concepts, Inc. Method for data compression having an improved encoding algorithm which utilizes a token stacking technique
US5572206A (en) * 1994-07-06 1996-11-05 Microsoft Corporation Data compression method and system
US5627534A (en) * 1995-03-23 1997-05-06 International Business Machines Corporation Dual stage compression of bit mapped image data using refined run length and LZ compression
US5659737A (en) * 1995-08-01 1997-08-19 Oracle Corporation Methods and apparatus for data compression that preserves order by using failure greater than and failure less than tokens
US6741368B1 (en) * 1999-05-25 2004-05-25 Adobe Systems, Incorporated Method and apparatus for reducing storage requirements for display data
GB0210604D0 (en) * 2002-05-09 2002-06-19 Ibm Method and arrangement for data compression
JP3889762B2 (ja) * 2002-12-26 2007-03-07 富士通株式会社 データ圧縮方法、プログラム及び装置
US8085171B2 (en) * 2006-03-24 2011-12-27 University Of Mississippi High-speed data compression based on set associative cache mapping techniques
US7436330B2 (en) * 2006-03-24 2008-10-14 The University Of Mississippi High-speed data compression based on set associative cache mapping techniques
TWI354239B (en) * 2006-06-08 2011-12-11 Via Tech Inc Decoding system unit
US8463759B2 (en) * 2007-09-24 2013-06-11 Ca, Inc. Method and system for compressing data
US7605721B2 (en) * 2007-11-30 2009-10-20 Red Hat, Inc. Adaptive entropy coding compression output formats
US8013762B2 (en) * 2009-11-03 2011-09-06 Seagate Technology Llc Evaluating alternative encoding solutions during data compression
US8248279B2 (en) * 2010-10-26 2012-08-21 Hewlett-Packard Development Company, L.P. History buffer apparatus and method for adaptive lossless data compression
WO2012090584A1 (ja) * 2010-12-28 2012-07-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 検索開始点を決定する装置及び方法
US8824569B2 (en) * 2011-12-07 2014-09-02 International Business Machines Corporation High bandwidth decompression of variable length encoded data streams
US9203887B2 (en) * 2011-12-23 2015-12-01 Intel Corporation Bitstream processing using coalesced buffers and delayed matching and enhanced memory writes
US8766827B1 (en) * 2013-03-15 2014-07-01 Intel Corporation Parallel apparatus for high-speed, highly compressed LZ77 tokenization and Huffman encoding for deflate compression
US8933824B1 (en) * 2013-08-28 2015-01-13 International Business Machines Corporation Hardware decompression of deflate encoded data with multiple blocks
US9628111B2 (en) * 2015-05-11 2017-04-18 Via Alliance Semiconductor Co., Ltd. Hardware data compressor with multiple string match search hash tables each based on different hash size
US9537504B1 (en) * 2015-09-25 2017-01-03 Intel Corporation Heterogeneous compression architecture for optimized compression ratio

Also Published As

Publication number Publication date
WO2017052758A1 (en) 2017-03-30
TW201720063A (zh) 2017-06-01
CN107925420B (zh) 2022-01-04
US9537504B1 (en) 2017-01-03
US20170111059A1 (en) 2017-04-20
TWI692213B (zh) 2020-04-21
CN107925420A (zh) 2018-04-17
US9871535B2 (en) 2018-01-16

Similar Documents

Publication Publication Date Title
DE112016004324T5 (de) Heterogene Kompressionsarchitektur für optimiertes Kompressionsverhältnis
DE102018005216A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Transaktions- und Wiederholungsmerkmalen
DE102018005181A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Leistungs-, Richtigkeits- und Energiereduktionsmerkmalen
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018003221A1 (de) Unterstützung gelernter Sprungprädiktoren
DE102018006791A1 (de) Prozessoren, Verfahren und Systeme mit einem konfigurierbaren räumlichen Beschleuniger mit einem Sequenzer-Datenflussoperator
DE102018000886A1 (de) Virtuelle Maschinenkommunikation auf Hardware-Basis
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE102014003795A1 (de) Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen
DE102018001229A1 (de) Beschleunigerschaltung mit variabler Wortlänge für ein neuronales Netzwerk
DE102014003689A1 (de) Verfolgung des kontrollflusses von befehlen
DE112016006059T5 (de) Hardwareeinrichtungen und Verfahren für Datendekomprimierung
DE102014003563A1 (de) Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen
DE102018125257A1 (de) Defragmentierter und effizienter mikrooperationscache
DE112017006568T5 (de) Auslegung einer Basistaktfrequenz eines Prozessors auf der Basis von Nutzungsparametern
DE102014003790A1 (de) Parallelvorrichtung für hochkomprimierte Hochgeschwindigkeits-LZ77-Tokenisierung und Huffman-Codierung für Deflate-Komprimierung
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE112011105666T5 (de) Befehl und Logik zum Bereitstellen von Vektor-Lade-OP/Speicher-OP mit Schritt-Funktionalität
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE112013004867T5 (de) Befehl und Logik zum Bereitstellen von Push-Puffer-Kopier- und Speicher-Funktionalität
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE102018002525A1 (de) Hybridatomaritätsunterstützung für einen binärübersetzungsbasierten mikroprozessor
DE112011105665T5 (de) Befehl und Logik zum Liefern von Vektorladen und -speichern mit Schritt- und Maskierfunktionalität
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE102015002254A1 (de) Verfahren und Gerät zum wirksamen Ausführen von Hash-Operationen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final