-
Gebiet der Erfindung
-
Ausführungsformen betreffen allgemein die Datenkomprimierung. Genauer gesagt, betreffen Ausführungsformen die Datenkomprimierung unter Verwendung eines Beschleunigers mit mehreren Suchmaschinen.
-
Hintergrund
-
Fortschritte in der Computertechnik und Vernetzung gehen mit der Verwendung von Komprimierungstechnologien zum Verringern der Größe von Daten einher. Zum Beispiel können Internet-Dienste Komprimierungstechniken nutzen, um die Bandbreite zu verkleinern, die für einen Netzwerkverkehr benötigt wird. Des Weiteren können Computervorrichtungen Komprimierung nutzen, um den Speicherplatzbedarf zum Speichern von Daten zu verringern.
-
Figurenliste
-
- 1A ist ein Blockschaubild eines Systems gemäß einer oder mehreren Ausführungsformen.
- 1B ist ein Blockschaubild eines Systems gemäß einer oder mehreren Ausführungsformen.
- 1C ist ein Blockschaubild beispielhafter Datenstrukturen gemäß einer oder mehreren Ausführungsformen.
- 1D ist ein Blockschaubild beispielhafter Datenstrukturen gemäß einer oder mehreren Ausführungsformen.
- 2A ist eine Sequenz gemäß einer oder mehreren Ausführungsformen.
- 2B ist eine Sequenz für eine Hash-Aktualisierungs-Operation gemäß einer oder mehreren Ausführungsformen.
- 2C ist eine Sequenz für eine Hash-Nachschlage-Operation gemäß einer oder mehreren Ausführungsformen.
- 3A ist ein Blockschaubild eines Abschnitts eines Systems gemäß einer oder mehreren Ausführungsformen.
- 3B ist ein Blockschaubild eines Mehrdomänenprozessors gemäß einer oder mehreren Ausführungsformen.
- 3C ist ein Blockschaubild eines Prozessors gemäß einer oder mehreren Ausführungsformen.
- 4 ist ein Blockschaubild eines Prozessors, der mehrere Kerne enthält, gemäß einer oder mehreren Ausführungsformen.
- 5 ist ein Blockschaubild einer Mikroarchitektur eines Prozessorkerns gemäß einer oder mehreren Ausführungsformen.
- 6 ist ein Blockschaubild einer Mikroarchitektur eines Prozessorkerns gemäß einer oder mehreren Ausführungsformen.
- 7 ist ein Blockschaubild einer Mikroarchitektur eines Prozessorkerns gemäß einer oder mehreren Ausführungsformen.
- 8 ist ein Blockschaubild einer Mikroarchitektur eines Prozessorkerns gemäß einer oder mehreren Ausführungsformen.
- 9 ist ein Blockschaubild eines Prozessors gemäß einer oder mehreren Ausführungsformen.
- 10 ist ein Blockschaubild eines repräsentativen SoC gemäß einer oder mehreren Ausführungsformen.
- 11 ist ein Blockschaubild eines anderen beispielhaften SoC gemäß einer oder mehreren Ausführungsformen.
- 12 ist ein Blockschaubild eines beispielhaften Systems, mit dem eine oder mehrere Ausführungsformen verwendet werden können.
- 13 ist ein Blockschaubild eines anderen beispielhaften Systems, mit dem eine oder mehrere Ausführungsformen verwendet werden können.
- 14 ist ein Blockschaubild eines Computersystems gemäß einer oder mehreren Ausführungsformen.
- 15 ist ein Blockschaubild eines Systems gemäß einer oder mehreren Ausführungsformen.
-
Detaillierte Beschreibung
-
Einige verlustlose Datenkomprimierungsalgorithmen enthalten Lempel-Ziv („LZ“)-Algorithmen, wie zum Beispiel LZ77. Zum Beispiel verwendet der DEFLATE-Komprimierungsalgorithmus eine Kombination aus LZ77-Algorithmus und Huffman-Codierung. Der LZ77-Algorithmus führt Doppelkettenbeseitigung aus, indem eine Zeichenkette durch einen Verweis auf eine frühere Instanz derselben Zeichenkette innerhalb eines Datenstreams ersetzt wird. Der Verweis wird durch eine Länge-Distanz (L, D)-Paar codiert. Um Übereinstimmungen mit früheren Zeichenketten zu identifizieren, verwendet LZ77 ein gleitendes Fenster des jüngsten Abschnitts des Datenstreams. In dem DEFLATE-Algorithmus folgt auf die LZ77-Doppelkettenbeseitigungsoperation eine Codierungsoperation unter Verwendung einer Huffman-Codiertechnik. Bei der Huffman-Codierung werden Symbole unter Verwendung einer Tabelle mit längenvariablen Codes auf der Grundlage von Entropie dergestalt codiert, dass häufigere Symbole allgemein unter Verwendung von weniger Bits dargestellt werden als weniger häufige Symbole. Einige LZ77-Operationen können verlinkte Listen verwenden, um frühere Zeichenketten zu identifizieren, die mit einer momentanen Zeichenkette verglichen werden sollen. Zum Beispiel kann es eine verlinkte Liste ermöglichen, dass ein Kette von Speicherorten nacheinander gelesen wird, um übereinstimmende Zeichenketten zu identifizieren. Jedoch kann das sequenzielle Lesen verketteter Orte die Geschwindigkeit der Ausführung der LZ77-Operation verlangsamen.
-
Gemäß einigen Ausführungsformen kann ein Hardware-Komprimierungsbeschleuniger mehrere Komparatoren oder Suchmaschinen enthalten, um frühere Zeichenketten zu vergleichen, die eine momentane Zeichenkette sein sollen. Der Komprimierungsbeschleuniger verwendet Hybridspeicherdatenstrukturen, die zwischen internem Speicher und externem Speicher geteilt werden. In einigen Ausführungsformen kann der Komprimierungsbeschleuniger die Zeichenketten parallel unter Verwendung von Tabelleneinträgen verarbeiten, die mehrere Positionswerte und/oder Eintragszeiger enthalten können. Dementsprechend können einige Ausführungsformen die Latenzzeit beim Zugriff auf Zeichenketten verkürzen. Des Weiteren können einige Ausführungsformen Flexibilität und Effizienz bei der Verwendung der Speicherstrukturen in dem Komprimierungsbeschleuniger ermöglichen.
-
Obgleich die folgenden Ausführungsformen mit Bezug auf bestimmte Implementierungen beschrieben werden, sind Ausführungsformen in dieser Hinsicht nicht beschränkt. Insbesondere wird in Betracht gezogen, dass ähnliche Techniken und Lehren von im vorliegenden Text beschriebenen Ausführungsformen auf andere Arten von Schaltkreisen, Halbleitevorrichtungen, Prozessoren, Systemen usw. angewendet werden können. Zum Beispiel können die offenbarten Ausführungsformen in jeder Art von Computersystem implementiert werden, das Servercomputer (zum Beispiel Tower, Rack, Blade, Mikro-Server und so weiter), Kommunikationssysteme, Speichersysteme, Desktopcomputer von beliebiger Konfiguration, Laptop-, Notebook- und Tablet-Computer (einschließlich 2:1-Tablets und so weiter) enthält.
-
Außerdem können offenbarte Ausführungsformen auch in anderen Vorrichtungen verwendet werden, wie zum Beispiel handgehaltenen Geräten, Systemson-Chip (SoCs) und eingebetteten Anwendungen. Einige Beispiele von handgehaltenen Geräten sind Mobiltelefone, wie zum Beispiel Smartphones, Internet-Protocol-Geräte, Digitalkameras, Personal Digital Assistants (PDAs) und handgehaltene PCs. Zu eingebetteten Anwendungen können in der Regel ein Mikrocontroller, ein Digitalsignalprozessor (DSP), Netzwerkcomputer (NetPC), Set-Top-Boxen, Netzwerk-Hubs, Wide Area Network (WAN)-Switches, am Körper tragbare Vorrichtungen oder sonstige Systeme gehören, die die unten gelehrten Funktionen und Operationen ausführen können. Des Weiteren können Ausführungsformen in mobilen Endgeräten implementiert werden, die standardmäßige Sprachfunktionalität besitzen, wie zum Beispiel Mobiltelefone, Smartphones und Phablets, und/oder in nicht-mobilen Endgeräten ohne standardmäßige drahtlose Sprachfunktionskommunikationsfähigkeit, wie zum Beispiel viele am Körper tragbare Vorrichtungen, Tablets, Notebooks, Desktops, Mikro-Server, Server und so weiter.
-
Wir wenden uns nun 1A zu, wo ein Blockschaubild eines Systems 100 gemäß einer oder mehreren Ausführungsformen gezeigt ist. In einigen Ausführungsformen kann das System 100 eine komplette elektronische Vorrichtung oder Komponente oder ein Teil davon sein. Zum Beispiel kann das System 100 ein Mobiltelefon, ein Computer, ein Server, eine Netzwerkvorrichtung, ein System auf einem Chip (SoC), einen Controller, ein Drahtlos-Transceiver, eine Stromversorgungseinheit usw. sein. Des Weiteren kann das System 100 in einigen Ausführungsformen eine beliebige Gruppierung von einander zugeordneten oder miteinander verbundenen Vorrichtungen sein, wie zum Beispiel ein Datencenter, ein Computer-Cluster usw.
-
Wie in 1A gezeigt, kann das System 100 einen Prozessor 110 und Systemspeicher 130 enthalten. Des Weiteren kann das System 100, obgleich in 1A nicht gezeigt, noch weitere Komponenten enthalten. Der Prozessor 110 kann ein Allzweck-Hardware-Prozessor sein (zum Beispiel eine zentrale Verarbeitungseinheit (CPU)). Wie gezeigt, kann der Prozessor 110 eine beliebige Anzahl von Verarbeitungskernen 115, einen Komprimierungsbeschleuniger 120 und Cache-Speicher 118 enthalten. Jeder Kern 115 kann ein Allzweck-Verarbeitungskern sein. Der Systemspeicher 130 und der Cache-Speicher 118 können mittels beliebiger Arten von Computerspeicher implementiert werden (zum Beispiel dynamischer Direktzugriffsspeicher (DRAM), statischer Direktzugriffsspeicher (SRAM), nicht-flüchtiger Speicher (NVM), eine Kombination aus DRAM und NVM, usw.). Der Cache-Speicher 118 kann einen Cache auf Prozessorebene, einen Cache auf Kernebene, einen gemeinsam genutzten Cache und/oder eine Kombination davon enthalten.
-
In einer oder mehreren Ausführungsformen kann der Komprimierungsbeschleuniger 120 eine Hardwareeinheit sein, die speziell auf die Ausführung von Komprimierungsoperationen ausgelegt ist. Zum Beispiel kann der Komprimierungsbeschleuniger 120 eine beliebige Hardwareeinheit sein, wie zum Beispiel ein Komprimierungs-Koprozessor, eine Einsteckkarte, ein Modul, ein Chip, ein Verarbeitungsblock usw. Der Komprimierungsbeschleuniger 120 kann Eingangsdaten empfangen und kann Operationen ausführen, um die Eingangsdaten zu komprimieren. Zum Beispiel kann in einigen Ausführungsformen der Komprimierungsbeschleuniger 120 Komprimierungsoperationen auf der Basis des LZ77-Algorithmus ausführen und kann Länge-Distanz-Paare verwenden, um duplizierte Zeichenketten innerhalb der Eingangsdaten zu codieren. Des Weiteren kann der Komprimierungsbeschleuniger 120 in einigen Ausführungsformen andere Komprimierungsalgorithmen verwenden. Zum Beispiel kann der Komprimierungsbeschleuniger 120 einen DEFLATE-Algorithmus, einen Lempel-Ziv-Oberhumer (LZO)-Algorithmus, einen Lempel-Ziv-Stac (LZS)-Algorithmus, einen LZ4-Algorithmus, einen LZF-Algorithmus und so weiter verwenden.
-
Wir wenden uns nun 1B zu, wo ein Blockschaubild des Komprimierungsbeschleunigers 120 gemäß einer oder mehreren Ausführungsformen gezeigt ist. Wie gezeigt, kann der Komprimierungsbeschleuniger 120 einen Hash-Tabellenspeicher 141, einen lokalen Verlaufsspeicher 161 und eine beliebige Anzahl N von Komparatoren 128A-128N (gemeinsam als „Komparatoren 128“ bezeichnet) enthalten. Des Weiteren kann der Komprimierungsbeschleuniger 120 in einigen Ausführungsformen mit einer Überlauftabelle 150 und einem räumlich abgesetzten Verlaufspuffer 168 gekoppelt sein.
-
In einigen Ausführungsformen sind der Hash-Tabellenspeicher 141 und der lokale Verlaufsspeicher 161 spezialisierte Speichereinheiten, die in dem Komprimierungsbeschleuniger 120 enthalten sind. Zum Beispiel können der Hash-Tabellenspeicher 141 und der lokale Verlaufsspeicher 161 DRAM, SRAM, NVM und so weiter enthalten. Der lokale Verlaufsspeicher 161 ist auf das Speichern eines lokalen Verlaufspuffers 164 spezialisiert. In einigen Ausführungsformen speichert der lokale. Verlaufspuffer 164 eine feste Anzahl der jüngsten Zeichen, die durch den Komprimierungsbeschleuniger 120 verarbeitet werden (als das „gleitende Fenster“ bezeichnet). Zum Beispiel speichert der lokale Verlaufspuffer 164 in einer Ausführungsform ein gleitendes Fenster mit einer Kapazität von 16 kB.
-
In einigen Ausführungsformen können die Zeichen, die aus dem gleitenden Fenster des lokalen Verlaufspuffers 164 verfallen, in dem räumlich abgesetzten Verlaufspuffer 168 gespeichert werden. In einigen Ausführungsformen kann der räumlich abgesetzte Verlaufspuffer 168 außerhalb des Komprimierungsbeschleunigers 120 gespeichert werden. Zum Beispiel kann der räumlich abgesetzte Verlaufspuffer 168 in dem Cache-Speicher 118 oder dem Systemspeicher 130 (in 1A gezeigt), in einer Kombination aus Cache-Speicher 118 und Systemspeicher 130 oder an irgend einem sonstigen Speicherort des Systems 100 gespeichert werden. Der lokale Verlaufspuffer 164 und der räumlich abgesetzte Verlaufspuffer 168 können gemeinsam als der „Verlaufspuffer“ bezeichnet werden.
-
Der Hash-Tabellenspeicher 141 kann auf das Speichern einer Hash-Tabelle 140 spezialisiert sein. Die Hash-Tabelle 140 kann eine beliebige Anzahl von Einträgen enthalten (im vorliegenden Text als „Hash-Einträge“ bezeichnet), die gemäß Hash-Werten indexiert werden. In einigen Ausführungsformen entspricht jeder Hash-Eintrag der Hash-Tabelle 140 einem eindeutigen Hash-Wert eines Eingangsdatenabschnitts (zum Beispiel einer Zeichenkette von drei Bytes). Jeder Hash-Eintrag kann einen Satz aus N Positionsfeldern und einem Zeigerfeld enthalten. Jedes der N Positionsfelder kann einen Positionswert speichern, der die Verlaufspufferposition einer früher verarbeiteten Zeichenkette angibt, die mit dem Hash-Wert jenes Hash-Eintrags verknüpft ist. Zum Beispiel kann die Hash-Tabelle 140 in einer Ausführungsform 32 kB an Hash-Einträgen enthalten, wobei jeder Hash-Eintrag vier Positionsfelder enthält. In einigen Ausführungsformen werden alle Hash-Einträge der Hash-Tabelle 140, die voll werden, zu der Überlauftabelle 150 verschoben. Ein Beispiel des Verschiebens von Hash-Einträgen zu der Überlauftabelle 150 wird unten mit Bezug auf 1C beschrieben.
-
In einigen Ausführungsformen kann jeder der Komparatoren 128A-128N eine Ausführungseinheit sein, die Schaltungen oder Logik zum Suchen nach übereinstimmenden Zeichenketten in dem Verlaufspuffer enthält. Zum Beispiel können in einigen Ausführungsformen die Komparatoren 128A-128N jeweils eine Suchoperation durch Vergleichen von Eingangsdaten mit einer Sequenz von aus dem Verlaufspuffer gelesenen Zeichen ausführen. Auf die aus dem Verlaufspuffer gelesenen Daten kann unter Verwendung der Positionsfelder der Hash-Tabelle 140 und/oder der Überlauftabelle 150 zugegriffen werden. In einigen Ausführungsformen können die Komparatoren 128A-128N jeweils auf einen anderen Ort in dem Verlaufspuffer zugreifen. Dementsprechend können die Komparatoren 128A-128N N Suchoperationen parallel ausführen.
-
Wir wenden uns nun 1C zu, wo ein Blockschaubild beispielhafter Datenstrukturen 121 gemäß einer oder mehreren Ausführungsformen gezeigt ist. Genauer gesagt, zeigt 1C Beispiele einer Hash-Tabelle 140, einer Überlauftabelle 150 und eines Verlaufspuffers 160. Der Verlaufspuffer 160 kann dem lokalen Verlaufspuffer 164, dem räumlich abgesetzten Verlaufspuffer 168 oder einer Kombination davon entsprechen. Es ist zu beachten, dass die in 1C gezeigten Datenstrukturen 121 nur beispielhafte sind und keine der Ausführungsformen einschränken sollen.
-
Wie in 1C gezeigt, enthält die Hash-Tabelle 140 mehrere Zeilen, wobei jede Zeile einen Hash-Eintrag darstellt. In diesem Beispiel ist jeder Hash-Eintrag der Hash-Tabelle 140 so gezeigt, dass er vier Positionsfelder 142A-142D (gemeinsam als Positionsfelder 142 bezeichnet) und ein Überlaufzeigerfeld 144 enthält. Jeder Hash-Eintrag ist auf einen eindeutigen Hash-Wert eines Eingangsdatenabschnitts indexiert (zum Beispiel eine Zeichenkette in einem Datenstream). Der Prozess des Aktualisierens der Hash-Tabelle 140 kann als eine „Hash-Aktualisierungs“-Operation bezeichnet werden. Des Weiteren kann der Prozess des Lesens der Hash-Tabelle 140 als eine „Hash-Nachschlage“-Operation bezeichnet werden.
-
Wie in 1C gezeigt, enthält die Überlauftabelle 150 mehrere Zeilen, wobei jede Zeile einen Überlaufeintrag darstellt. In diesem Beispiel ist jeder Überlaufeintrag der Überlauftabelle 150 so gezeigt, dass er vier Positionsfelder 152A-152D (gemeinsam als Überlauffelder 152 bezeichnet) und ein Link-Zeigerfeld 154 enthält. Des Weiteren enthält der Verlaufspuffer 160 eine Anzahl von Speicherorten zum Speichern von Eingangsdaten (zum Beispiel ein gleitendes Fenster von Zeichen). In einigen Ausführungsformen können die Hash-Einträge der Hash-Tabelle 140 und/oder die Überlaufeinträge der Überlauftabelle 150 so bemessen sein, dass sie mit den Cache-Zeilen im Cache-Speicher 118 (in 1A gezeigt) übereinstimmen.
-
Nehmen wir an, dass 1C einen Zustand der Datenstrukturen während einer Komprimierungsoperation zeigt. Nehmen wir des Weiteren an, dass zum Zeitpunkt des Initiierens und/oder Zurücksetzens der Komprimierungsoperation die Datenstrukturen 121 keinerlei Werte enthielten (nicht gezeigt).
-
In einigen Ausführungsformen wird während einer Komprimierungsoperation jede Zeichenkette, die verarbeitet wird, an einem ersten Ort des Verlaufspuffers 160 gespeichert (d. h. am Beginn des gleitenden Fensters). Des Weiteren wird der Hash-Wert der Zeichenkette bestimmt, und der Ort jener Zeichenkette im Verlaufspuffer 160 wird in einem Positionsfeld 142 des Hash-Eintrags gespeichert, der auf den Hash-Wert der Zeichenkette indexiert ist. Dieser Prozess kann wiederholt werden, bis alle vier Positionsfelder 142 in einem Hash-Eintrag mit jeweiligen Positionswerten ausgefüllt sind. Nehmen wir zum Beispiel an, dass die mit dem Hash-Eintrag 146 verknüpfte Zeichenkette zweimal während der Komprimierungsoperation aufgetreten ist und die mit dem Hash-Eintrag 145 verknüpfte Zeichenkette viermal während der Komprimierungsoperation aufgetreten ist. Dementsprechend enthalten, wie in 1C gezeigt, die ersten zwei Positionsfelder 142A-142B des Hash-Eintrags 146 jeweils Positionswerte (durch den Buchstaben „L“ dargestellt), die verschiedene Orte in dem Verlaufspuffer 160 identifizieren, aber die übrigen Positionsfelder 142C-142D und das Überlaufzeigerfeld 144 des Hash-Eintrags 146 bleiben leer. Des Weiteren enthalten, wie gezeigt, die vier Positionsfelder 142A-142C des Hash-Eintrags 145 jeweils Positionswerte.
-
In einigen Ausführungsformen werden in dem Fall, dass alle Positionsfelder 142 in einem Hash-Eintrag bereits ausgefüllt sind, die in diesem Hash-Eintrag gespeicherten Werte zu einem neuen Eintrag der Überlauftabelle 150 verschoben oder „weitergereicht“. Zum Beispiel kann, unter Bezug auf den Hash-Eintrag 145, falls eine neue Zeichenkette mit demselben Hash angetroffen wird, ein neuer Überlaufeintrag in der Überlauftabelle 150 generiert werden, und der Inhalt des Hash-Eintrags (zum Beispiel die Werte, die in den Positionsfeldern 142A-142D und dem Überlaufzeigerfeld 144 gespeichert sind) kann zu dem neuen Überlaufeintrag kopiert werden. Der Inhalt des Hash-Eintrags kann gelöscht werden, und somit können die Felder des Hash-Eintrags freigemacht werden, um neue Daten zu speichern. Des Weiteren kann das Überlaufzeigerfeld 144 des Hash-Eintrags mit einem Zeiger zu dem neuen Überlaufeintrag besetzt werden. Auf diese Weise kann das Überlaufzeigerfeld 144 einen Link von dem Hash-Eintrag zu dem neuen Überlaufeintrag definieren. Zum Beispiel ist, wie in 1C zu sehen, das Überlaufzeigerfeld 144 des Hash-Eintrags 147 so gezeigt, dass es einen Überlaufzeiger (durch die Buchstaben „OP“ dargestellt) zu dem Überlaufeintrag 156 enthält, wodurch angegeben wird, dass die vier Positionsfelder 142A-142D des Hash-Eintrags 147 zuvor ausgefüllt waren und der Inhalt der Positionsfelder 142A-142D des Hash-Eintrags 147 dann zu dem Überlaufeintrag 156 weitergereicht wurde.
-
In einigen Ausführungsformen kann die Überlauftabelle 150 mehrere Überlaufeinträge enthalten, die in einer Kette zu einem Hash-Eintrag verlinkt sind. Nehmen wir zum Beispiel unter Bezug auf 1C an, dass der Hash-Eintrag 147 zweimal übergelaufen ist. Dementsprechend ist der Überlaufeintrag 156 so gezeigt, dass er einen Linkzeiger (durch die Buchstaben „LP“ dargestellt) zu dem Überlaufeintrag 158 enthält, wodurch angegeben wird, dass der Hash-Eintrag 147 zuerst zum Überlaufeintrag 158 überlief und später zum Überlaufeintrag 156 überlief. Auf diese Weise kann das Link-Zeigerfeld 154 dafür verwendet werden, eine Kette einer beliebigen Anzahl von Überlaufeinträgen zu verlinken. Es ist zu beachten, dass das Link-Zeigerfeld 154 des Überlaufeintrags 158 leer ist, wodurch angegeben wird, dass Überlaufeintrag 158 in der ersten Instanz erzeugt wurde, die Hash-Eintrag 147 weitergereicht hat.
-
In einigen Ausführungsformen braucht ein Hash-Eintrag der Hash-Tabelle 140 nur zu der Überlauftabelle 150 verschoben oder weitergereicht zu werden, wenn alle Positionsfelder 142 jenes Hash-Eintrags ausgefüllt sind. Dementsprechend sind in einigen Ausführungsformen alle Positionsfelder 152 in jedem Überlaufeintrag der Überlauftabelle 150 während des Betriebes voll.
-
In einigen Ausführungsformen kann die Überlauftabelle 150 außerhalb des Komprimierungsbeschleunigers 120 gespeichert werden. Zum Beispiel kann, unter Bezug auf 1A, die Überlauftabelle 150 in dem Cache-Speicher 118, dem Systemspeicher 130, einer Kombination aus Cache-Speicher 118 und Systemspeicher 130 oder irgend einem sonstigen Speicherort des Systems 100 gespeichert werden. In einigen Ausführungsformen wird die Überlauftabelle 150 nicht nach Ort indexiert, sondern wird vielmehr durch Zeiger von der Hash-Tabelle 140 indexiert. Somit kann in solchen Ausführungsformen die Überlauftabelle 150 eine beliebige Anzahl von Einträgen ungeachtet der Anzahl von Orten in einer Verlaufsdatenstruktur enthalten.
-
In einigen Ausführungsformen verwendet jeder Komparator 128 (in 1B gezeigt) ein eindeutiges Positionsfeld zum Lesen von Daten aus dem Verlaufspuffer 160. Oder anders ausgedrückt: Die Anzahl N von Komparatoren 128 in dem Komprimierungsbeschleuniger 120 kann gleich der Anzahl der Positionsfelder in der Hash-Tabelle 140 sein. Nehmen wir zum Beispiel unter Bezug auf die 1B-1C an, dass der Komprimierungsbeschleuniger 120 vier Komparatoren 128 enthält, wobei jeder Komparator 128 ein anderes der Positionsfelder 142A-142D verwendet, um auf den Verlaufspuffer 160 zuzugreifen. Somit können in diesem Beispiel die vier Komparatoren 128 des Komprimierungsbeschleunigers 120 vier parallele Suchoperationen für jeden Hash-Eintrag oder Überlaufeintrag, der gelesen wird, ausführen. Dementsprechend können in einigen Ausführungsformen die Lesewartezeiten jedes Komparators 128 verkürzt werden, indem auf N Orte parallel zugegriffen wird.
-
Wir wenden uns nun 1D zu, wo ein Blockschaubild beispielhafter Datenstrukturen 122 gemäß einer oder mehreren Ausführungsformen gezeigt ist. Genauer gesagt, zeigt 1D Beispiele eines Hash-Eintrags 170 und von Überlaufeinträgen 180A-180D (gemeinsam als Überlaufeinträge 180) bezeichnet gemäß einigen Ausführungsformen.
-
Wie in 1D gezeigt, kann der Hash-Eintrag 170 einen Positionsabschnitt 172 und einen Überlaufabschnitt 174 enthalten. In einigen Ausführungsformen kann der Positionsabschnitt 172 mehrere Positionsfelder enthalten, und der Überlaufabschnitt 174 kann zwei Überlaufzeigerfelder 174A-174B enthalten. Des Weiteren kann jeder Überlaufeintrag 180 einen Positionsabschnitt 182 und einen Zeigerabschnitt 184 enthalten. In einigen Ausführungsformen kann der Positionsabschnitt 182 mehrere Positionsfelder enthalten, und der Zeigerabschnitt 184 kann ein Link-Zeigerfeld sein.
-
Wie gezeigt, kann in einigen Ausführungsformen das Überlaufzeigerfeld 174A einen Überlaufzeiger zum Überlaufeintrag 180C enthalten. Des Weiteren kann das Überlaufzeigerfeld 174B einen Überlaufzeiger zum Überlaufeintrag 180B enthalten. Es ist zu beachten, dass in diesem Beispiel der Zeigerabschnitt 184C des Überlaufeintrags 180C einen Linkzeiger zum Überlaufeintrag 180D enthält. Außerdem enthält der Zeigerabschnitt 184B des Überlaufeintrags 180B einen Linkzeiger zum Überlaufeintrag 180A. Somit ist der Hash-Eintrag 170 mit zwei separaten Ketten von Überlaufeinträgen verlinkt, und zwar einer ersten Kette, die den Überlaufeintrag 180B und den Überlaufeintrag 180A enthält, und einer zweiten Kette, die den Überlaufeintrag 180C und den Überlaufeintrag 180D enthält. Auf diese Weise können es die mehreren Überlaufzeigerfelder 174A-174B ermöglichen, dass sich der Hash-Eintrag 170 mit mehreren Ketten von Überlaufeinträgen 180 verlinkt.
-
Es ist zu beachten, dass die 1A-1D zwar verschiedene Beispiele zeigen, dass aber Ausführungsformen nicht in dieser Hinsicht beschränkt sind. Insbesondere wird in Betracht gezogen, dass das System 100 und/oder der Komprimierungsbeschleuniger andere Komponenten, zusätzliche Komponenten, andere Anordnungen von Komponenten und/oder andere Anzahlen von Komponenten als in den 1A-1B gezeigt enthalten können. Zum Beispiel kann der Komprimierungsbeschleuniger 120 einen (nicht gezeigten) Huffman-Codierer enthalten. Des Weiteren können, unter Bezug auf 1C, die Hash-Tabelle 140 und/oder die Überlauftabelle 150 jede beliebige Anzahl und Anordnung von Zeilen, Spalten, Feldern und so weiter enthalten. Zum Beispiel kann in einigen Ausführungsformen jeder Überlaufeintrag in der Überlauftabelle 150 ein (nicht gezeigtes) Feld zum Speichern des mit dem Überlaufeintrag verknüpften Hash-Wertes enthalten. In einigen Ausführungsformen kann der Komprimierungsbeschleuniger 120 ein solches Hash-Wert-Feld verwenden, um zu verifizieren, dass Überlaufeinträge, auf die über Zeiger zugegriffen wird, gültige Links zu einem bestimmten Hash-Eintrag der Hash-Tabelle 140 sind. Des Weiteren kann in einigen Ausführungsformen die Hash-Tabelle 140 dieselbe Feldposition (d. h. das Feld, das dem Hash-Wert-Feld in den Überlaufeinträgen entspricht) zum Speichern von zusätzlichen Überlaufzeigern (wie zum Beispiel das in 1D gezeigte Überlaufzeigerfeld 174B) verwenden.
-
Wir wenden uns nun 2A zu, wo eine Sequenz 200 gemäß einer oder mehreren Ausführungsformen gezeigt ist. In einigen Ausführungsformen kann die Sequenz 200 Teil des in den 1A-1C gezeigten Komprimierungsbeschleunigers 120 sein. Die Sequenz 200 kann in Hardware, Software und/oder Firmware implementiert werden. In Firmware- und Software-Ausführungsformen kann sie durch Computer-ausgeführte Instruktionen implementiert werden, die in einem nicht-transitorischen maschinenlesbaren Medium gespeichert werden, wie zum Beispiel einer optischen, Halbleiter- oder magnetischen Speichervorrichtung. Das maschinenlesbare Medium kann Daten speichern, die, falls sie durch mindestens eine Maschine verwendet werden, die mindestens eine Maschine veranlassen, mindestens einen integrierten Schaltkreis herzustellen, um ein Verfahren auszuführen. Zum Zweck der Veranschaulichung können die an der Sequenz 200 beteiligten Schritte unten mit Bezug auf die 1A-1C beschrieben werden, die Beispiele gemäß einigen Ausführungsformen zeigen. Jedoch ist der Geltungsbereich der verschiedenen im vorliegenden Text besprochenen Ausführungsformen in dieser Hinsicht nicht beschränkt.
-
Bei Block 202 kann ein Hardware-Komprimierungsbeschleuniger zu komprimierende Eingangsdaten empfangen. Zum Beispiel kann, unter Bezug auf die 1A-1B, der Komprimierungsbeschleuniger 120 eine zu komprimierende Zeichenkette empfangen.
-
Bei Block 204 kann ein Hash-Wert für die Eingangsdaten bestimmt werden. Zum Beispiel kann, unter Bezug auf die 1A-1B, der Komprimierungsbeschleuniger 120 einen Hash-Wert einer Eingabezeichenkette (zum Beispiel ein Byte, ein Satz Bytes usw.) berechnen.
-
Bei Block 206 kann der Komprimierungsbeschleuniger N Positionswerte lesen, die in einem Hash-Tabelleneintrag enthalten sind, der durch den Hash-Wert indexiert wird. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 die Positionsfelder 142A-142D in dem Hash-Eintrag 145 der Hash-Tabelle 140 lesen und dadurch einen Satz von Werten erhalten, die vier verschiedenen Orten in dem Verlaufspuffer 160 entsprechen.
-
Bei Block 207 können mehrere erste Zeichenketten parallel aus einem Verlaufspuffer anhand der N Positionswerte, die aus dem Hash-Tabelleneintrag erhalten werden, gesucht werden. Zum Beispiel können, unter Bezug auf die 1A-1C, die Komparatoren 128A-128N separate parallele Vergleiche der Eingangsdaten mit den vier Zeichenketten ausführen, die von den vier Orten erhaltenen werden, die durch die Positionsfelder 142A-142D eines Hash-Eintrags identifiziert werden. In einigen Ausführungsformen können die Orte in dem Verlaufspuffer 160 enthalten sein.
-
Bei Block 208 kann der Komprimierungsbeschleuniger N Positionswerte lesen, die in einem Überlauftabelleneintrag enthalten sind, der durch einen Zeiger indexiert wird, der in dem Hash-Tabelleneintrag enthalten ist. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 die Positionsfelder 152A-152D in dem Überlaufeintrag 156 lesen, der durch den Zeiger indexiert wird, der in dem Überlaufzeigerfeld 144 des Hash-Eintrags 147 gespeichert ist, und dadurch einen zweiten Satz von Werten aus dem Verlaufspuffer 160 erhalten. In einigen Ausführungsformen kann der Komprimierungsbeschleuniger 120 des Weiteren Zeiger zum Lesen von Positionsfeldern in zusätzlichen Überlaufeinträgen verwenden.
-
Bei Block 209 können mehrere zweite Zeichenketten parallel aus einem Verlaufspuffer anhand der Positionswerte, die aus dem Überlauftabelleneintrag erhalten werden, gesucht werden. Zum Beispiel können, unter Bezug auf die 1A-1C, die Komparatoren 128A-128N separate parallele Vergleiche der Eingangsdaten mit den vier Zeichenketten ausführen, die von den vier Orten erhalten werden, die durch die Positionsfelder 152A-152D eines Überlaufeintrags identifiziert werden.
-
Bei Block 210 kann eine der gesuchten Zeichenketten ausgewählt werden. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 eine in dem Verlaufspuffer 160 gespeicherte Zeichenkette auswählen, die eine beste Übereinstimmung für die Eingabezeichenkette darstellt. In einigen Ausführungsformen enthält die Zeichenkette, die als die beste Übereinstimmung ausgewählt wird, die längste Sequenz von Zeichen, die mit den Eingangsdaten übereinstimmt.
-
Bei Block 212 kann eine Doppelkettenbeseitigungsoperation an den Eingangsdaten unter Verwendung der ausgewählten Zeichenkette ausgeführt werden. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 die Distanz und die Länge der Übereinstimmung codieren, um ein Distanz/Länge-Paar zu generieren. Wenn es keine geeignete Übereinstimmung gibt, so wird die momentane Zeichenkette (zum Beispiel ein Byte) als ein Literal ohne Codierung ausgegeben. Der Komprimierungsbeschleuniger 120 kann einen Stream von Eingangsdaten verarbeiten und kann einen Ausgabestream von codierten Distanz/Länge-Paaren und Literalen generieren. In einigen Ausführungsformen kann der Ausgabestream ein LZ77-Stream sein. Des Weiteren kann in einigen Ausführungsformen der Ausgabestream in einen Huffman-Codierer zur weiteren Komprimierung eingespeist werden. Nach Block 212 ist die Sequenz 200 vollendet.
-
Wir wenden uns nun 2B zu, wo eine Sequenz 220 für eine Hash-Aktualisierungs-Operation gemäß einer oder mehreren Ausführungsformen gezeigt ist. In einigen Ausführungsformen kann die Sequenz 220 Teil des in den 1A-1B gezeigten Komprimierungsbeschleunigers 120 sein. Die Sequenz 220 kann in Hardware, Software und/oder Firmware implementiert werden. In Firmware- und Software-Ausführungsformen kann sie durch Computer-ausgeführte Instruktionen implementiert werden, die in einem nicht-transitorischen maschinenlesbaren Medium gespeichert sind, wie zum Beispiel einer optischen, Halbleiter- oder magnetischen Speichervorrichtung. Das maschinenlesbare Medium kann Daten speichern, die, falls sie durch mindestens eine Maschine verwendet werden, die mindestens eine Maschine veranlassen, mindestens einen integrierten Schaltkreis herzustellen, um ein Verfahren auszuführen. Zum Zweck der Veranschaulichung die an der Sequenz 220 beteiligten Schritte können unten mit Bezug auf die 1A-1C beschrieben werden, die Beispiele gemäß einigen Ausführungsformen zeigen. Jedoch ist der Geltungsbereich der verschiedenen im vorliegenden Text besprochenen Ausführungsformen in dieser Hinsicht nicht beschränkt.
-
Bei Block 222 kann ein Hash-Wert für Eingangsdaten bestimmt werden. Zum Beispiel kann, unter Bezug auf die 1A-1B, der Komprimierungsbeschleuniger 120 einen Hash-Wert einer Eingabezeichenkette (zum Beispiel ein Byte, ein Satz von Bytes usw.) berechnen.
-
Bei Block 224 wird eine Bestimmung vorgenommen, ob ein Hash-Eintrag, der dem Hash-Wert entspricht, bereits in einer Hash-Tabelle existiert. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 bestimmen, ob die Hash-Tabelle 140 einen Hash-Eintrag enthält, der auf den Hash-Wert der Eingangsdaten indexiert ist.
-
Wenn bei Block 224 bestimmt wird, dass ein Hash-Eintrag, der dem Hash-Wert entspricht, nicht in der Hash-Tabelle existiert, dann wird bei Block 226 ein neuer Hash-Eintrag zu der Hash-Tabelle hinzugefügt. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 bestimmen, dass die Hash-Tabelle 140 keinen Hash-Eintrag enthält, der mit dem Hash-Wert verknüpft ist, und kann dann einen neuen Hash-Eintrag zu der Hash-Tabelle 140 hinzufügen.
-
Bei Block 234 kann der Ort der Eingangsdaten einem leeren Feld des Hash-Eintrages hinzugefügt werden. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 die in den Positionsfeldern 142A-142B des Hash-Eintrags 146 gespeicherten Positionswerte um ein Feld verschieben und kann den Positionswert der Eingabezeichenkette in Positionsfeld 142A des Hash-Eintrags 146 speichern. Nach Block 234 kann die Sequenz 220 vollendet werden.
-
Falls aber bei Block 224 bestimmt wird, dass ein Hash-Eintrag, der dem Hash-Wert entspricht, in der Hash-Tabelle existiert, dann wird bei Block 230 eine Bestimmung vorgenommen, ob alle Positionsfelder in dem Hash-Eintrag voll sind (d. h. bereits mit Positionswerten gefüllt sind). Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 bestimmen, ob alle Positionsfelder 142A-142D des Hash-Eintrags 146 voll sind.
-
Wenn bei Block 230 bestimmt wird, dass nicht alle Positionsfelder in dem Hash-Eintrag voll sind, dann kann die Sequenz 220 bei Block 234 (oben beschrieben) fortgesetzt werden. Nach Block 234 kann die Sequenz 220 vollendet werden.
-
Falls aber bei Block 230 bestimmt wird, dass alle Positionsfelder in dem Hash-Eintrag voll sind, dann kann bei Block 240 ein neuer Überlaufeintrag in einer Überlauftabelle erzeugt werden. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 einen neuen Überlaufeintrag in der Überlauftabelle 150 erzeugen. In einigen Ausführungsformen kann in dem Fall, dass bereits ein früherer Überlaufeintrag mit dem Hash-Eintrag verknüpft wurde, das Link-Zeigerfeld 154 des neuen Überlaufeintrags mit einem Linkzeiger zu dem früheren Überlaufeintrag belegt werden. Zum Beispiel enthält, unter Bezug auf 1C, das Link-Zeigerfeld 154 des Überlaufeintrags 156 einen Linkzeiger zum Überlaufeintrag 158.
-
Bei Block 244 können die Positionsfelder des Hash-Eintrags zu dem neuen Überlaufeintrag weitergereicht werden. Bei Block 246 kann dem Überlaufzeigerfeld des Hash-Eintrags ein Zeiger zu dem neuen Überlaufeintrag hinzugefügt werden. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 die Positionsfelder des Hash-Eintrags zu dem neuen Überlaufeintrag verschieben und kann das Überlaufzeigerfeld des Hash-Eintrags belegen. Nach Block 246 kann die Sequenz 220 bei Block 234 (oben beschrieben) fortgesetzt werden. Nach Block 234 kann die Sequenz 220 vollendet werden.
-
Wir wenden uns nun 2C zu, wo eine Sequenz 250 für eine Hash-Nachschlage-Operation gemäß einer oder mehreren Ausführungsformen gezeigt ist. In einigen Ausführungsformen kann die Sequenz 220 Teil des in den 1A-1B gezeigten Komprimierungsbeschleunigers 120 sein. Die Sequenz 250 kann in Hardware, Software und/oder Firmware implementiert werden. In Firmware- und Software-Ausführungsformen kann sie durch Computer-ausgeführte Instruktionen implementiert werden, die in einem nicht-transitorischen maschinenlesbaren Medium gespeichert sind, wie zum Beispiel einer optischen, Halbleiter- oder magnetischen Speichervorrichtung. Das maschinenlesbare Medium kann Daten speichern, die, falls sie durch mindestens eine Maschine verwendet werden, die mindestens eine Maschine veranlassen, mindestens einen integrierten Schaltkreis herzustellen, um ein Verfahren auszuführen. Zum Zweck der Veranschaulichung können die an der Sequenz 250 beteiligten Schritte unten mit Bezug auf die 1A-1C beschrieben werden, die Beispiele gemäß einigen Ausführungsformen zeigen. Jedoch ist der Geltungsbereich der verschiedenen im vorliegenden Text besprochenen Ausführungsformen in dieser Hinsicht nicht beschränkt.
-
Bei Block 252 kann ein Hash-Wert für Eingangsdaten bestimmt werden. Zum Beispiel kann, unter Bezug auf die 1A-1B, der Komprimierungsbeschleuniger 120 einen Hash-Wert einer Eingabezeichenkette (zum Beispiel ein Byte, ein Satz von Bytes usw.) berechnen.
-
Bei Block 254 können die N Positionswerte, die in einem Tabelleneintrag enthalten sind, der mit dem Hash-Wert verknüpft ist, gelesen werden. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 die Positionsfelder 142A-142D in dem Hash-Eintrag 145 der Hash-Tabelle 140 lesen und dadurch Werte erhalten, die vier verschiedenen Orten in dem Verlaufspuffer 160 entsprechen.
-
Bei Block 256 kann ein Satz von N Vergleichen parallel unter Verwendung der aus dem Tabelleneintrag erhaltenen N Positionswerte ausgeführt werden. Zum Beispiel kann, unter Bezug auf die 1A-1C, jeder der Komparatoren 128A-128N einen separaten Vergleich der Eingangsdaten mit einer anderen in dem Verlaufspuffer 160 gespeicherten Zeichenkette ausführen.
-
Bei Block 258 wird eine Bestimmung vorgenommen, ob die Hash-Nachschlage-Operation vollendet ist. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 bestimmen, ob die Suche nach einer übereinstimmenden Zeichenkette eine Mindestschwelle erfüllt hat (zum Beispiel eine Länge der Übereinstimmung, eine Dauer der Suche, eine Anzahl von Links und so weiter). Wenn bei Block 258 bestimmt wird, dass die Hash-Nachschlage-Operation vollendet ist, dann kann bei Block 260 eine Komprimierungsoperation unter Verwendung der besten gefundenen Übereinstimmung ausgeführt werden. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 einen LZ77-Algorithmus unter Verwendung der längsten übereinstimmenden Zeichenkette ausführen, die während der Hash-Nachschlage-Operation gefunden wurde. Nach Block 260 kann die Sequenz 250 vollendet werden.
-
Falls aber bei Block 258 bestimmt wird, dass die Hash-Nachschlage-Operation nicht vollendet ist, dann wird bei Block 262 eine Bestimmung vorgenommen, ob es einen Zeiger zu einem Überlaufeintrag gibt. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 bestimmen, ob das Überlaufzeigerfeld 144 des Hash-Eintrags 147 einen Zeiger zu einem Überlaufeintrag in der Überlauftabelle 150 enthält. In einem anderen Beispiel kann der Komprimierungsbeschleuniger 120 bestimmen, ob das Link-Zeigerfeld 154 des Überlaufeintrags 156 einen Zeiger zu einem anderen Überlaufeintrag in der Überlauftabelle 150 enthält.
-
Wenn bei Block 262 bestimmt wird, dass es einen Zeiger zu einem Überlaufeintrag gibt, dann kann bei Block 264 dem Zeiger zu dem Überlaufeintrag gefolgt werden. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 das Überlaufzeigerfeld 144 des Hash-Eintrags 147 zum Lesen des Überlaufeintrags 156 verwenden. In einem anderen Beispiel kann der Komprimierungsbeschleuniger 120 das Link-Zeigerfeld 154 des Überlaufeintrags 156 zum Lesen des Überlaufeintrags 158 verwenden. Nach Block 264 kann die Sequenz 220 zu Block 254 (oben beschrieben) zurückkehren. Zum Beispiel kann, unter Bezug auf die 1A-1C, der Komprimierungsbeschleuniger 120 die Positionsfelder 152A-152D im Überlaufeintrag 156 oder im Überlaufeintrag 158 lesen. Falls aber bei Block 262 bestimmt wird, dass es keine Zeiger zu einem Überlaufeintrag gibt, dann kann die Sequenz 220 vollendet werden.
-
Es ist zu beachten, dass die in den 1A-1D und 2A-2C gezeigten Beispiele lediglich der Veranschaulichung dienen und keine der Ausführungsformen einschränken sollen. Es wird in Betracht gezogen, dass die Spezifika in den Beispielen, die in den 1A-1D und 2A-2C gezeigt sind, überall in einer oder mehreren Ausführungsformen verwendet werden können.
-
Wir wenden uns nun 3A zu, wo ein Blockschaubild eines Systems 300 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Wie in 3A gezeigt, kann das System 300 verschiedene Komponenten enthalten, einschließlich eines Prozessors 303, der, wie gezeigt, ein Mehrkernprozessor ist. Der Prozessor 303 kann mit einer Stromversorgung 317 über einen externen Spannungsregler 316 gekoppelt sein, der eine erste Spannungswandlung ausführen kann, um den Prozessor 303 mit einer geregelten Primärspannung zu versorgen.
-
Wie zu sehen, kann der Prozessor 303 ein Einzel-Die-Prozessor sein, der mehrere Kerne 304a - 304n enthält. Außerdem kann jeder Kern 304 mit einem integrierten Spannungsregler (IVR) 308a - 308n verknüpft sein, der die geregelte Primärspannung empfängt und eine Betriebsspannung generiert, die in einen oder mehrere Agenten des Prozessors einzuspeisen ist, die mit dem IVR 308 verknüpft sind. Dementsprechend kann eine IVR-Implementierung bereitgestellt werden, um eine hochauflösende Steuerung der Spannung und somit der Energie und Leistung jedes einzelnen Kerns 304 zu ermöglichen. Insofern kann jeder Kern 304 mit einer unabhängigen Spannung und Frequenz arbeiten, was eine große Flexibilität erlaubt und zahlreiche Möglichkeiten für einen Ausgleich zwischen Energieverbrauch und Leistung schafft. In einigen Ausführungsformen ermöglicht die Verwendung mehrerer IVRs 308 das Gruppieren von Komponenten in separaten Energie-Ebenen, dergestalt, dass die Energie durch den IVR 308 geregelt und nur jenen Komponenten in der Gruppe zugeführt wird. Während der Energieverwaltung kann eine bestimmte Energie-Ebene eines IVR 308 ein- oder ausgeschaltet werden, wenn der Prozessor in einen bestimmten Niedrigenergiezustand versetzt wird, während eine andere Energie-Ebene eines anderen IVR 308 aktiv oder vollständig unter Strom bleibt.
-
Wir bleiben bei 3A. Es können zusätzliche Komponenten innerhalb des Prozessors vorhanden sein, einschließlich einer Eingabe-Ausgabe-Schnittstelle 313, einer anderen Schnittstelle 314 und einem integrierten Speicher-Controller 315. Wie zu sehen, kann jede dieser Komponenten durch einen anderen integrierten Spannungsregler 308x versorgt werden. In einer Ausführungsform kann die Schnittstelle 313 gemäß dem Intel® Quick Path Interconnect (QPI)-Protokoll arbeiten, die Punkt-zu-Punkt (PtP)-Links in einem Cache-cohärenten Protokoll bereitstellt, das mehrere Schichten enthält, einschließlich einer Bitübertragungsschicht, einer Link-Schicht und einer Protokollschicht. Die Schnittstelle 314 wiederum kann gemäß einer Peripheral Component Interconnect Express (PCIe™)-Spezifikation arbeiten, zum Beispiel der PCI Express™ Specification Base Specification Version 2.0 (veröffentlicht am 17. Januar 2007).
-
Des Weiteren ist ein Energie-Controller (PCU) 312 gezeigt, der Hardware, Software und/oder Firmware enthalten kann, um Energieverwaltungsoperationen mit Bezug auf den Prozessor 303 auszuführen. Wie zu sehen, übermittelt die PCU 312 Steuerungsinformationen an den externen Spannungsregler 316 über eine digitale Schnittstelle, um den externen Spannungsregler 316 zu veranlassen, eine zweckmäßige geregelte Spannung zu erzeugen. Die PCU 312 übermittelt außerdem Steuerungsinformationen an IVRs 308 über eine andere digitale Schnittstelle, um die generierte Betriebsspannung zu steuern (oder um zu veranlassen, dass eine entsprechende IVR 308 in einen Niedrigenergiemodus deaktiviert wird). In einigen Ausführungsformen kann zu den Steuerungsinformationen, die an die IVRs 308 übermittelt werden, ein Energiezustand eines entsprechenden Kerns 304 gehören.
-
In verschiedenen Ausführungsformen kann die PCU 312 eine Vielzahl verschiedener Energieverwaltungs-Logikeinheiten zum Ausführen einer Hardwarebasierten Energieverwaltung enthalten. Eine solche Energieverwaltung kann vollständig prozessorgesteuert sein (zum Beispiel durch verschiedene Prozessor-Hardware, die durch Arbeitslast und/oder -leistung, thermische oder andere Prozessorbedingungen ausgelöst werden kann), und/oder die Energieverwaltung kann in Reaktion auf externe Quellen ausgeführt werden (wie zum Beispiel eine Plattform oder Verwaltungsenergieverwaltungsquelle oder System-Software).
-
In einigen Ausführungsformen kann der Komprimierungsbeschleuniger 310 allgemein dem in den 1A-1B gezeigten Komprimierungsbeschleuniger 120 entsprechen. In einigen Ausführungsformen kann der Prozessor 303 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden. Obgleich im Interesse der besseren Übersichtlichkeit nicht gezeigt, versteht es sich, dass zusätzliche Komponenten innerhalb des Prozessors 303 vorhanden sein können, wie zum Beispiel Uncore-Logik, aber auch andere Komponenten, wie zum Beispiel interne Speicher, zum Beispiel eine oder mehrere Ebenen einer Cache-Speicher-Hierarchie und so weiter. Des Weiteren ist die Implementierung von 3A zwar mit einem externen Spannungsregler gezeigt, doch sind Ausführungsformen nicht darauf beschränkt.
-
Ausführungsformen können in Prozessoren für verschiedene Märkte implementiert werden, einschließlich Server-Prozessoren, Desktop-Prozessoren, mobile Prozessoren und so weiter. Wir wenden uns nun 3B zu, wo ein Blockschaubild eines Mehrdomänenprozessors 301 gemäß einer oder mehreren Ausführungsformen gezeigt ist. Wie in der Ausführungsform von 3B gezeigt, enthält der Prozessor 301 mehrere Domänen. Genauer gesagt, kann eine Kerndomäne 321 mehrere Kerne 3200-320n enthalten, eine Grafikdomäne 324 kann eine oder mehrere Grafik-Engines enthalten, und ein Systemagent-Domäne 330 kann ebenfalls vorhanden sein. In einigen Ausführungsformen kann die Systemagent-Domäne 330 auf einer von der Kerndomäne unabhängigen Frequenz ausgeführt werden und kann die ganze Zeit eingeschaltet bleiben, um Energiesteuerungsereignisse und Energieverwaltung zu handhaben, dergestalt, dass die Domänen 321 und 324 so gesteuert werden können, dass sie dynamisch in Hochenergie- und Niedrigenergiezustände eintreten bzw. diese verlassen. Jede der Domänen 321 und 324 kann mit unterschiedlichen Spannungen und/oder Energien arbeiten. Es ist zu beachten, dass zwar nur drei Domänen gezeigt sind, dass es sich aber versteht, dass der Geltungsbereich des vorliegenden Erfindung in dieser Hinsicht nicht beschränkt ist und dass in anderen Ausführungsformen zusätzliche Domänen vorhanden sein können. Zum Beispiel können mehrere Kerndomänen vorhanden sein, wobei jede Kerndomäne mindestens einen Kern enthält.
-
Im Allgemeinen kann jeder Kern 320 des Weiteren Low-Level-Cache-Speicher zusätzlich zu verschiedenen Ausführungseinheiten und zusätzliche Verarbeitungselemente enthalten. Die verschiedenen Kerne wiederum können miteinander und mit einem gemeinsam genutzten Cache-Speicher gekoppelt sein, der aus mehreren Einheiten eines Last-Level-Cache (LLC) 3220 - 322n gebildet wird. In verschiedenen Ausführungsformen kann der LLC 322 zwischen den Kernen und der Grafik-Engine sowie verschiedenen Medien-Verarbeitungsschaltungen gemeinsam genutzt werden. Wie zu sehen, koppelt auf diese Weise eine Ring-Interconnect-Verbindung 323 die Kerne miteinander und stellt eine Interconnect-Verbindung zwischen den Kernen 320, der Grafikdomäne 324 und der Systemagent-Domäne 330 bereit. In einer Ausführungsform kann die Interconnect-Verbindung 323 Teil der Kerndomäne 321 sein. Jedoch kann in anderen Ausführungsformen die Ring-Interconnect-Verbindung 323 ihre eigene Domäne sein.
-
Wie des Weiteren zu sehen, kann die Systemagent-Domäne 330 eine Anzeige-Controller 332 enthalten, der eine Steuerung einer, und eine Schnittstelle zu einer, zugeordneten Anzeige bereitstellen kann. Außerdem kann die Systemagent-Domäne 330 einen Energie-Controller 335 enthalten, um eine Energieverwaltung auszuführen.
-
Wie des Weiteren in 3B zu sehen, kann der Prozessor 301 außerdem einen integrierten Speicher-Controller (IMC) 342 enthalten, der eine Schnittstelle zu einem Systemspeicher bilden kann, wie zum Beispiel einem dynamischen Direktzugriffsspeicher (DRAM). Mehrere Schnittstellen 3400 - 340n können vorhanden sein, um eine Verbindung zwischen dem Prozessor und anderen Schaltungen zu ermöglichen. Zum Beispiel kann in einer Ausführungsform mindestens eine Direct Media Interface (DMI)-Schnittstelle bereitgestellt werden, wie auch eine oder mehrere PCIe™-Schnittstellen. Des Weiteren können zum Ermöglichen einer Kommunikation zwischen anderen Agenten, wie zum Beispiel zusätzlichen Prozessoren oder anderen Schaltungen, auch eine oder mehrere Schnittstellen gemäß einem Intel® Quick Path Interconnect (QPI)-Protokoll bereitgestellt werden. Obgleich die Ausführungsform von 3B auf dieser hohen Ebene gezeigt ist, versteht es sich, dass der Geltungsbereich der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt ist.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 3B nicht gezeigt, kann in einigen Ausführungsformen der Prozessor 301 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen der Prozessor 301 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurde.
-
Obgleich im Interesse der besseren Übersichtlichkeit nicht gezeigt, versteht es sich, dass zusätzliche Komponenten innerhalb des Prozessors 303 vorhanden sein können, wie zum Beispiel Uncore-Logik, aber auch andere Komponenten, wie zum Beispiel interne Speicher, zum Beispiel eine oder mehrere Ebenen einer Cache-Speicher-Hierarchie und so weiter. Des Weiteren ist in der Implementierung von 3A ein externer Spannungsregler gezeigt, doch sind Ausführungsformen nicht darauf beschränkt.
-
Wir wenden uns nun 3C zu, wo ein Blockschaubild eines Prozessors 302 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Wie in 3C gezeigt, kann der Prozessor 302 ein Mehrkernprozessor sein, der mehrere Kerne 370a - 370n enthält. In einer Ausführungsform kann jeder solcher Kern aus einer unabhängigen Energiedomäne bestehen und kann dafür konfiguriert sein, auf der Grundlage einer Arbeitslast in aktive Zustände und/oder Maximalleistungszustände einzutreten bzw. sie zu verlassen. Die verschiedenen Kerne können über eine Interconnect-Verbindung 375 mit einem Systemagent oder Uncore 380, der verschiedene Komponenten enthält, gekoppelt sein. Wie zu sehen, kann der Uncore 380 einen gemeinsam genutzten Cache 382 enthalten, der ein Last-Level-Cache sein kann. Außerdem kann der Uncore 380 einen integrierten Speicher-Controller 384 enthalten, um mit einem (in 3C nicht gezeigten) Systemspeicher zum Beispiel über einen Speicherbus zu kommunizieren. Der Uncore 380 enthält außerdem verschiedene Schnittstellen 386a-386n und einen Energie-Controller 388, der Logik zum Ausführen der im vorliegenden Text beschriebenen Energieverwaltungstechniken enthalten kann.
-
Außerdem kann durch die Schnittstellen 386a-386n eine Verbindung zu verschiedenen Chip-externen Komponenten hergestellt werden, wie zum Beispiel Peripheriegeräten, Massespeicher und so weiter. Obgleich in der Ausführungsform von 3C diese konkrete Implementierung gezeigt ist, ist der Geltungsbereich der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 3C nicht gezeigt, kann in einigen Ausführungsformen der Prozessor 302 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen der Prozessor 302 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
In 4 ist eine Ausführungsform eines Prozessors veranschaulicht, der mehrere Kerne enthält. Zu dem Prozessor 400 zählt jeder beliebige Prozessor oder jede beliebige Verarbeitungsvorrichtung, wie zum Beispiel ein Mikroprozessor, ein eingebetteter Prozessor, ein Digitalsignalprozessor (DSP), ein Netzwerkprozessor, ein handgehaltener Prozessor, ein Anwendungsprozessor, ein Koprozessor, ein System-on-Chip (SoC) oder eine sonstige Vorrichtung zum Ausführen von Code. Der Prozessor 400 enthält in einer Ausführungsform mindestens zwei Kerne: Kern 401 und Kern 402, die asymmetrische Kerne oder symmetrische Kerne (die veranschaulichte Ausführungsform) enthalten können. Jedoch kann der Prozessor 400 jede beliebige Anzahl von Verarbeitungselementen enthalten, die symmetrisch oder asymmetrisch sein können.
-
In einer Ausführungsform bezieht sich ein Verarbeitungselement auf Hardware oder Logik zum Unterstützen eines Software-Threads. Zu Beispielen von Hardware-Verarbeitungselementen gehören: eine Threadeinheit, ein Threadschlitz, ein Thread, eine Prozesseinheit, ein Kontext, eine Kontexteinheit, ein Logikprozessor, ein Hardware-Thread, ein Kern und/oder sonstige Elemente, die in der Lage sind, einen Zustand für einen Prozessor zu halten, wie zum Beispiel einen Ausführungszustand oder einen Architekturzustand. Oder anders ausgedrückt: Ein Verarbeitungselement bezieht sich in einer Ausführungsform auf jegliche Hardware, die unabhängig mit Code verknüpft werden kann, wie zum Beispiel einem Software-Thread, einem Betriebssystem, einer Anwendung oder sonstigem Code. Ein physischer Prozessor meint in der Regel einen integrierten Schaltkreis, der jede beliebige Anzahl weiterer Verarbeitungselemente enthalten kann, wie zum Beispiel Kerne oder Hardware-Threads.
-
Ein Kern bezieht sich oft auf Logik, die sich auf einem integrierten Schaltkreis befindet und in der Lage ist, einen unabhängigen Architekturzustand beizubehalten, wobei jeder unabhängig beibehaltene Architekturzustand mit mindestens einigen dedizierten Ausführungsressourcen verknüpft ist. Im Gegensatz zu Kernen bezieht sich ein Hardware-Thread in der Regel auf eine beliebige Logik, die sich auf einem integrierten Schaltkreis befindet, der in der Lage ist, einen unabhängigen Architekturzustand beizubehalten, wobei sich die unabhängig beibehaltenen Architekturzustände in den Zugriff auf Ausführungsressourcen teilen. Wie zu erkennen ist, verschwimmt die Grenze zwischen der Nomenklatur eines Hardware-Threads und eines Kerns, wenn bestimmte Ressourcen gemeinsam genutzt werden und andere für einen Architekturzustand dediziert sind. Dennoch werden ein Kern und ein Hardware-Thread oft durch ein Betriebssystem als individuelle Logikprozessoren betrachtet, wobei das Betriebssystem in der Lage ist, Operationen individuell auf jedem Logikprozessor zu disponieren.
-
Der physikalische Prozessor 400, wie in 4 veranschaulicht, enthält zwei Kerne: Kern 401 und Kern 402. Hier werden die Kerne 401 und 402 als symmetrische Kerne angesehen, d. h. Kerne mit gleichen Konfigurationen, gleichen Funktionseinheiten und/oder gleicher Logik. In einer anderen Ausführungsform enthält der Kern 401 einen Out-of-Order-Prozessorkern, während der Kern 402 einen In-Order-Prozessorkern enthält. Jedoch können die Kerne 401 und 402 auch individuell aus jeder Art von Kern ausgewählt werden, wie zum Beispiel einem nativen Kern, einem Software-verwalteten Kern, einem Kern, der dafür ausgelegt ist, eine native Instruktionssatzarchitektur (ISA) auszuführen, ein Kern, der dafür ausgelegt ist, eine übersetzte ISA auszuführen, ein co-designter Kern oder ein anderer bekannter Kern. Jedoch werden im weiteren Verlauf der Besprechung die im Kern 401 veranschaulichten Funktionseinheiten unten ausführlicher beschrieben, da die Einheiten im Kern 402 in einer ähnlichen Weise arbeiten.
-
Wie gezeigt, enthält der Kern 401 zwei Hardware-Threads 401a und 401b, die auch als Hardware-Threadschlitze 401a und 401b bezeichnet werden können. Darum betrachten Software-Entitäten, wie zum Beispiel ein Betriebssystem, in einer Ausführungsform den Prozessor 400 potenziell als vier separate Prozessoren, d. h. vier Logikprozessoren oder Verarbeitungselemente, die in der Lage sind, vier Software-Threads gleichzeitig auszuführen. Wie oben angedeutet, ist ein erster Thread mit Architekturzustandsregistern 401a verknüpft, ein zweiter Thread ist mit Architekturzustandsregistern 401b verknüpft, ein dritter Thread kann mit Architekturzustandsregistern 402a verknüpft sein, und ein vierter Thread kann mit Architekturzustandsregistern 402b verknüpft sein. Hier kann jedes von den Architekturzustandsregistern (401a, 401b, 402a und 402b) als Verarbeitungselemente, Threadschlitze oder Thread-Einheiten bezeichnet werden, wie oben beschrieben. Wie veranschaulicht, werden die Architekturzustandsregister 401a in Architekturzustandsregistern 401b repliziert, so dass einzelne Architekturzustände oder -kontexte für den Logikprozessor 401a und den Logikprozessor 401b gespeichert werden können. Im Kern 401 können andere kleinere Ressourcen, wie zum Beispiel Instruktionszeiger und Umbenennungslogik im Zuweisungs- und Umbenennungsblock 430, ebenfalls für Threads 401a und 401b repliziert werden. Einige Ressourcen, wie zum Beispiel Umordnungspuffer in der Umordnungs- und Beendigungseinheit 435, ILTB 420, Lade- und Speicherpuffer und Warteschlangen, können durch Partitionieren gemeinsam genutzten werden. Andere Ressourcen, wie zum Beispiel interne Allzweckregister, ein oder mehrere Seitentabellenbasisregister, Low-Level-Daten-Cache und Daten-TLB 415, eine oder mehrere Ausführungseinheiten 440 und Abschnitte einer Out-of-Order-Einheit 435, werden möglicherweise in vollem Umfang gemeinsam genutzt.
-
Der Prozessor 400 enthält oft andere Ressourcen, die in vollem Umfang gemeinsam genutzt werden können, durch Partitionieren gemeinsam genutzt werden können oder durch oder für Verarbeitungselemente dediziert sein können. In 4 ist eine Ausführungsform eines rein beispielhaften Prozessors mit veranschaulichenden Logikeinheiten oder Ressourcen eines Prozessors veranschaulicht. Es ist zu beachten, dass ein Prozessor beliebige dieser Funktionseinheiten enthalten oder nicht enthalten kann sowie beliebige andere bekannte Funktionseinheiten, Logik oder Firmware, die nicht gezeigt sind, enthalten kann. Wie veranschaulicht, enthält der Kern 401 einen vereinfachten, repräsentativen Out-of-Order-(OOO)-Prozessorkern. Aber in verschiedenen Ausführungsformen kann auch ein In-Order-Prozessor verwendet werden. Der OOO-Kern enthält einen Abzweigzielpuffer 420 zum Vorhersagen von Abzweigungen, die ausgeführt oder genommen werden sollen, und einen Instruktions-Übersetzungspuffer (I-TLB) 420 zum Speichern von Adressübersetzungseinträgen für Instruktionen.
-
Der Kern 401 enthält des Weiteren ein Decodiermodul 425, das mit einer Hol-Einheit 420 gekoppelt ist, um geholte Elemente zu decodieren. Die Hol-Logik enthält in einer Ausführungsform einzelne Sequenzierer, die mit Threadschlitzen 401a bzw. 401b verknüpft sind. Gewöhnlich ist der Kern 401 mit einer ersten ISA verknüpft, die Instruktionen definiert oder spezifiziert, die auf dem Prozessor 400 ausgeführt werden können. Oft enthalten Maschinencode-Instruktionen, die Teil der ersten ISA sind, einen Abschnitt der Instruktion (als ein Opcode bezeichnet), der auf eine auszuführende Instruktion oder Operation verweist oder sie spezifiziert. Eine Decodierlogik 425 enthält Schaltungen, die diese Instruktionen anhand ihrer Opcodes erkennen und die decodierten Instruktionen in der Pipeline zur Verarbeitung, wie durch die erste ISA definiert, weiterleiten. Zum Beispiel enthalten die Decodierer 425 in einer Ausführungsform Logik, die dafür ausgelegt oder vorgesehen ist, bestimmte Instruktionen, wie zum Beispiel Transaktionsinstruktionen, zu erkennen. Im Ergebnis der Erkennung durch den Decodierer 425 unternimmt die Architektur oder der Kern 401 spezielle, vorgegebene Aktionen, um Aufgaben auszuführen, die mit der entsprechenden Instruktion verknüpft sind. Es ist wichtig anzumerken, dass jegliche der im vorliegenden Text beschriebenen Aufgaben, Blöcke, Operationen und Verfahren in Reaktion auf eine einzelne oder mehrere Instruktionen ausgeführt werden können, von denen einige neue oder alte Instruktionen sein können.
-
In einem Beispiel enthält der Zuweisungs- und Umbenennungsblock 430 einen Zuweiser zum Reservieren von Ressourcen, wie zum Beispiel Registerdateien zum Speichern von Instruktionsverarbeitungsergebnissen. Jedoch sind die Threads 401a und 401b möglicherweise zu einer Out-of-Order-Ausführung befähigt, wobei der Zuweisungs- und Umbenennungsblock 430 auch andere Ressourcen reserviert, wie zum Beispiel Umordnungspuffer zum Verfolgen von Instruktionsergebnissen. Die Einheit 430 kann auch einen Registerumbenenner enthalten, um Programm- und Instruktionsverweisregister zu anderen Registern innerhalb des Prozessors 400 umzubenennen. Eine Umordnungs- und Beendigungseinheit 435 enthält Komponenten, wie zum Beispiel die oben angesprochenen Umordnungspuffer, Ladepuffer und Speicherpuffer, um eine Out-of-Order-Ausführung und spätere In-order-Beendigung von out-of-order (außerhalb der Reihenfolge) ausgeführten Instruktionen zu unterstützen.
-
Ein Disponierungs- und Ausführungseinheit(en)-Block 440 enthält in einer Ausführungsform eine Disponierungseinheit zum Disponieren von Instruktionen oder Operationen in Ausführungseinheiten. Zum Beispiel wird eine Gleitkomma-Instruktion an einem Port einer Ausführungseinheit disponiert, die eine verfügbare Gleitkomma-Ausführungseinheit hat. Registerdateien, die mit den Ausführungseinheiten verknüpfte sind, sind ebenfalls enthalten, um Informationen Instruktionsverarbeitungsergebnisse zu speichern. Beispielhafte Ausführungseinheiten enthalten eine Gleitkomma-Ausführungseinheit, eine Ganzzahl-Ausführungseinheit, eine Sprung-Ausführungseinheit, einen Lade-Ausführungseinheit, eine Speicher-Ausführungseinheit und andere bekannte Ausführungseinheiten.
-
Ein Lower-Level-Daten-Cache und ein Datenübersetzungspuffer (D-TLB) 450 sind mit einer oder mehreren Ausführungseinheiten 440 gekoppelt. Der Daten-Cache dient dem Speichern von unlängst verwendeten oder verarbeiteten Elementen, wie zum Beispiel Datenoperanden, die möglicherweise in Speicherkohärenzzuständen gehalten werden. Der D-TLB dient dem Speichern der neuesten Adresseübersetzungen von virtuell/linear zu physisch. Als ein konkretes Beispiel kann ein Prozessor eine Seitentabellenstruktur enthalten, um physischen Speicher in mehrere virtuelle Seiten aufzugliedern.
-
Hier nutzen die Kerne 401 und 402 einen gemeinsamen Zugriff auf Higher-Level- oder Further-out-Cache 410, der unlängst geholte Elemente zwischenzuspeichern hat. Es ist zu beachten, dass „Higher-Level“ oder „Further-out“ Cache-Ebenen meint, die von den Ausführungseinheiten aus höher werden oder sich weiter entfernen. In einer Ausführungsform ist der Higher-Level-Cache 410 ein Last-Level-Daten-Cache, d. h. der letzte Cache in der Speicherhierarchie im Prozessor 400, wie zum Beispiel ein Daten-Cache der zweiten oder dritten Ebene. Jedoch ist der Higher-Level-Cache 410 nicht darauf beschränkt, da er mit einem Instruktions-Cache verknüpft sein kann oder einen solchen enthält. Statt dessen kann auch ein Trace-Cache, eine Art von Instruktions-Cache, nach dem Decodierer 425 gekoppelt sein, um vor kurzem decodierte Traces zu speichern.
-
In der gezeigten Konfiguration enthält der Prozessor 400 auch ein Busschnittstellenmodul 405 und einen Energie-Controller 460, der eine Energieverwaltung gemäß einer Ausführungsform der vorliegenden Erfindung ausführen kann. In diesem Szenario dient die Busschnittstelle 405 dem Kommunizieren mit Vorrichtungen außerhalb des Prozessors 400, wie zum Beispiel einem Systemspeicher und anderen Komponenten.
-
Ein Speicher-Controller 470 kann mit anderen Vorrichtungen verbunden sein, wie zum Beispiel einem oder vielen Speichern. In einem Beispiel enthält die Busschnittstelle 405 eine Ring-Interconnect-Verbindung mit einem Speicher-Controller zum Verbinden mit einem Speicher und einem Grafik-Controller zum Verbinden mit einem Grafikprozessor. In einer SoC-Umgebung können noch mehr Vorrichtungen, wie zum Beispiel eine Netzwerkschnittstelle, Koprozessoren, Speicher, ein Grafikprozessor und sonstige bekannte Computervorrichtungen oder Schnittstellen auf einem einzelnen Die oder integrierten Schaltkreis integriert werden, um einen kleinen Formfaktor mit hoher Funktionalität und geringem Energieverbrauch zu realisieren.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 4 nicht gezeigt, kann in einigen Ausführungsformen der Prozessor 400 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurden. Des Weiteren kann in einigen Ausführungsformen der Prozessor 400 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Wir wenden uns nun 5 zu, wo ein Blockschaubild einer Mikroarchitektur eines Prozessorkerns gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Wie in 5 gezeigt, kann der Prozessorkern 500 einen Mehrstufen-Pipeline-Out-of-Order-Prozessor sein. Der Kern 500 kann mit verschiedenen Spannungen auf der Grundlage einer empfangenen Betriebsspannung arbeiten, die von einem integrierten Spannungsregler oder einem externen Spannungsregler empfangen werden kann.
-
Wie in 5 zu sehen, enthält der Kern 500 Frontend-Einheiten 510, die dafür verwendet werden können, auszuführende Instruktionen zu holen und sie zur späteren Verwendung in der Prozessorpipeline vorzubereiten. Zum Beispiel können die Frontend-Einheiten 510 eine Hol-Einheit 501, einen Instruktions-Cache 503 und einen Instruktions-Decodierer 505 enthalten. In einigen Implementierungen können die Frontend-Einheiten 510 des Weiteren einen Trace-Cache zusammen mit Mikrocode-Speicher sowie einen Mikrooperationsspeicher enthalten. Die Hol-Einheit 501 kann Makro-Instruktionen zum Beispiel aus einem Speicher oder Instruktions-Cache 503 holen und kann sie zu dem Instruktions-Decodierer 505 leiten, um sie zu Grundformen, d. h. Mikro-Operationen zur Ausführung durch den Prozessor, decodieren.
-
Zwischen den Frontend-Einheiten 510 und den Ausführungseinheiten 520 ist eine Out-of-Order-(OOO)-Engine 515 gekoppelt, die dafür verwendet werden kann, die Mikro-Instruktionen zu empfangen und sie zur Ausführung vorzubereiten. Genauer gesagt, kann die OOO-Engine 515 verschiedene Puffer enthalten, um den Mikro-Instruktionsfluss umzuordnen und verschiedene zur Ausführung benötigte Ressourcen zuzuweisen sowie eine Umbenennung von logischen Registern auf Speicherorte innerhalb verschiedener Registerdateien, wie zum Beispiel der Registerdatei 530 und der erweiterten Registerdatei 535, zu ermöglichen. Die Registerdatei 530 kann separate Registerdateien für ganzzahlige und Gleitkomma-Operationen enthalten. Die erweiterte Registerdatei 535 kann Speicher für vektorgroße Einheiten bereitstellen, zum Beispiel 256 oder 512 Bits pro Register.
-
Neben anderer spezialisierter Hardware können verschiedene Ressourcen in den Ausführungseinheiten 520 vorhanden sein, einschließlich beispielsweise verschiedener Ganzzahlen-, Gleitkomma- und Single Instruction Multiple Data (SIMD)-Logikeinheiten. Zum Beispiel können solche Ausführungseinheiten neben anderen solchen Ausführungseinheiten eine oder mehrere arithmetische Logikeinheiten (ALUs) 522 und eine oder mehrere Vektor-Ausführungseinheiten 524 enthalten.
-
Die Ergebnisse aus den Ausführungseinheiten können in eine Beendigungslogik, und zwar einen Umordnungspuffer (Reorder Buffer, ROB) 540, eingespeist werden. Genauer gesagt, kann der ROB 540 verschiedenen Anordnungen und Logik enthalten, um Informationen zu empfangen, die mit Instruktionen verknüpft sind, die ausgeführt werden. Diese Informationen werden dann durch den ROB 540 untersucht, um zu bestimmen, ob die Instruktionen legitim beendet und die Ergebnis-Daten an den Architekturzustand des Prozessors übergeben werden können oder ob eine oder mehrere Ausnahmen eingetreten sind, die eine ordnungsgemäße Beendigung der Instruktionen verhindern. Natürlich kann der ROB 540 auch andere mit der Beendigung verknüpfte Operationen handhaben.
-
Wie in 5 gezeigt, ist der ROB 540 mit einem Cache 550 gekoppelt, der in einer Ausführungsform ein Low-Level-Cache (zum Beispiel ein LI-Cache) sein kann, obgleich der Geltungsbereich der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt ist. Außerdem können die Ausführungseinheiten 520 direkt mit dem Cache 550 gekoppelt sein. Vom Cache 550 aus kann eine Datenkommunikation mit Higher-Level-Caches, Systemspeicher und so weiter stattfinden. Obgleich die Ausführungsform von 5 auf dieser hohen Ebene gezeigt ist, versteht es sich, dass der Geltungsbereich der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt ist. Zum Beispiel ist zwar die Implementierung von 5 im Hinblick auf eine Out-of-Order-Maschine, wie zum Beispiel eine Intel® x86-Instruktionssatzarchitektur (ISA), dargestellt, doch der Geltungsbereich der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt ist. Das heißt, andere Ausführungsformen können in einem In-Order-Prozessor, einem Reduced Instruction Set Computing (RISC)-Prozessor, wie zum Beispiel einem ARM-basierten Prozessor, oder einem Prozessor eines anderen ISA-Typs implementiert werden, der Instruktionen und Operationen einer anderen ISA über eine Emulations-Engine und zugehörige Logikschaltungen emulieren kann.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 5 nicht gezeigt, kann in einigen Ausführungsformen der Kern 500 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen der Kern 500 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Wir wenden uns nun 6 zu, wo ein Blockschaubild einer Mikroarchitektur eines Prozessorkerns gemäß einer anderen Ausführungsform gezeigt ist. In der Ausführungsform von 6 kann der Kern 600 ein Niedrigenergiekern einer anderen Mikroarchitektur sein, wie zum Beispiel ein Intel® Atom™-basierter Prozessor, der eine relativ begrenzte Pipeline-Tiefe aufweist, die darauf ausgelegt ist, den Energieverbrauch zu senken. Wie zu sehen, enthält der Kern 600 einen Instruktions-Cache 610, der dafür gekoppelt ist, Instruktionen an einen Instruktions-Decodierer 615 zu übermitteln. Ein Abzweigprädiktor 605 kann mit dem Instruktions-Cache 610 gekoppelt sein. Es ist zu beachten, dass der Instruktions-Cache 610 des Weiteren mit einem anderen Pegel eines Cache-Speichers gekoppelt sein kann, wie zum Beispiel einem L2-Cache (im Interesse einer besseren Übersichtlichkeit in 6 nicht gezeigt). Der Instruktions-Decodierer 615 wiederum übermittelt decodierte Instruktionen an eine Ausgabewarteschlange 620 zur Speicherung und Weitergabe an eine bestimmte Ausführungs-Pipeline. Ein Mikrocode-ROM 618 ist mit dem Instruktions-Decodierer 615 gekoppelt.
-
Eine Gleitkomma-Pipeline 630 enthält eine Gleitkommaregisterdatei 632, die mehrere Architekturregister einer bestimmten Bitbreite enthalten kann, wie zum Beispiel 128, 256 oder 512 Bits. Die Pipeline 630 enthält einen Gleitkomma-Disponierer 634 zum Disponieren von Instruktionen zur Ausführung in einer von mehreren Ausführungseinheiten der Pipeline. In der gezeigten Ausführungsform enthalten solche Ausführungseinheiten eine ALU 635, eine Shuffle-Einheit 636 und einen Gleitkomma-Addierer 638. Die in diesen Ausführungseinheiten generierten Ergebnisse wiederum können zu Puffern und/oder Registern der Registerdatei 632 zurückgesendet werden. Natürlich versteht es sich, dass zwar diese wenigen beispielhaften Ausführungseinheiten gezeigt sind, dass aber in einer anderen Ausführungsform noch weitere oder andere Gleitkomma-Ausführungseinheiten vorhanden sein können.
-
Es kann auch eine Ganzzahl-Pipeline 640 bereitgestellt werden. In der gezeigten Ausführungsform enthält die Pipeline 640 eine Ganzzahl-Registerdatei 642, die mehrere Architekturregister einer bestimmten Bitbreite enthalten kann, wie zum Beispiel 128 oder 256 Bits. Die Pipeline 640 enthält einen Ganzzahl-Disponierer 644 zum Disponieren von Instruktionen zur Ausführung in einer von mehreren Ausführungseinheiten der Pipeline. In der gezeigten Ausführungsform enthalten solche Ausführungseinheiten eine ALU 645, eine Schiebe-Einheit 646 und eine Sprung-Ausführungseinheit 648. Die in diesen Ausführungseinheiten generierten Ergebnisse wiederum können zu Puffern und/oder Registern der Registerdatei 642 zurückgesendet werden. Natürlich versteht es sich, dass zwar diese wenigen beispielhaften Ausführungseinheiten gezeigt sind, dass aber in einer anderen Ausführungsform noch weitere oder andere Ganzzahl-Ausführungseinheiten vorhanden sein können.
-
Ein Speicherausführungsdisponierer 650 kann Speicheroperationen zur Ausführung in einer Adressengenerierungseinheit 652, die auch mit einem TLB 654 gekoppelt ist, disponieren. Wie zu sehen, können diese Strukturen mit einem Daten-Cache 660 gekoppelt sein, der ein L0- und/oder LI-Daten-Cache sein kann, der wiederum mit zusätzlichen Ebenen einer Cache-Speicherhierarchie gekoppelt ist, einschließlich eines L2-Cache-Speichers.
-
Um eine Out-of-Order-Ausführung zu unterstützen, kann eine Zuweisungs-/Umbenennungsvorrichtung 670 bereitgestellt werden, und zwar zusätzlich zu einem Umordnungspuffer 680, der dafür konfiguriert ist, Instruktionen umzuordnen, die out-of-order für eine Beendigung in-order ausgeführt werden. Obgleich diese konkrete Pipeline-Architektur in der Illustration von 6 gezeigt ist, versteht es sich, dass viele Variationen und Alternativen möglich sind.
-
Es ist zu beachten, dass in einem Prozessor, der asymmetrische Kerne aufweist, wie zum Beispiel gemäß den Mikroarchitekturen der 5 und 6, Arbeitslasten aus Energieverwaltungsgründen dynamisch zwischen den Kernen getauscht werden können, da diese Kerne zwar unterschiedliche Pipeline-Designs und - Tiefen haben, aber von der gleichen oder einer verwandten ISA sein können. Ein solcher dynamischer Kerntausch kann in einer Weise ausgeführt werden, die für eine Nutzeranwendung (und eventuell auch den Kernel) transparent ist.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 6 nicht gezeigt, kann in einigen Ausführungsformen der Kern 600 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen der Kern 600 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
In 7 ist ein Blockschaubild einer Mikroarchitektur eines Prozessorkerns gemäß einer weiteren Ausführungsform gezeigt. Wie in 7 veranschaulicht, kann ein Kern 700 eine mehrstufige In-order-Pipeline enthalten, um bei sehr niedrigen Energieverbräuchen zu arbeiten. Als ein solches Beispiel kann der Prozessor 700 eine Mikroarchitektur gemäß einem ARM Cortex A53-Design von der Firma ARM Holdings, LTD., Sunnyvale, Kalifornien, haben. In einer Implementierung kann eine 8-stufige Pipeline bereitgestellt werden, die dafür konfiguriert ist, sowohl 32-Bit- als auch 64-Bit-Code auszuführen. Der Kern 700 enthält eine Hol-Einheit 710, die dafür konfiguriert ist, Instruktionen zu holen und sie in eine Decodiereinheit 715 einzuspeisen, die die Instruktionen, zum Beispiel Makro-Instruktionen einer bestimmten ISA, wie zum Beispiel einer ARMv8 ISA, decodieren kann. Es ist des Weiteren zu beachten, dass eine Warteschlange 730 mit der Decodiereinheit 715 gekoppelt werden kann, um decodierte Instruktionen zu speichern. Decodierte Instruktionen werden an eine Ausgabelogik 725 übermittelt, wo die decodierten Instruktionen an eine bestimmte von mehreren Ausführungseinheiten ausgegeben werden können.
-
Wir bleiben bei 7. Die Ausgabelogik 725 kann Instruktionen an eine von mehreren Ausführungseinheiten ausgeben. In der gezeigten Ausführungsform enthalten diese Ausführungseinheiten eine Ganzzahl-Einheit 735, eine Multipliziereinheit 740, eine Gleitkomma/Vektor-Einheit 750, eine Dualausgabeeinheit 760 und eine Lade-/Speicher-Einheit 770. Die Ergebnisse dieser verschiedenen Ausführungseinheiten können an eine Rückschreibe-Einheit 780 übermittelt werden. Es versteht sich, dass im Interesse einer besseren Übersichtlichkeit zwar eine einzelne Rückschreibe-Einheit gezeigt ist, dass aber in einigen Implementierungen auch separate Rückschreibe-Einheiten mit jeder der Ausführungseinheiten verknüpft sein können. Des Weiteren versteht es sich, dass zwar jede der in 7 gezeigten Einheiten und Logiken auf einer hohen Ebene dargestellt ist, dass aber eine konkrete Implementierung auch mehr oder andere Strukturen enthalten kann. Ein Prozessor, der unter Verwendung eines oder mehrerer Kerne konstruiert ist, die eine Pipeline wie in 7 aufweisen, kann in vielen verschiedenen Endprodukten implementiert werden, die von Mobilgeräten bis zu Server-Systemen reichen.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 7 nicht gezeigt, kann in einigen Ausführungsformen der Kern 700 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen der Kern 700 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Wir wenden uns nun 8 zu, wo ein Blockschaubild einer Mikroarchitektur eines Prozessorkerns gemäß einer weiteren Ausführungsform gezeigt ist. Wie in 8 veranschaulicht, kann ein Kern 800 eine mehrstufige Multi-Issue-Out-of-Order-Pipeline enthalten, um bei sehr hohen Leistungspegeln zu arbeiten (was bei höheren Energieverbräuchen stattfinden kann als beim Kern 700 von 7). Als ein solches Beispiel kann der Prozessor 800 eine Mikroarchitektur gemäß einem ARM Cortex A57-Design haben. In einer Implementierung kann eine 15 (oder mehr)-stufige Pipeline bereitgestellt werden, die dafür konfiguriert ist, sowohl 32-Bit- als auch 64-Bit-Code auszuführen. Außerdem kann die Pipeline eine Operation mit einer Breite von 3 (oder mehr) und 3 (oder mehr) Ausgaben bereitstellen. Der Kern 800 enthält eine Hol-Einheit 810, die dafür konfiguriert ist, Instruktionen zu holen und sie an einen Decodierer/Umbenenner/Versender 815 zu übermitteln, der die Instruktionen, zum Beispiel Makro-Instruktionen einer ARMv8-Instruktionssatzarchitektur, decodieren kann, Registerverweise innerhalb der Instruktionen umbenennen kann und die Instruktionen (schlussendlich) an eine ausgewählte Ausführungseinheit versenden kann. Decodierte Instruktionen können in einer Warteschlange 825 gespeichert werden. Es ist zu beachten, dass zwar im Interesse einer besseren Übersichtlichkeit in 8 eine einzelne Warteschlangenstruktur gezeigt ist, doch es versteht sich, dass auch separate Warteschlangen für jede der mehreren verschiedenen Arten von Ausführungseinheiten bereitgestellt werden können.
-
Des Weiteren ist in 8 eine Ausgabelogik 830 gezeigt, von der decodierte Instruktionen, die in der Warteschlange 825 gespeichert sind, an eine ausgewählte Ausführungseinheit ausgegeben werden können. Die Ausgabelogik 830 kann in einer konkreten Ausführungsform auch mit einer separaten Ausgabelogik für jede der mehreren verschiedenen Arten von Ausführungseinheiten, mit denen die Ausgabelogik 830 gekoppelt ist, implementiert werden.
-
Decodierte Instruktionen können an eine bestimmte von mehreren Ausführungseinheiten ausgegeben werden. In der gezeigten Ausführungsform enthalten diese Ausführungseinheiten eine oder mehrere Ganzzahl-Einheiten 835, eine Multipliziereinheit 840, eine Gleitkomma/Vektor-Einheit 850, eine Abzweigeinheit 860 und eine Lade-/Speicher-Einheit 870. In einer Ausführungsform kann die Gleitkomma/Vektor-Einheit 850 dafür konfiguriert sein, SIMD- oder Vektordaten von 128 oder 256 Bits zu handhaben. Des Weiteren kann die Gleitkomma/Vektor-Ausführungseinheit 850 Doppelpräzisions-Gleitkomma-Operationen nach IEEE-754 ausführen. Die Ergebnisse dieser verschiedenen Ausführungseinheiten können an eine Rückschreibe-Einheit 880 übermittelt werden. Es ist zu beachten, dass in einigen Implementierungen auch separate Rückschreibe-Einheiten mit jeder der Ausführungseinheiten verknüpft sein können. Des Weiteren versteht es sich, dass zwar jede der in 8 gezeigten Einheiten und Logiken auf einer hohen Ebene dargestellt ist, dass aber eine konkrete Implementierung auch mehr oder andere Strukturen enthalten kann.
-
Es ist zu beachten, dass in einem Prozessor, der asymmetrische Kerne aufweist, wie zum Beispiel gemäß den Mikroarchitekturen der 7 und 8, Arbeitslasten aus Energieverwaltungsgründen dynamisch zwischen den Kernen getauscht werden können, da diese Kerne zwar unterschiedliche Pipeline-Designs und - Tiefen haben, aber von der gleichen oder einer verwandten ISA sein können. Ein solcher dynamischer Kerntausch kann in einer Weise ausgeführt werden, die für eine Nutzeranwendung (und eventuell auch den Kernel) transparent ist.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 8 nicht gezeigt, kann in einigen Ausführungsformen der Kern 800 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen der Kern 800 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Ein Prozessor, der unter Verwendung eines oder mehrerer Kerne konstruiert ist, die Pipelines wie in einer oder mehreren der 5-8 aufweisen, kann in vielen verschiedenen Endprodukten implementiert werden, die von Mobilgeräten bis zu Server-Systemen reichen. Wir wenden uns nun 9 zu, wo ein Blockschaubild eines Prozessors gemäß einer anderen Ausführungsform der vorliegenden Erfindung gezeigt ist. In der Ausführungsform von 9 kann der Prozessor 900 ein SoC sein, der mehrere Domänen enthält, die jeweils so gesteuert werden können, dass sie mit einer unabhängigen Betriebsspannung und Betriebsfrequenz arbeiten. Als ein konkretes veranschaulichendes Beispiel kann der Prozessor 900 einen Intel® Architecture Core™basierter Prozessor sein, wie zum Beispiel ein i3, i5, i7 oder ein sonstiger derartiger Prozessor von der Intel Corporation. Jedoch können statt dessen in anderen Ausführungsformen auch andere Niedrigenergieprozessoren, wie zum Beispiel von der Firma Advanced Micro Devices, Inc., (AMD) aus Sunnyvale, Kalifornien, ein ARMbasierte Design von ARM Holdings, Ltd. oder eines Lizenznehmers davon, oder ein MIPS-basiertes Design von MIPS Technologies, Inc., aus Sunnyvale, Kalifornien, oder eines ihrer Lizenznehmer oder Anwender verwendet werden, wie zum Beispiel ein Apple A7-Prozessor, ein Qualcomm Snapdragon-Prozessor oder Texas Instruments OMAP-Prozessor. Ein solches SoC kann in einem Niedrigenergiesystem verwendet werden, wie zum Beispiel einem Smartphone, einem Tablet-Computer, einem Phablet-Computer, einem Ultrabook™-Computer oder einer anderen portablen Computervorrichtung.
-
In der in 9 gezeigten Ansicht auf einer hohen Ebene enthält der Prozessor 900 mehrere Kerneinheiten 9100-910n. Jede Kerneinheit kann einen oder mehrere Prozessorkerne, einen oder mehrere Cache-Speicher und andere Schaltungen enthalten. Jede Kerneinheit 910 kann einen oder mehrere Instruktionssätze (zum Beispiel einen x86-Instruktionssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden), einen MIPS-Instruktionssatz, einen ARM-Instruktionssatz (mit optionalen zusätzlichen Erweiterungen, wie zum Beispiel NEON)) oder einen anderen Instruktionssatz oder Kombinationen davon enthalten. Es ist zu beachten, dass einige der Kerneinheiten heterogene Ressourcen sein können (zum Beispiel von einem anderen Design). Außerdem kann jeder solcher Kern mit einem (nicht gezeigten) Cache-Speicher gekoppelt sein, der in einer Ausführungsform ein gemeinsam genutzter Level (L2) Cache-Speicher sein kann. Ein nicht-flüchtiger Speicher 930 kann zum Speichern verschiedener Programm- und anderer Daten verwendet werden. Zum Beispiel kann dieser Speicher zum Speichern von mindestens Abschnitten von Mikrocode, Boot-Informationen, wie zum Beispiel ein BIOS, anderer System-Software und so weiter verwendet werden.
-
Jede Kerneinheit 910 kann auch eine Schnittstelle, wie zum Beispiel eine Busschnittstelleneinheit, enthalten, um eine Zwischenverbindung zu zusätzlichen Schaltungen des Prozessors zu ermöglichen. In einer Ausführungsform ist jede Kerneinheit 910 mit einem kohärenten Fabric gekoppelt, das als eine primäre Cachekohärente On-Die-Interconnect-Verbindung fungieren kann, die wiederum mit einem Speicher-Controller 935 gekoppelt ist. Der Speicher-Controller 935 wiederum steuert die Kommunikation mit einem Speicher, wie zum Beispiel einem DRAM (im Interesse einer besseren Übersichtlichkeit in 9 nicht gezeigt).
-
Zusätzlich zu den Kerneinheiten befinden sich zusätzliche Verarbeitungs-Engines innerhalb des Prozessors, einschließlich mindestens einer Grafikeinheit 920, die eine oder mehrere Grafikverarbeitungseinheiten (GPUs) zum Ausführen einer Grafikverarbeitung sowie zum eventuellen Ausführen von Allzweck-Operationen in dem Grafikprozessor (sogenannte GPGPU-Operationen) enthalten kann. Außerdem kann mindestens ein Bildsignalprozessor 925 vorhanden sein. Der Signalprozessor 925 kann dafür konfiguriert sein, ankommende Bilddaten zu verarbeiten, die von einer oder mehreren Aufnahmevorrichtungen, entweder SoC-intern oder Chip-extern, empfangen werden.
-
Andere Beschleuniger können ebenfalls vorhanden sein. In der Illustration von 9 kann ein Video-Codierer 950 Codierungsoperationen ausführen, einschließlich Codierung und Decodierung für Video-Informationen, zum Beispiel die Bereitstellung von Unterstützung für Hardware-Beschleunigung für hochauflösende Video-Inhalte. Des Weiteren kann ein Anzeige-Controller 955 bereitgestellt werden, um Anzeige-Operationen zu beschleunigen, einschließlich der Bereitstellung von Unterstützung für interne und externe Anzeigen eines Systems. Außerdem kann ein Sicherheitsprozessor 945 vorhanden sein, um Sicherheitsoperationen auszuführen, wie zum Beispiel sichere Boot-Operationen, verschiedene Kryptografie-Operationen und so weiter.
-
Der Energieverbrauch einer jeden der Einheiten kann über einen Energiemanager 940 gesteuert werden, der Steuerungslogik enthalten kann, um die verschiedenen im vorliegenden Text beschriebenen Energieverwaltungstechniken auszuführen.
-
In einigen Ausführungsformen kann das SoC 900 des Weiteren ein nichtkohärentes Fabric enthalten, das mit dem kohärenten Fabric gekoppelt ist, mit dem verschiedene Peripherievorrichtungen gekoppelt sein können. Eine oder mehrere Schnittstellen 960a-960d ermöglichen eine Kommunikation mit einer oder mehreren Chip-externen Vorrichtungen. Eine solche Kommunikation kann gemäß einer Vielzahl verschiedener Kommunikationsprotokolle, wie zum Beispiel PCIe™, GPIO, USB, I2C, UART, MIPI, SDIO, DDR, SPI, HDMI, neben anderen Arten von Kommunikationsprotokollen erfolgen. Obgleich die Ausführungsform von 9 auf dieser hohen Ebene gezeigt ist, versteht es sich, dass der Geltungsbereich der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt ist.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 9 nicht gezeigt, kann in einigen Ausführungsformen das SoC 900 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen das SoC 900 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Wir wenden uns nun 10 zu, wo ein Blockschaubild eines repräsentativen SoC gezeigt ist. In der gezeigten Ausführungsform kann das SoC 1000 ein Mehrkern-SoC sein, das für einen Niedrigenergie-Betrieb konfiguriert ist, um für den Einbau in ein Smartphone oder eine andere Niedrigenergievorrichtung, wie zum Beispiel einen Tablet-Computer oder eine andere portable Computervorrichtung, optimiert zu werden. Als ein Beispiel kann das SoC 1000 unter Verwendung asymmetrischer oder anderer Arten von Kernen implementiert werden, wie zum Beispiel Kombinationen von Kernen mit höher Energie und/oder Niedrigenergie-Kernen, zum Beispiel Out-of-Order-Kernen und In-Order-Kernen. In verschiedenen Ausführungsformen können diese Kerne auf einem Intel® Architecture™-Kern-Design oder einem ARM-Architektur-Design basieren. In weiteren Ausführungsformen kann eine Mischung aus Intel- und ARM-Kernen in einem bestimmten SoC implementiert werden.
-
Wie in 10 zu sehen, enthält das SoC 1000 eine erste Kerndomäne 1010, die mehrere erste Kerne 10120 - 10123 aufweist. In einem Beispiel können diese Kerne Niedrigenergiekerne sein, wie zum Beispiel In-Order-Kerne. In einer Ausführungsform können diese ersten Kerne als ARM Cortex A53-Kerne implementiert werden. Diese Kerne wiederum werden mit einem Cache-Speicher 1015 der Kerndomäne 1010 gekoppelt. Außerdem enthält das SoC 1000 eine zweite Kerndomäne 1020. In der Illustration von 10 hat die zweite Kerndomäne 1020 mehrere zweite Kerne 10220 - 10223. In einem Beispiel können diese Kerne Kerne sein, die mehr Energie verbrauchen als die ersten Kerne 1012. In einer Ausführungsform können die zweiten Kerne Out-of-Order-Kerne sein, die als ARM Cortex A57-Kerne implementiert werden können. Diese Kerne wiederum werden mit einem Cache-Speicher 1025 der Kerndomäne 1020 gekoppelt. Es ist zu beachten, dass zwar das in 10 gezeigte Beispiel 4 Kerne in jeder Domäne enthält, doch es versteht sich, dass in einer bestimmten Domäne in anderen Beispielen auch mehr oder weniger Kerne vorhanden sein können.
-
Wir bleiben bei 10. Eine Grafikdomäne 1030 ist ebenfalls vorhanden, die eine oder mehrere Grafikverarbeitungseinheiten (GPUs) enthalten kann, die dafür konfiguriert sind, unabhängig Grafikarbeitslasten auszuführen, die zum Beispiel durch einen oder mehrere Kerne der Kerndomänen 1010 und 1020 bereitgestellt werden. Als ein Beispiel kann die GPU-Domäne 1030 dafür verwendet werden, eine Anzeige-Unterstützung für eine Vielzahl verschiedener Bildschirmgrößen zusätzlich zur Bereitstellung von Grafik- und Anzeige-Rendering-Operationen bereitzustellen.
-
Wie zu sehen, werden die verschiedenen Domänen mit einer kohärenten Interconnect-Verbindung 1040 gekoppelt, die in einer Ausführungsform ein Cachekohärentes Interconnect-Fabric sein kann, das wiederum mit einem integrierten Speicher-Controller 1050 gekoppelt ist. Die kohärente Interconnect-Verbindung 1040 kann einen gemeinsam genutzten Cache-Speicher enthalten, in einigen Beispielen einen L3-Cache. In einer Ausführungsform kann der Speicher-Controller 1050 ein direkter Speicher-Controller sein, um mehrere Kommunikationskanäle mit einem Chip-externen Speicher bereitzustellen, wie zum Beispiel mehrere Kanäle eines DRAM (im Interesse einer besseren Übersichtlichkeit in 10 nicht gezeigt).
-
In verschiedenen Beispielen kann die Anzahl der Kerndomänen variieren. Zum Beispiel kann für ein Niedrigenergie-SoC, das für den Einbau in eine mobile Computervorrichtung geeignet ist, eine beschränkte Anzahl von Kerndomänen, wie zum Beispiel in 10 gezeigt, vorhanden sein. Des Weiteren kann bei solchen Niedrigenergie-SoCs die Kerndomäne 1020, die Kerne mit höherem Energieverbrauch enthält, eine geringere Anzahl solcher Kerne haben. Zum Beispiel können in einer Implementierung zwei Kerne 1022 bereitgestellt werden, um einen Betrieb mit reduzierten Energieverbräuchen zu ermöglichen. Außerdem können die verschiedenen Kerndomänen auch mit einem Interrupt-Controller gekoppelt sein, um ein dynamisches Tauschen von Arbeitslasten zwischen den verschiedenen Domänen zu ermöglichen.
-
In weiteren Ausführungsformen kann eine größere Anzahl von Kerndomänen sowie zusätzliche optionale IP-Logik vorhanden sein, damit ein SoC auf höhere Leistungs (und Energie)-Pegel skaliert werden kann, um in andere Computervorrichtungen wie zum Beispiel Desktops, Server, Hochleistungscomputersysteme, Basisstationen und so weiter eingebaut zu werden. Als ein solches Beispiel können 4 Kerndomänen bereitgestellt werden, die jeweils eine gegebene Anzahl von Out-of-Order-Kernen haben. Des Weiteren können zusätzlich zu einer optionalen GPU-Unterstützung (die als ein Beispiel die Form einer GPGPU annehmen kann) ein oder mehrere Beschleuniger bereitgestellt werden, die eine optimierte Hardware-Unterstützung für bestimmte Funktionen (zum Beispiel Web-Serving, Netzwerkverarbeitung, Switching und so weiter) bieten. Außerdem kann eine Eingabe-Ausgabe-Schnittstelle vorhanden sein, um solchen Beschleuniger mit Chip-externen Komponenten zu koppeln.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 10 nicht gezeigt, kann in einigen Ausführungsformen das SoC 1000 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen das SoC 1000 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Wir wenden uns nun 11 zu, wo ein Blockschaubild eines anderen beispielhaften SoC gezeigt ist. In der Ausführungsform von 11 kann das SoC 1100 verschiedene Schaltungen enthalten, um eine hohe Leistung für Multimedia-Anwendungen, Kommunikation und andere Funktionen zu ermöglichen. Insofern ist das SoC 1100 für den Einbau in eine breite Vielzahl verschiedener portabler und anderer Vorrichtungen geeignet, wie zum Beispiel Smartphones, Tablet-Computer, Smart-TVs und so weiter. In dem gezeigten Beispiel enthält das SoC 1100 eine Zentrale-Prozessoreinheit (CPU)-Domäne 1110. In einer Ausführungsform können mehrere einzelne Prozessorkerne in der CPU-Domäne 1110 vorhanden sein. Als ein Beispiel kann die CPU-Domäne 1110 ein Quad-Kern-Prozessor sein, der 4 Multithread-Kerne aufweist. Solche Prozessoren können homogene oder heterogene Prozessoren sein, zum Beispiel eine Mischung aus Niedrigenergie- und Hochenergie-Prozessorkernen.
-
Die GPU-Domäne 1120 wiederum ist dafür ausgelegt, eine höhere Grafikverarbeitung in einer oder mehreren GPUs auszuführen, um Grafik zu handhaben und APIs zu berechnen. Eine DSP-Einheit 1130 kann einen oder mehrere Niedrigenergie-DSPs zur Handhabung von Niedrigenergie-Multimedia-Anwendungen bereitstellen, wie zum Beispiel Musikwiedergabe, Audio/Video und so weiter, neben höheren Berechnungen, die während der Ausführung von Multimedia-Instruktionen stattfinden können. Eine Kommunikationseinheit 1140 wiederum kann verschiedene Komponenten enthalten, die eine Konnektivität über verschiedene Drahtlosprotokolle bereitstellen, wie zum Beispiel Mobilfunkkommunikation (einschließlich 3G/4G LTE), drahtlose Nahbereichstechniken wie zum Beispiel Bluetooth™, IEEE 802.11 und so weiter.
-
Des Weiteren kann ein Multimedia-Prozessor 1150 verwendet werden, um Aufnahme und Wiedergabe hochauflösender Video- und Audio-Inhalte auszuführen, einschließlich der Verarbeitung von Nutzergesten. Eine Sensoreinheit 1160 kann mehrere Sensoren und/oder einen Sensor-Controller zum Verbinden mit verschiedenen Chip-externen Sensoren enthalten, die in einer bestimmten Plattform vorhanden sind. Ein Bildsignalprozessor 1170 kann mit einem oder mehreren separaten ISPs versehen sein, um eine Bildverarbeitung im Hinblick auf aufgenommene Inhalte von einer oder mehreren Kameras einer Plattform, einschließlich Foto- und Videokameras, auszuführen.
-
Ein Anzeige-Prozessor 1180 kann Unterstützung für eine Verbindung mit einer hochauflösenden Anzeige einer bestimmten Pixeldichte bereitstellen, einschließlich der Fähigkeit zur drahtlosen Übermittlung von Inhalten für eine Wiedergabe auf einer solchen Anzeige. Des Weiteren kann eine Standort-Einheit 1190 einen GPS-Empfänger mit Unterstützung für mehrere GPS-Konstellationen enthalten, um Anwendungen mit hochpräzisen Positionsbestimmungsinformationen zu versorgen, die beispielsweise mittels eines GPS-Empfängers erhalten werden. Es versteht sich, dass das Beispiel von 11 zwar mit diesem speziellen Satz Komponenten gezeigt ist, dass aber viele Variationen und Alternativen möglich sind.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 11 nicht gezeigt, kann in einigen Ausführungsformen das SoC 1100 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen das SoC 1100 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Wir wenden uns nun 12 zu, wo ein Blockschaubild eines beispielhaften Systems gezeigt ist, mit dem Ausführungsformen verwendet werden können. Wie zu sehen, kann das System 1200 ein Smartphone oder ein sonstiger Drahtlos-Kommunikator sein. Ein Basisbandprozessor 1205 ist dafür konfiguriert, verschiedene Signalverarbeitungen mit Bezug auf Kommunikationssignale auszuführen, die von dem System zu senden sind oder durch das System empfangen werden sollen. Der Basisbandprozessor 1205 wiederum ist mit einem Anwendungsprozessor 1210 gekoppelt, der eine Haupt-CPU des Systems sein kann, um ein BS und andere System-Software neben Nutzeranwendungen, wie zum Beispiel vielen allgemein bekannten Social-Media- und Multimedia-Apps, auszuführen. Der Anwendungsprozessor 1210 kann des Weiteren dafür konfiguriert sein, eine Vielzahl verschiedener anderer Berechnungsoperationen für die Vorrichtung auszuführen.
-
Der Anwendungsprozessor 1210 wiederum kann mit einer Benutzerschnittstelle/Anzeige 1220, zum Beispiel einer Berührungsbildschirmanzeige, gekoppelt sein. Außerdem kann der Anwendungsprozessor 1210 mit einem Speichersystem gekoppelt sein, einschließlich eines nicht-flüchtigen Speichers, und zwar eines Flash-Speichers 1230, und eines Systemspeichers, und zwar eines dynamischen Direktzugriffsspeichers (DRAM) 1235. Wie des Weiteren zu sehen, ist der Anwendungsprozessor 1210 des Weiteren mit einer Aufnahmevorrichtung 208 gekoppelt, wie zum Beispiel einer oder mehreren Bildaufnahmevorrichtungen, die Video- und/oder Standbilder aufzeichnen können.
-
Wir bleiben bei 12. Eine Universal Integrated Circuit Card (UICC) 208, die ein Subscriber-Identity-Modul und eventuell einen sicheren Speicher und einen Kryptoprozessor umfasst, ist ebenfalls mit dem Anwendungsprozessor 1210 gekoppelt. Das System 1200 kann des Weiteren einen Sicherheitsprozessor 1250 enthalten, der mit dem Anwendungsprozessor 1210 gekoppelt ist. Mehrere Sensoren 1225 sind mit dem Anwendungsprozessor 1210 gekoppelt, um die Eingabe einer Vielzahl verschiedener abgefühlter Informationen zu ermöglichen, wie zum Beispiel Beschleunigungsmesser- und andere Umgebungsinformationen. Eine Audioausgabe-Vorrichtung 1295 kann eine Schnittstelle zum Ausgeben von Ton bereitstellen, zum Beispiel in Form von Sprachkommunikation, wiedergegebenen oder gestreamten Audio-Daten und so weiter.
-
Wie des Weiteren veranschaulicht, wird eine kontaktloses Near Field Communication (NFC)-Schnittstelle 1260 bereitgestellt, die in einem NFC-Nahbereichsfeld über eine NFC-Antenne 1265 kommuniziert. Obgleich in 12 separate Antennen gezeigt sind, versteht es sich, dass in einigen Implementierungen eine einzige Antenne oder ein anderer Satz von Antennen bereitgestellt werden kann, um verschiedene Drahtlosfunktionen zu ermöglichen.
-
Ein integrierter Energieverwaltungsschaltkreis (PMIC) 1215 ist mit dem Anwendungsprozessor 1210 gekoppelt, um eine Energieverwaltung auf Plattformebene auszuführen. Zu diesem Zweck kann der PMIC 1215 Energieverwaltungsanforderungen an den Anwendungsprozessor 1210 ausgeben, um nach Bedarf in bestimmte Niedrigenergiezustände einzutreten. Des Weiteren kann der PMIC 1215 auf der Grundlage von Plattformbedingungen auch das Energieniveau anderer Komponenten des Systems 1200 steuern.
-
Um es zu ermöglichen, dass Kommunikation gesendet und empfangen werden kann, können verschiedene Schaltungen zwischen dem Basisbandprozessor 1205 und einer Antenne 1290 gekoppelt sein. Genauer gesagt, können ein Hochfrequenz (HF)-Transceiver 1270 und ein Wireless Local Area Network (WLAN)-Transceiver 1275 vorhanden sein. Im Allgemeinen kann der HF-Transceiver 1270 dafür verwendet werden, drahtlose Daten und Rufe gemäß einem bestimmten Drahtloskommunikationsprotokoll zu empfangen und zu senden, wie zum Beispiel einem 3G- oder 4G-Drahtloskommunikationsprotokoll, wie zum Beispiel gemäß einem Code Division Multiple Access (CDMA)-, Global System for Mobile Communication (GSM)-, Long Term Evolution (LTE)- oder sonstigen Protokoll. Zusätzlich kann ein GPS-Sensor 1280 vorhanden sein. Es kann auch eine andere Drahtloskommunikation bereitgestellt werden, wie zum Beispiel das Empfangen oder Senden von Funksignalen, zum Beispiel AM/FM und anderer Signale. Außerdem kann über den WLAN-Transceiver 1275 eine lokale Drahtloskommunikation, wie zum Beispiel gemäß einem Bluetooth™-Standard oder einem IEEE 802.11-Standard, wie zum Beispiel IEEE 802.11a/b/g/n, realisiert werden.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 12 nicht gezeigt, kann in einigen Ausführungsformen das System 1200 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen das System 1200 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Wir wenden uns nun 13 zu, wo ein Blockschaubild eines anderen beispielhaften Systems gezeigt ist, das mit den Ausführungsformen verwendet werden kann. In der Illustration von 13 kann das System 1300 ein mobiles Niedrigenergiesystem sein, wie zum Beispiel ein Tablet-Computer, ein 2:1-Tablet, ein Phablet oder ein anderes konvertierbares oder selbstständiges Tablet-System. Wie veranschaulicht, ist ein SoC 1310 vorhanden und kann dafür konfiguriert sein, als ein Anwendungsprozessor für die Vorrichtung zu arbeiten.
-
Eine Vielzahl verschiedener Vorrichtungen kann mit dem SoC 1310 gekoppelt werden. In der gezeigten Illustration enthält ein Speicherteilsystem einen Flash-Speicher 1340 und einen DRAM 1345, die mit dem SoC 1310 gekoppelt sind. Außerdem ist ein Berührungsfeld 1320 mit dem SoC 1310 gekoppelt, um eine Anzeigefähigkeit und Nutzereingaben per Berührung bereitzustellen, einschließlich der Bereitstellung einer virtuellen Tastatur auf einer Anzeige des Berührungsfeldes 1320. Um eine leitungsgebundene Netzwerkkonnektivität bereitzustellen, ist das SoC 1310 mit einer Ethernet-Schnittstelle 1330 gekoppelt. Ein Peripherie-Hub 1325 ist mit dem SoC 1310 gekoppelt, um eine Verbindung mit verschiedenen Peripherievorrichtungen zu ermöglichen, die mit dem System 1300 über einen von verschiedenen Ports oder anderen Verbindern gekoppelt sein können.
-
Zusätzlich zu internen Energieverwaltungsschaltungen und -funktionen innerhalb des SoC 1310 ist ein PMIC 1380 mit dem SoC 1310 gekoppelt, um eine Plattform-basierte Energieverwaltung bereitstellen, zum Beispiel auf der Grundlage, ob das System durch eine Batterie 1390 oder durch Wechselstrom über ein Netzteil 1395 versorgt wird. Zusätzlich zu dieser energiequellenbasierten Energieverwaltung kann der PMIC 1380 des Weiteren Plattform-Energieverwaltungsaktivitäten auf der Grundlage von Umgebungs- und Nutzungsbedingungen ausführen. Des Weiteren kann der PMIC 1380 Steuerungs- und Statusinformationen zu dem SoC 1310 übermitteln, um verschiedene Energieverwaltungsaktionen innerhalb des SoC 1310 auszulösen.
-
Wir bleiben bei 13. Um Drahtlosfähigkeiten bereitzustellen, ist eine WLAN-Einheit 1350 mit dem SoC 1310 und wiederum mit einer Antenne 1355 gekoppelt. In verschiedenen Implementierungen kann die WLAN-Einheit 1350 eine Kommunikation gemäß einem oder mehreren Drahtlosprotokollen ermöglichen, einschließlich eines IEEE 802.11-Protokolls, eines Bluetooth™-Protokolls oder irgend eines sonstigen Drahtlosprotokolls.
-
Wie des Weiteren veranschaulicht, können mehrere Sensoren 1360 mit dem SoC 1310 gekoppelt sein. Zu diesen Sensoren können verschiedene Beschleunigungsmesser, Umgebungs- und andere Sensoren gehören, einschließlich Nutzergesten-Sensoren. Und schließlich ist ein Audio-Codec 1365 mit dem SoC 1310 gekoppelt, um eine Schnittstelle zu einer Audioausgabevorrichtung 1370 bereitstellen. Natürlich versteht es sich, dass in 13 zwar diese konkrete Implementierung gezeigt ist, dass aber viele Variationen und Alternativen möglich sind.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 13 nicht gezeigt, kann in einigen Ausführungsformen das System 1300 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen das System 1300 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Wir wenden uns nun 14 zu, einem Blockschaubild eines repräsentativen Computersystems 1400, wie zum Beispiel Notebook, Ultrabook™ oder ein anderes System mit kleinem Formfaktor. Ein Prozessor 1410 enthält in einer Ausführungsform einen Mikroprozessor, einen Mehrkernprozessor, einen Multithread-Prozessor, einen Ultraniederspannungsprozessor, einen eingebetteten Prozessor oder ein sonstiges bekanntes Verarbeitungselement. In der veranschaulichten Implementierung fungiert der Prozessor 1410 als eine Hauptverarbeitungseinheit und zentraler Hub zur Kommunikation mit vielen der verschiedenen Komponenten des Systems 1400. Als ein Beispiel ist der Prozessor 1410 als ein SoC implementiert.
-
Der Prozessor 1410 kommuniziert in einer Ausführungsform mit einem Systemspeicher 1415. Als ein veranschaulichendes Beispiel ist der Systemspeicher 1415 über mehrere Speichervorrichtungen oder -module implementiert, um eine bestimmte Menge an Systemspeicher bereitzustellen.
-
Um die dauerhafte Speicherung von Informationen zu ermöglichen, wie zum Beispiel Daten, Anwendungen, ein oder mehrere Betriebssysteme und so weiter, kann auch ein Massenspeicher 1420 mit dem Prozessor 1410 gekoppelt sein. Um ein dünneres und leichteres Systemdesign zu ermöglichen sowie das Ansprechverhalten des Systems zu verbessern, kann dieser Massenspeicher in verschiedenen Ausführungsformen über eine SSD implementiert werden, oder der Massenspeicher kann überwiegend unter Verwendung eines Festplattenlaufwerks (HDD) mit einem kleineren Betrag von SSD-Speicher implementiert werden, um als ein SSD-Cache zu fungieren, um eine nicht-flüchtige Speicherung eines Kontextzustands und sonstiger derartiger Informationen während eines Abschaltereignisses zu ermöglichen, so dass ein schnelles Einschalten bei Re-Initiierung von Systemaktivitäten stattfinden kann. Wie ebenfalls in 14 gezeigt, kann eine Flash-Vorrichtung 1422 mit dem Prozessor 1410 zum Beispiel über eine serielle Peripherieschnittstelle (SPI) gekoppelt sein. Diese Flash-Vorrichtung kann eine nicht-flüchtige Speicherung von System-Software bereitstellen, einschließlich Basic Input/Output-Software (BIOS) sowie andere Firmware des Systems.
-
Verschiedene Eingabe/Ausgabe (E/A)-Vorrichtungen können innerhalb des Systems 1400 vorhanden sein. In der Ausführungsform von 14 ist speziell eine Anzeige 1424 gezeigt, die ein hoch-auflösendes LCD- oder LED-Feld sein kann, das des Weiteren einen Berührungsbildschirm 1425 bereitstellt. In einer Ausführungsform kann die Anzeige 1424 mit dem Prozessor 1410 über eine Anzeige-Interconnect-Verbindung gekoppelt sein, die als eine Hochleistungsgrafik-Interconnect-Verbindung implementiert sein kann. Der Berührungsbildschirm 1425 kann mit dem Prozessor 1410 über eine andere Interconnect-Verbindung gekoppelt sein, die in einer Ausführungsform eine I2C-Interconnect-Verbindung sein kann. Wie des Weiteren in 14 gezeigt, kann zusätzlich zu dem Berührungsbildschirm 1425 eine Nutzereingabe über Berührung auch über ein Touchpad 1430 stattfinden, das innerhalb des Chassis konfiguriert sein kann und auch mit derselben I2C-Interconnect-Verbindung gekoppelt sein kann wie der Berührungsbildschirm 1425.
-
Für Wahrnehmungsberechnung und andere Zwecke können verschiedene Sensoren innerhalb des Systems vorhanden sein und können mit dem Prozessor 1410 in verschiedener Weise gekoppelt sein. Bestimmte Trägheits- und Umgebungssensoren können mit dem Prozessor 1410 durch einen Sensor-Hub 1440 zum Beispiel über eine I2C-Interconnect-Verbindung gekoppelt sein. In der in 14 gezeigten Ausführungsform können diese Sensoren einen Beschleunigungsmesser 1441, einen Umgebungslichtsensor (ALS) 1442, einen Kompass 1443 und ein Gyroskop 1444 enthalten. Andere Umgebungssensoren können einen oder mehrere Wärmesensoren 1446 enthalten, die in einigen Ausführungsformen mit dem Prozessor 1410 über einen Systemverwaltungsbus (SMBus) gekoppelt sein können.
-
Wie ebenfalls in 14 zu sehen, können verschiedene Peripherievorrichtungen mit dem Prozessor 1410 über eine Low Pin Count (LPC)-Interconnect-Verbindung gekoppelt sein. In der gezeigten Ausführungsform können verschiedene Komponenten durch einen eingebetteten Controller 1435 gekoppelt sein. Zu solchen Komponenten können eine Tastatur 1436 (die zum Beispiel über eine PS2-Schnittstelle gekoppelt ist), ein Lüfter 1437 und ein Wärmesensor 1439 gehören. In einigen Ausführungsformen kann ein Touchpad 1430 auch mit dem EC 1435 über eine PS2-Schnittstelle gekoppelt sein. Außerdem kann auch ein Sicherheitsprozessor, wie zum Beispiel ein Trusted-Platform-Modul (TPM) 1438 gemäß der Trusted Computing Group (TCG) TPM-Spezifikation Version 1.2 vom 2. Oktober 2003 mit dem Prozessor 1410 über diese LPC-Interconnect-Verbindung gekoppelt sein.
-
Das System 1400 kann auf verschiedene Weise mit externen Vorrichtungen kommunizieren, einschließlich drahtlos. In der in 14 gezeigten Ausführungsform sind verschiedene Drahtlos-Module vorhanden, die jeweils einer Funkvorrichtung entsprechen, die für ein bestimmtes Drahtloskommunikationsprotokoll konfiguriert ist. Eine Form der Drahtloskommunikation im Nahbereich, wie zum Beispiel ein Nahbereichsfeld, kann über eine NFC-Einheit 1445 stattfinden, die in einer Ausführungsform mit dem Prozessor 1410 über einen SMBus kommunizieren kann. Es ist zu beachten, dass über diese NFC-Einheit 1445 Vorrichtungen in unmittelbarer Nähe zueinander kommunizieren können.
-
Wie des Weiteren in 14 zu sehen, können zu weiteren Drahtloseinheiten noch anderen Kurzstrecken-Drahtlos-Engines gehören, einschließlich einer WLAN-Einheit 1450 und einer Bluetooth-Einheit 1452. Unter Verwendung einer WLAN-Einheit 1450 kann eine Wi-Fi™-Kommunikation gemäß einem bestimmten IEEE 802.11-Standard realisiert werden, während über eine Bluetooth-Einheit 1452 eine Kurzstreckenkommunikation über ein Bluetooth-Protokoll stattfinden kann. Diese Einheiten können mit dem Prozessor 1410 zum Beispiel über einen USB-Link oder einen Universal Asynchronous Receiver Transmitter (UART)-Link kommunizieren, oder diese Einheiten können mit dem Prozessor 1410 über eine Interconnect-Verbindung gemäß einem PCIe™-Protokoll oder einem anderen derartigen Protokoll, wie zum Beispiel einem Serial Data Input/Output (SDIO)-Standard, gekoppelt sein.
-
Außerdem kann eine drahtlose Fernbereichskommunikation, zum Beispiel gemäß einem Mobilfunk- oder sonstigem Drahtlos-Fernbereichsprotokoll, über eine WWAN-Einheit 1456 stattfinden, die wiederum mit einem Subscriber-Identity-Modul (SIM) 1457 gekoppelt sein kann. Außerdem kann, um das Empfangen und Verwenden von Standortinformationen zu ermöglichen, auch ein GPS-Modul 1455 vorhanden sein. Es ist zu beachten, dass in der in 14 gezeigten Ausführungsform eine WWAN-Einheit 1456 und eine integrierte Aufnahmevorrichtung, wie zum Beispiel ein Kameramodul 1454, über ein bestimmtes USB-Protokoll kommunizieren können, wie zum Beispiel einen USB 2.0- oder 3.0-Link oder ein UART- oder I2C-Protokoll.
-
Ein integriertes Kameramodul 1454 kann in den Deckel integriert werden. Um Audio-Eingaben und -Ausgaben zu ermöglichen, kann ein Audio-Prozessor über einen Digitalsignalprozessor (DSP) 1460 implementiert werden, der mit dem Prozessor 1410 über einen hochauflösenden Audio (HDA)-Link gekoppelt sein kann. In ähnlicher Weise kann der DSP 1460 mit einem integrierten Codierer/Decodierer (CODEC) und Verstärker 1462 kommunizieren, der wiederum mit Ausgabelautsprechern 1463 gekoppelt sein kann, die innerhalb des Chassis implementiert werden können. In ähnlicher Weise können Verstärker und CODEC 1462 gekoppelt sein, um Audio-Eingaben von einem Mikrofon 1465 zu empfangen, das in einer Ausführungsform über Dual-Array-Mikrofone (wie zum Beispiel eine digitale Mikrofonanordnung) implementiert werden kann, um hochwertige Audio-Eingaben bereitzustellen, um eine sprachaktivierte Steuerung verschiedener Operationen innerhalb des Systems zu ermöglichen. Es ist außerdem zu beachten, dass Audio-Ausgaben von dem Verstärker/CODEC 1462 an eine Kopfhörerbuchse 1464 bereitgestellt werden können. Obgleich in der Ausführungsform von 14 diese speziellen Komponenten gezeigt sind, versteht es sich, dass der Geltungsbereich der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt ist.
-
Obgleich im Interesse der besseren Übersichtlichkeit in 14 nicht gezeigt, kann in einigen Ausführungsformen das System 1400 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen das System 1400 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Ausführungsformen können in vielen verschiedenen Systemarten implementiert werden. Wir wenden uns nun 15 zu, wo ein Blockschaubild eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Wie in 15 gezeigt, ist das Mehrprozessorsystem 1500 ein Punkt-zu-Punkt-Interconnect-System und enthält einen ersten Prozessor 1570 und einen zweiten Prozessor 1580, die über eine Punkt-zu-Punkt-Interconnect-Verbindung 1550 gekoppelt sind. Wie in 15 gezeigt, kann jeder der Prozessoren 1570 und 1580 ein Mehrkernprozessor sein, der einen ersten und einen zweiten Prozessorkern enthält (d. h. Prozessorkerne 1574a und 1574b und Prozessorkerne 1584a und 1584b), obgleich in den Prozessoren möglicherweise auch viel mehr Kerne vorhanden sein können. Jeder der Prozessoren kann eine PCU oder eine andere Energieverwaltungslogik enthalten, um eine Prozessorgestützte Energieverwaltung auszuführen, wie im vorliegenden Text beschrieben.
-
Wir bleiben bei 15. Der erste Prozessor 1570 enthält des Weiteren einen Speicher-Controller-Hub (MCH) 1572 und Punkt-zu-Punkt (P-P)-Schnittstellen 1576 und 1578. In ähnlicher Weise enthält der zweite Prozessor 1580 einen MCH 1582 und P-P-Schnittstellen 1586 und 1588. Wie in 15 gezeigt, koppeln die MCHs 1572 und 1582 die Prozessoren mit jeweiligem Speicher, und zwar einem Speicher 1532 und einem Speicher 1534, die Abschnitte von Systemspeicher (zum Beispiel DRAM) sein können, der lokal mit den jeweiligen Prozessoren verbunden sein kann. Der erste Prozessor 1570 und der zweite Prozessor 1580 können mit einem Chipsatz 1590 über P-P-Interconnect-Verbindungen 1562 bzw. 1564 gekoppelt sein. Wie in 15 gezeigt, enthält der Chipsatz 1590 P-P-Schnittstellen 1594 und 1598.
-
Des Weiteren enthält der Chipsatz 1590 eine Schnittstelle 1592, um den Chipsatz 1590 mit einer Hochleistungsgrafik-Engine 1538 durch eine P-P-Interconnect-Verbindung 1539 zu koppeln. Der Chipsatz 1590 wiederum kann mit einem ersten Bus 1516 über eine Schnittstelle 1596 gekoppelt sein. Wie in 15 gezeigt, können verschiedene Eingabe/Ausgabe (E/A)-Vorrichtungen 1514 mit einem ersten Bus 1516 gekoppelt sein, zusammen mit einer Busbrücke 1518, die einen ersten Bus 1516 mit einem zweiten Bus 1520 koppelt. Verschiedene Vorrichtungen können mit dem zweiten Bus 1520 gekoppelt sein, einschließlich beispielsweise einer Tastatur/Maus 1522, Kommunikationsvorrichtungen 1526 und einer Datenspeichereinheit 1528, wie zum Beispiel einem Disk-Laufwerk oder einer anderen Massenspeichervorrichtung, die in einer Ausführungsform Code 1530 enthalten kann. Des Weiteren kann eine Audio-E/A 1524 mit dem zweiten Bus 1520 gekoppelt sein. Ausführungsformen können auch in andere Arten von Systemen eingebunden sein, einschließlich mobile Vorrichtungen, wie zum Beispiel ein Smartphone, einen Tablet-Computer, ein Netbook, ein Ultrabook™ und so weiter.
-
Obgleich im Interesse der besseren Übersichtlichkeit 15 gezeigt nicht in, kann in einigen Ausführungsformen das System 1500 den Komprimierungsbeschleuniger 120 enthalten, der oben mit Bezug auf die 1A-1B beschrieben wurde. Des Weiteren kann in einigen Ausführungsformen das System 1500 einige oder alle der Komponenten und/oder Funktionen implementieren, die oben mit Bezug auf die 1A-1D und 2A-2C beschrieben wurden.
-
Ausführungsformen können in Code implementiert werden und können auf einem nicht-transitorischen Speichermedium gespeichert werden, auf dem Instruktionen gespeichert sind, die dafür verwendet werden können, ein System zu programmieren, um die Instruktionen auszuführen. Zu dem Speichermedium kann beispielsweise gehören: jede Art von Disk, einschließlich Floppy-Disks, optische Disks, Festkörperlaufwerke (SSDs), Compact Disk-Read Only Memories (CD-ROMs), Compact Disk-Rewritables (CD-RWs) und magneto-optische Disks, Halbleitervorrichtungen, wie zum Beispiel Read Only Memories (ROMs), Random Access Memories (RAMs), wie zum Beispiel Dynamic Random Access Memories (DRAMs), Static Random Access Memories (SRAMs), Erasable Programmable Read Only Memories (EPROMs), Flash-Speicher, Electrically Erasable Programmable Read-Only Memories (EEPROMs), magnetische oder optische Karten oder sonstige Arten von Medien, die zum Speichern elektronischer Instruktionen geeignet sind.
-
Die folgenden Sätze und/oder Beispiele gelten für weitere Ausführungsformen.
-
In einem Beispiel umfasst ein Prozessor zum Ausführen einer Datenkomprimierung Folgendes: mehrere Hardware-Verarbeitungskerne, einen Cache-Speicher und einen Komprimierungsbeschleuniger, der einen Hash-Tabellenspeicher umfasst. Der Komprimierungsbeschleuniger dient zum: Bestimmen eines Hash-Wertes für zu komprimierende Eingangsdaten; Lesen mehrerer erster N Positionswerte, die in einem Hash-Tabelleneintrag gespeichert sind, der durch den Hash-Wert indexiert wird; Ausführen eines ersten Satzes von Zeichenkettensuchen parallel aus einem Verlaufspuffer unter Verwendung der ersten mehreren N Positionswerte, die in dem Hash-Tabelleneintrag gespeichert sind; Lesen mehrerer zweiter N Positionswerte, die in einem ersten Überlauftabelleneintrag gespeichert sind, der durch einen ersten Überlaufzeiger indexiert ist, der in dem Hash-Tabelleneintrag enthalten ist; und Ausführen eines zweiten Satzes von Zeichenkettensuchen parallel aus dem Verlaufspuffer unter Verwendung der zweiten mehreren N Positionswerte, die in dem ersten Überlauftabelleneintrag gespeichert sind.
-
In einem Beispiel ist der erste Überlauftabelleneintrag einer von mehreren Überlaufeinträgen, die in einer Überlauftabelle enthalten sind.
-
In einem Beispiel wird die Überlauftabelle in dem Cache-Speicher des Prozessors gespeichert.
-
In einem Beispiel dient der Komprimierungsbeschleuniger zum: Lesen mehrerer dritter N Positionswerte, die in einem zweiten Überlauftabelleneintrag gespeichert sind, der durch einen Linkzeiger indexiert ist, der in dem ersten Überlauftabelleneintrag enthalten ist; und Ausführen eines dritten Satzes von Zeichenkettensuchen parallel aus dem Verlaufspuffer unter Verwendung der mehreren dritten N Positionswerte, die in dem zweiten Überlauftabelleneintrag gespeichert sind.
-
In einem Beispiel dient der Komprimierungsbeschleuniger zum: Lesen mehrerer vierter N Positionswerte, die in einem dritten Überlauftabelleneintrag gespeichert sind, der durch einen zweiten Überlaufzeiger indexiert ist, der in dem Hash-Tabelleneintrag enthalten ist; und Ausführen eines vierten Satzes von Zeichenkettensuchen parallel aus dem Verlaufspuffer unter Verwendung der vierten mehreren N Positionswerte, die in dem dritten Überlauftabelleneintrag gespeichert sind.
-
In einem Beispiel dient der Komprimierungsbeschleuniger zum Ausführen einer Doppelkettenbeseitigungsoperation an den Eingangsdaten auf der Grundlage mindestens eines des ersten Satzes von Zeichenkettensuchen und des zweiten Satzes von Zeichenkettensuchen.
-
In einem Beispiel umfasst der Komprimierungsbeschleuniger mehrere Komparatoren zum Ausführen der ersten und zweiten Sätze von Zeichenkettensuchen parallel.
-
In einem Beispiel der Verlaufspuffer umfasst einen lokalen Verlaufspuffer und einen räumlich abgesetzten Verlaufspuffer, wobei der lokale Verlaufspuffer in dem Komprimierungsbeschleuniger enthalten ist und wobei der räumlich abgesetzte Verlaufspuffer außerhalb des Komprimierungsbeschleunigers angeordnet ist.
-
In einem Beispiel umfasst ein Verfahren zum Ausführen einer Datenkomprimierung Folgendes: Empfangen, in einem Komprimierungsbeschleuniger, von zu komprimierenden Eingangsdaten; Bestimmen, durch den Komprimierungsbeschleuniger, eines Hash-Wertes für die Eingangsdaten; Bestimmen, durch den Komprimierungsbeschleuniger, ob eine Hash-Tabelle einen Hash-Eintrag enthält, der dem Hash-Wert entspricht, wobei die Hash-Tabelle in dem Komprimierungsbeschleuniger gespeichert wird, wobei jeder Hash-Eintrag der Hash-Tabelle mehrere N Positionsfelder enthält; in Reaktion auf eine Bestimmung, dass die Hash-Tabelle den Hash-Eintrag enthält, der dem Hash-Wert entspricht, Bestimmen, ob alle N Positionsfelder in dem Hash-Eintrag voll sind; und in Reaktion auf eine Bestimmung, dass nicht alle N Positionsfelder in dem Hash-Eintrag voll sind, Speichern eines Positionswertes der Eingangsdaten in einem leeren Positionsfeld des Hash-Eintrags.
-
In einem Beispiel kann das Verfahren in Reaktion auf eine Bestimmung, dass alle N Positionsfelder in dem Hash-Eintrag voll sind, enthalten: Erzeugen eines neuen Überlaufeintrags in einer Überlauftabelle; und Weiterreichen des Inhalts der N Positionsfelder des Hash-Eintrags zu dem neuen Überlaufeintrag. In einem Beispiel kann das Verfahren in Reaktion auf die Bestimmung, dass alle N Positionsfelder in dem Hash-Eintrag voll sind, enthalten: Hinzufügen eines Zeigers zu dem neuen Überlaufeintrag zu einem Überlaufzeigerfeld des Hash-Eintrags; und Speichern des Positionswertes der Eingangsdaten in einem Positionsfeld des Hash-Eintrags. In einem Beispiel wird die Überlauftabelle in einem Cache-Speicher außerhalb des Komprimierungsbeschleunigers gespeichert.
-
In einem Beispiel kann das Verfahren in Reaktion auf eine Bestimmung, dass die Hash-Tabelle keinen Hash-Eintrag enthält, der dem Hash-Wert entspricht, enthalten: Hinzufügen eines neues Hash-Eintrags zu der Hash-Tabelle; und Speichern des Positionswertes der Eingangsdaten in einem Positionsfeld des neuen Hash-Eintrags.
-
In einem Beispiel kann das Verfahren in Reaktion auf die Bestimmung, dass die Hash-Tabelle den Hash-Eintrag enthält, der dem Hash-Wert entspricht, enthalten: Lesen mindestens eines Positionswertes aus dem Hash-Eintrag; und Ausführen einer Doppelkettenbeseitigungsoperation unter Verwendung des mindestens einen aus dem Hash-Eintrag gelesenen Positionswertes.
-
In einem Beispiel sind auf einem maschinenlesbaren Medium Daten gespeichert, die, falls sie durch mindestens eine Maschine verwendet werden, die mindestens eine Maschine veranlassen, mindestens einen integrierten Schaltkreis herzustellen, um das Verfahren, wie oben beschrieben, auszuführen.
-
In einem Beispiel kann eine Vorrichtung zum Verarbeiten von Instruktionen dafür konfiguriert sein, das Verfahren, wie oben beschrieben, auszuführen.
-
In einem Beispiel enthält ein System zum Ausführen einer Datenkomprimierung einen Prozessor, der einen Komprimierungsbeschleuniger und einen externen Speicher umfasst, die mit dem Prozessor gekoppelt sind. Der Komprimierungsbeschleuniger kann umfassen: einen Hash-Tabellenspeicher, wobei der Hash-Tabellenspeicher zum Speichern einer Hash-Tabelle dediziert ist, die mehrere Hash-Einträge enthält, wobei jeder Hash-Eintrag der Hash-Tabelle mehrere erste N Positionsfelder und ein Überlaufzeigerfeld enthält; und mehrere Komparatoren, um in Reaktion auf eine Eingabezeichenkette einen ersten Satz von N Vergleichen parallel unter Verwendung der ersten mehreren N Positionsfelder in einem ersten Hash-Eintrag auszuführen, wobei der erste Hash-Eintrag auf einen Hash-Wert indexiert ist, der unter Verwendung der Eingabezeichenkette generiert wird.
-
In einem Beispiel dient jedes der ersten mehreren N Positionsfelder zum Speichern eines Positionswertes für eine eindeutige Position in einem Verlaufspuffer.
-
In einem Beispiel umfasst der Verlaufspuffer einen lokalen Verlaufspuffer und einen räumlich abgesetzten Verlaufspuffer, wobei der Komprimierungsbeschleuniger einen lokalen Verlaufspuffer zum Speichern des lokalen Verlaufspuffers enthält.
-
In einem Beispiel wird der räumlich abgesetzte Verlaufspuffer in einem Cache-Speicher außerhalb des Komprimierungsbeschleunigers gespeichert.
-
In einem Beispiel dient das Überlaufzeigerfeld zum Speichern eines Zeigers zu einem ersten Überlaufeintrag einer Überlauftabelle.
-
In einem Beispiel enthält der erste Überlaufeintrag der Überlauftabelle mehrere zweite N Positionsfelder und ein Link-Zeigerfeld, wobei das Link-Zeigerfeld zum Speichern eines Zeigers zu einem zweiten Überlaufeintrag der Überlauftabelle dient. In einem Beispiel dienen die mehreren Komparatoren des Weiteren zum Ausführen eines zweiten Satzes von N Vergleichen parallel unter Verwendung der zweiten mehreren N Positionsfelder in dem ersten Überlaufeintrag.
-
In einem Beispiel wird die Überlauftabelle in einem Cache-Speicher außerhalb des Komprimierungsbeschleunigers gespeichert.
-
In einem Beispiel sind auf einem maschinenlesbaren Medium Daten gespeichert, die, falls sie durch mindestens eine Maschine verwendet werden, die mindestens eine Maschine veranlassen, mindestens einen integrierten Schaltkreis herzustellen, um ein Verfahren auszuführen. Das Verfahren kann enthalten: Empfangen, in einem Komprimierungsbeschleuniger, von zu komprimierenden Eingangsdaten; Bestimmen, durch den Komprimierungsbeschleuniger, eines Hash-Wertes für die Eingangsdaten; Bestimmen, durch den Komprimierungsbeschleuniger, ob eine Hash-Tabelle einen Hash-Eintrag enthält, der dem Hash-Wert entspricht, wobei die Hash-Tabelle in dem Komprimierungsbeschleuniger gespeichert wird, wobei jeder Hash-Eintrag der Hash-Tabelle mehrere N Positionsfelder enthält; in Reaktion auf eine Bestimmung, dass die Hash-Tabelle den Hash-Eintrag enthält, der dem Hash-Wert entspricht, Bestimmen, ob alle N Positionsfelder in dem Hash-Eintrag voll sind; und in Reaktion auf eine Bestimmung, dass nicht alle N Positionsfelder in dem Hash-Eintrag voll sind, Speichern eines Positionswertes der Eingangsdaten in einem leeren Positionsfeld des Hash-Eintrags.
-
In einem Beispiel kann das Verfahren in Reaktion auf eine Bestimmung, dass alle N Positionsfelder in dem Hash-Eintrag voll sind, enthalten: Erzeugen eines neuen Überlaufeintrags in einer Überlauftabelle; und Weiterreichen des Inhalts der N Positionsfelder des Hash-Eintrags zu dem neuen Überlaufeintrag.
-
In einem Beispiel kann das Verfahren in Reaktion auf die Bestimmung, dass alle N Positionsfelder in dem Hash-Eintrag voll sind, enthalten: Hinzufügen eines Zeigers zu dem neuen Überlaufeintrag zu einem Überlaufzeigerfeld des Hash-Eintrags; und Speichern des Positionswertes der Eingangsdaten in einem Positionsfeld des Hash-Eintrags.
-
In einem Beispiel wird die Überlauftabelle in einem Cache-Speicher außerhalb des Komprimierungsbeschleunigers gespeichert.
-
In einem Beispiel kann das Verfahren in Reaktion auf eine Bestimmung, dass die Hash-Tabelle keinen Hash-Eintrag enthält, der dem Hash-Wert entspricht, enthalten: Hinzufügen eines neues Hash-Eintrags zu der Hash-Tabelle; und Speichern des Positionswertes der Eingangsdaten in einem Positionsfeld des neuen Hash-Eintrags.
-
In einem Beispiel kann das Verfahren in Reaktion auf die Bestimmung, dass die Hash-Tabelle den Hash-Eintrag enthält, der dem Hash-Wert entspricht, enthalten: Lesen mindestens eines Positionswertes aus dem Hash-Eintrag; und Ausführen einer Doppelkettenbeseitigungsoperation unter Verwendung des mindestens einen aus dem Hash-Eintrag gelesenen Positionswertes.
-
Es versteht sich, dass verschiedene Kombinationen der obigen Beispiele möglich sind.
-
Ausführungsformen können in vielen verschiedenen Arten von Systemen verwendet werden. Zum Beispiel kann in einer Ausführungsform eine Kommunikationsvorrichtung dafür ausgelegt sein, die verschiedenen im vorliegenden Text beschriebenen Verfahren und Techniken auszuführen. Natürlich ist der Geltungsbereich der vorliegenden Erfindung nicht auf eine Kommunikationsvorrichtung beschränkt; vielmehr können andere Ausführungsformen andere Arten von Vorrichtungen zum Verarbeiten von Instruktionen betreffen, oder ein oder mehrere maschinenlesbare Medien, die Instruktionen enthalten, die in Reaktion auf ihre Ausführung auf einer Computervorrichtung die Vorrichtung veranlassen, eines oder mehrere der im vorliegenden Text beschriebenen Verfahren und Techniken auszuführen.
-
Verweise in dieser Spezifikation auf „eine bestimmte Ausführungsform“ oder „eine Ausführungsform“ meinen, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft, das bzw. die in Verbindung mit der Ausführungsform beschrieben wird, in mindestens einer Implementierung enthalten ist, die in der vorliegenden Erfindung enthalten ist. Darum bezieht sich das Vorkommen der Formulierung „eine bestimmte Ausführungsform“ oder „in einer Ausführungsform“ nicht unbedingt auf dieselbe Ausführungsform. Des Weiteren können die bestimmten Merkmale, Strukturen oder Eigenschaften auch in anderen geeigneten Formen als in der bestimmten veranschaulichten Ausführungsform realisiert werden, und alle diese Formen können in den Ansprüchen der vorliegenden Anmeldung enthalten sein.
-
Obgleich die vorliegende Erfindung mit Bezug auf eine begrenzte Anzahl von Ausführungsformen beschrieben wurde, leuchtet dem Fachmann ein, dass zahlreiche Modifizierungen daran und Variationen davon möglich sind. Es ist beabsichtigt, dass die angehängten Ansprüche alle derartigen Modifizierungen und Variationen umfassen, die unter den wahren Geist und Geltungsbereich dieser vorliegenden Erfindung fallen.