-
QUERVERWEIS AUF VERWANDTE ANWENDUNGEN
-
Die vorliegende Anmeldung beansprucht die Priorität der
US-Patentanmeldung Nr. 15/279,647 , die am 29. September 2016 eingereicht wurde.
-
TECHNISCHER BEREICH
-
Die Ausführungsformen betreffen im Allgemeinen Speicherstrukturen.
-
HINTERGRUND
-
Computersystemspeicherstrukturen können als verschiedene Ebenen von Host-Prozessorseiten-Caches (z. B. Ebene-1 / LI-Cache, Ebene 2 / L2-Cache, Letzte-Ebene-Cache / LLC) und als ein Systemspeicher ausgebildet sein, der einen speicherseitigen Cache (z „Near Memory“) und zusätzlichen Speicher (z. B. „Far Memory“), auf den langsamer zugegriffen werden kann als auf den speicherseitigen Cache, aufweist.. Ein prozessorseitiger Cache kann in relativ kleinen (z. B. 64B) Cache-Zeilen organisiert sein, während ein speicherseitiger Cache in relativ großen (z. B. 1 KB oder 4 KB) Blöcken organisiert sein kann, um einen Tag- und Metadaten-Overhead zu reduzieren. Somit kann jeder 4-KB-Block in einem speicherseitigen Cache beispielsweise vierundsechzig der 64B-prozessor-seitigen Cache-Zeilen enthalten.
-
Wenn eine Datensuche im speicherseitigen Cache nicht erfolgreich ist (z. B. ein Cache-Fehler (Cache-Miss) auftritt, kann eine „Opfer“-Zeile im speicherseitigen Cache ausgewählt werden, um durch die angeforderten Daten ersetzt zu werden (z. B. Vertreibung), die aus einem fernen Speicher abgerufen werden. Häufige Fehler im speicherseitigen Cache können die Leistung reduzieren und den Stromverbrauch erhöhen, weil Daten aus einem relativ langsamen Fernspeicher abgerufen werden. Um die Wahrscheinlichkeit von Fehlern im speicherseitigen Cache zu verringern, kann jeder Block des speicherseitigen Caches komprimiert werden, um Platz für mehr Daten zu schaffen. Ein Dekomprimieren des speicherseitigen Caches auf einer blockweisen Basis kann jedoch die Latenz und den Overhead erhöhen, insbesondere wenn sich die abgerufenen Daten im kritischen Pfad der Hostprozessor-Leseoperationen befinden. Dementsprechend können herkömmliche Speicherstrukturen immer noch eine suboptimale Leistung und/oder suboptimalen einen Leistungsverbrauch aufweisen.
-
Figurenliste
-
Die verschiedenen Vorteile der Ausführungsformen werden für den Fachmann durch Lesen der folgenden Beschreibung und der beigefügten Ansprüche und durch Bezugnahme auf die folgenden Zeichnungen ersichtlich:
- 1 zeigt eine Darstellung eines Beispiels eines Kompressionsschemas, gemäß einer Ausführungsform;
- 2A - 2C sind Flussdiagramme von beispielhaften Verfahren zum Partnering von speicherseitigen Cache-Blöcken, gemäß den Ausführungsformen;
- 3A - 3C sind Flussdiagramme von beispielhaften Verfahren zum Partnering von speicherseitigen Cache-Subblöcken, gemäß den Ausführungsformen;
- 4 ist ein Blockdiagramm eines Beispiels eines Computersystems, gemäß einer Ausführungsform; und
- 5 ist ein Blockdiagramm eines Beispiels einer komprimierungsfähigen Speichervorrichtung, gemäß einer Ausführungsform.
-
BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
-
Nun zu 1, die ein Kompressionsschema zeigt, in dem ein erster Block 10 eine erste Cache-Zeile beinhaltet, die einen ersten Teil 12 einer Gesamt-Cache-Zeilengröße (z.B. 64B) komprimiert, eine zweite Cache-Zeile, die einen zweiten Teil 14 der Gesamt-Cache-Zeilengröße komprimiert, eine n-te Cache-Zeile, die einen n-ten Teil der Gesamt-Cache-Zeilengröße komprimiert, und so weiter. In einem Beispiel kann ein erster Block 10 als „Füllblock“ bezeichnet werden. Ein erster Block 10 kann im Allgemeinen Daten beinhalten, die als Reaktion auf einen Cache-Fehler (Cache-Miss) in einem speicherseitigen Cache (z.B. Near Memory) aus einem entfernten Speicher abgerufen werden. Somit umfasst der gezeigte erste Block 10 eine Vielzahl von Cache-Zeilen, wobei die Größe jeder Cache-Zeile gleich der Cache-Zeilengröße eines oder mehrerer prozessorseitiger Caches (z.B. LLC-Cache-Zeilengröße) sein kann.
-
Ebenso kann ein zweiter Block 20 eine erste Cache-Zeile beinhalten, die einen ersten Teil 22 einer gesamten Cache-Zeilengröße komprimiert, eine zweite Cache-Zeile, die einen zweiten Teil 24 einer gesamten Cache-Zeilengröße komprimiert, eine n-te Cache-Zeile, die einen n-ten Abschnitt 26 einer gesamten Cache-Zeilengröße komprimiert, und so weiter. In einem Beispiel kann ein zweiter Block 20 als „Partnerblock“ bezeichnet werden. Im dargestellten Beispiel wird jede Cache-Zeile im ersten Block 10 mit der entsprechenden Cache-Zeile im zweiten Block 20 komprimiert, um einen komprimierten Block 30 zu erhalten. Ein komprimierter Block 30 kann daher eine erste Cache-Zeile beinhalten, die einen ersten Abschnitt 32 einer gesamten Cache-Zeilengröße einnimmt, eine zweite Cache-Zeile, die einen zweiten Abschnitt 34 einer gesamten Cache-Zeilengröße einnimmt, eine n-te Cache-Zeile, die einen n-ten Abschnitt 36 einer gesamten Cache-Zeilengröße einnimmt, und so weiter. Das/die Kompressionsverfahren, mit denen die Abschnitte 12, 14, 16, 22, 24, 26, 32, 34, 36 erzeugt werden, können je nach den Umständen variieren. Beispiele für Komprimierungstechniken sind häufiger die partem compression (FPC), die base-deltaimmediate (BDI)-Kompression, die Run Length Encoding (RLE), der Cache Packer (CPACK), die Huffman-Kodierung und die Limpel-Ziv (LZ)-Kompression.
-
Ein zweiter Block 20 kann sich im Allgemeinen im speicherseitigen Cache befinden. So kann beispielsweise ein zweiter Block 20 ein Opferblock im speicherseitigen Cache sein, der gemäß einer zuletzt verwendeten (LRU-)RichtZeile (oder einer anderen ErsatzrichtZeile) zur Räumung identifiziert wird. In diesem Fall kann ein zweiter Block 20 (z.B. Opferblock) durch einen komprimierten Block 30 ersetzt werden, wenn ein komprimierter Block 30 eine Größenbedingung erfüllt. Eine Größenbedingung könnte so festgelegt werden, dass jede Cache-Zeile im komprimierten Block 30 eine Größe hat, die kleiner oder gleich der Cache-Zeilengröße ist, die einem prozessorseitigen Cache zugeordnet ist (z.B. 64B). Somit kann ein zweiter Block 20 eine Größenbedingung erfüllen, wenn ein erster Abschnitt 32 kleiner oder gleich 64B ist, ein zweiter Abschnitt 34 kleiner oder gleich 64B ist, ein n-ter Abschnitt 36 kleiner oder gleich 64B ist, usw. im gezeigten Beispiel.
-
In einem anderen Beispiel kann ein zweiter Block 20 ein erster angetroffener Block (z.B. zeitlich) im speicherseitigen Cache sein, um eine Größenbedingung zu erfüllen. Wenn also die Größenbedingung erfüllt ist, kann ein zweiter Block 20 (z.B. ein erster Block zur Erfüllung der Bedingung) durch einen komprimierten Block 30 ersetzt werden. In noch einem weiteren Beispiel kann ein zweiter Block 20 ein „Best Fit“-Block im speicherseitigen Cache sein, der bewirkt, dass ein komprimierter Block 30 den geringsten ungenutzten Platz zurücklässt. Es können auch andere Ansätze zur Auswahl eines zweiten Blocks 20 verwendet werden.
-
2A zeigt ein Verfahren 40 zum Partnering von speicherseitigen Cache-Blöcken. Das Verfahren 40 kann im Allgemeinen in eine- komprimierbare-Speichervorrichtung implementiert werden, wie hierin beschrieben. Insbesondere kann ein Verfahren 40 in einem oder mehreren Modulen als ein Satz von Logikbefehlen implementiert werden, die in einem maschinen- oder computerlesbaren Speichermedium gespeichert sind, wie z.B. Random Access Memory (RAM), Read Only Memory (ROM), programmierbares ROM (PROM), Firmware, Flash-Speicher usw...., in konfigurierbarer Logik, wie beispielsweise programmierbare Logik-Arrays (PLAs), feldprogrammierbare Gate-Arrays (FPGAs), komplexe programmierbare Logikvorrichtungen (CPLDs), in Logik-Hardware mit fester Funktionalität unter Verwendung von Schaltungstechnik, wie beispielsweise anwendungsspezifischer integrierter Schaltung (ASIC), komplementärer Metalloxid-Halbleiter- (CMOS) oder Transistor-Logik (TTL) Technologie oder einer beliebigen Kombination derselben.
-
Ein gezeigter Verarbeitungsblock 42 ermöglicht ein Identifizieren eines ersten Blocks und eines zweiten Blocks, wobei ein erster Block eine erste Vielzahl von Cache-Zeilen aufweist, ein zweiter Block eine zweite Vielzahl von Cache-Zeilen aufweist und der zweite Block ein Opferblock ist, der sich in einem speicherseitigen Cache befindet. Eine Identifizierung des ersten Blocks kann ein Abrufen und/oder Empfangen des ersten Blocks aus einem entfernten Speicher als Reaktion auf einen Cache--Fehler im speicherseitigen Cache beinhalten. Darüber hinaus kann eine Identifizierung des zweiten Blocks eine Auswahl des Opferblocks in Übereinstimmung mit einem FEVU oder einer anderen geeigneten RichtZeile beinhalten. Jede Cache-Zeile in der ersten Vielzahl von Cache-Zeilen kann am Verarbeitungsblock 44 mit einer entsprechenden Cache-Zeile in einer zweiten Vielzahl von Cache-Zeilen komprimiert werden, um einen komprimierten Block zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist. Ein Verarbeitungsblock 44 kann beispielsweise ein Anwenden eines oder mehrerer Komprimierungsverfahren auf einen ersten Block und einen zweiten Block beinhalten und dann die Ergebnisse auf einer Cache-Zeilenbasis kombinieren.
-
Im Verarbeitungsblock 46 kann bestimmt werden, ob ein komprimierter Block eine Größenbedingung erfüllt. Wie bereits erwähnt, kann eine Größenbedingung beispielsweise beinhalten, dass jede Cache-Zeile aus einer dritten Vielzahl von Cache-Zeilen eine Größe aufweist, die kleiner oder gleich einer Cache-Zeilengröße ist, die einem prozessorseitigen Cache zugeordnet ist. Wenn die Größenbedingung erfüllt ist, ersetzt der gezeigte Verarbeitungsblock 48 einen Opferblock durch einen komprimierten Block. Dementsprechend ermöglicht das gezeigte Verfahren 40, dass eine komprimierte Version eines Opferblocks zusammen mit einer komprimierten Version des ersten Blocks im speicherseitigen Cache verbleibt. Wird bei Verarbeitungsblock 46 festgestellt, dass die Größenbedingung nicht erfüllt ist, kann ein Verarbeitungsblock 50 einen Opferblock durch einen ersten Block ersetzen.
-
2B zeigt ein weiteres Verfahren 52 zum Partnering von speicherseitigen Cache-Blöcken. Ein Verfahren 52 kann im Allgemeinen in einer komprimierbaren Speichervorrichtung implementiert werden, wie hierin beschrieben. Insbesondere kann ein Verfahren 52 in einem oder mehreren Modulen als ein Satz von Logikbefehlen implementiert werden, die in einem maschinen- oder computerlesbaren Speichermedium wie RAM, ROM, PROM, Firmware, Flash-Speicher usw. gespeichert sind, in konfigurierbarer Logik wie beispielsweise PLAs, FPGAs, CPLDs, in Logikhardware mit fester Funktionalität unter Verwendung von Schaltungstechnik wie beispielsweise ASIC, CMOS, TTL-Technologie oder einer beliebigen Kombination derselben.
-
Der gezeigte Verarbeitungsblock 54 ermöglicht ein Identifizieren eines ersten Blocks und eines zweiten Blocks, wobei der erste Block eine erste Vielzahl von Cache-Zeilen aufweist, der zweite Block eine zweite Vielzahl von Cache-Zeilen aufweist und der zweite Block in einem speicherseitigen Cache liegt. Wie bereits erwähnt, kann eine Identifizierung des ersten Blocks ein Abrufen und/oder Empfangen des ersten Blocks aus einem entfernten Speicher als Reaktion auf einen Cache-Fehler im speicherseitigen Cache beinhalten. Darüber hinaus kann eine Identifizierung des zweiten Blocks eine Auswahl eines „Kandidatenblock“ aus einem gegebenen Satz im speicherseitigen Cache beinhalten (z.B. wenn ein speicherseitiger Cache ein mehrfacher-gesetzter assoziativer Cache ist, wobei jeder Satz mehrere Wege enthält und jeder Weg einen Datenblock enthält). Jede Cache-Zeile in der ersten Vielzahl von Cache-Zeilen kann am Verarbeitungsblock 56 mit einer entsprechenden Cache-Zeile in der zweiten Vielzahl von Cache-Zeilen komprimiert werden, um einen komprimierten Block zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist. Ein Verarbeitungsblock 56 kann beispielsweise ein Anwenden eines oder mehrerer Komprimierungsverfahren auf einen ersten Block und einen zweiten Block beinhalten und dann die Ergebnisse auf einer Cache-Zeilenbasis kombinieren.
-
Im Verarbeitungsblock 58 kann bestimmt werden, ob ein komprimierter Block eine Größenbedingung erfüllt, wobei eine Größenbedingung beispielsweise ist, dass jede Cache-Zeile aus einer dritten Vielzahl von Cache-Zeilen eine Größe aufweist, die kleiner oder gleich einer Cache-Zeilengröße ist, die einem prozessorseitigen Cache zugeordnet ist. Wenn die Größenbedingung erfüllt ist, ersetzt der gezeigte Verarbeitungsblock 60 einen zweiten Block durch einen komprimierten Block. Wird dagegen bei Verarbeitungsblock 58 bestimmt, dass eine Größenbedingung nicht erfüllt ist, bestimmt ein gezeigter Verarbeitungsblock 62, ob ein letzter Block (z.B. Endblock im Satz) im speicherseitigen Cache erreicht wurde. Wenn ja, kann ein Opferblock (z.B. gemäß LRU-RichtZeile) durch einen ersten Block bei Verarbeitungsblock 64 ersetzt werden. Wenn bei Verarbeitungsblock 62 bestimmt wird, dass der letzte Block nicht angetroffen wurde, kann der nächste zweite Kandidatenblock bei Verarbeitungsblock 66 ausgewählt werden und das gezeigte Verfahren 52 kehrt zu Verarbeitungsblock 56 zurück. So ermöglicht das gezeigte Verfahren 52, dass ein komprimierter Block durch einen ersten angetroffenen Block im speicherseitigen Cache ersetzt werden kann, so dass ein komprimierter Block die Größenbedingung erfüllt.
-
2C zeigt noch ein weiteres Verfahren 68 zum Partnering von speicherseitigen Cache-Blöcken. Ein Verfahren 68 kann im Allgemeinen in einer komprimierbaren Speichervorrichtung implementiert werden, wie hierin beschrieben. Insbesondere kann ein Verfahren 68 in einem oder mehreren Modulen als ein Satz von Logikbefehlen implementiert werden, die in einem maschinen- oder computerlesbaren Speichermedium wie RAM, ROM, PROM, Firmware, Flash-Speicher usw. in konfigurierbarer Logik wie beispielsweise PLAs, FPGAs, CPLDs, in Logikhardware mit fester Funktionalität unter Verwendung von Schaltungstechnik wie beispielsweise ASIC, CMOS, TTL-Technologie oder einer beliebigen Kombination derselben gespeichert sind.
-
Ein gezeigter Verarbeitungsblock 70 ermöglicht ein Identifizieren eines ersten Blocks und eines zweiten Blocks, wobei der erste Block eine erste Vielzahl von Cache-Zeilen aufweist, der zweite Block eine zweite Vielzahl von Cache-Zeilen aufweist und der zweite Block in einem speicherseitigen Cache liegt. Wie bereits erwähnt, kann eine Identifizierung des ersten Blocks ein Abrufen und/oder Empfangen eines ersten Blocks aus einem entfernten Speicher als Reaktion auf einen Cache-Fehler im speicherseitigen Cache beinhalten. Darüber hinaus kann eine Identifizierung eines zweiten Blocks eine Auswahl eines Kandidatenblock aus einem gegebenen Satz im speicherseitigen Cache beinhalten (z.B. wenn ein speicherseitiges Cache ein mehrfach-gesetzter assoziativer Cache ist, wobei jeder Satz mehrere Wege enthält und jeder Weg einen Datenblock enthält). Jede Cache-Zeile in der ersten Vielzahl von Cache-Zeilen kann am Verarbeitungsblock 72 mit einer entsprechenden Cache-Zeile in der zweiten Vielzahl von Cache-Zeilen komprimiert werden, um einen komprimierten Block zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist. Ein Verarbeitungsblock 72 kann beispielsweise ein Anwenden eines oder mehrerer Komprimierungsverfahren auf einen ersten Block und einen zweiten Block beinhalten und dann die Ergebnisse auf einer Cache-Zeilenbasis kombinieren.
-
Ein gezeigter Verarbeitungsblock 74 bestimmt, ob ein letzter Block (z.B. Endblock im Satz) im speicherseitigen Cache erreicht ist. Wenn nicht, kann ein nächster zweiter Kandidatenblockblock am Verarbeitungsblock 76 ausgewählt werden und das gezeigte Verfahren 68 kehrt zum Verarbeitungsblock 72 zurück. Sobald im Verarbeitungsblock 74 bestimmt wird, dass der letzte Block erreicht ist, kann im Verarbeitungsblock 75 bestimmt werden, ob irgendwelche Blöcke eine Größenbedingung erfüllt haben. Wenn ja, kann ein Verarbeitungsblock 78 den am besten geeigneten zweiten Block im speicherseitigen Cache durch einen entsprechenden komprimierten Block ersetzen. Ein am besten geeigneter zweiter Block kann als ein Block betrachtet werden, der bewirkt, dass ein Kompressionsblock den geringsten ungenutzten Platz im speicherseitigen Cache zurücklässt. Wird bei Verarbeitungsblock 75 festgestellt, dass keine Blöcke die Größenbedingung erfüllt haben, ersetzt der gezeigte Verarbeitungsblock 77 einen Opferblock (z.B. gemäß LRU-RichtZeile) durch einen ersten Block.
-
3A zeigt ein Verfahren 80 zum Partnering von speicherseitigen Cache-Subblöcken. Ein Verfahren 80 kann im Allgemeinen in eine- komprimierbare Speichervorrichtung implementiert werden, wie hierin beschrieben. Insbesondere kann ein Verfahren 80 in einem oder mehreren Modulen als ein Satz von Logikbefehlen implementiert werden, die in einem maschinen- oder computerlesbaren Speichermedium wie RAM, ROM, PROM, Firmware, Flash-Speicher usw. in konfigurierbarer Logik wie beispielsweise PLAs, FPGAs, CPLDs, in Logikhardware mit fester Funktionalität unter Verwendung von Schaltungstechnik wie beispielsweise ASIC, CMOS, TTL-Technologie oder einer beliebigen Kombination derselben gespeichert sind.
-
Ein gezeigter Verarbeitungsblock 82 sieht ein Identifizieren eines ersten Blocks und ein Aufteilen des ersten Blocks in Subblöcke vor, die größer als eine Cache-Zeilengröße sind, die einem prozessorseitigen Cache zugeordnet ist, wobei ein Füll-Subblock eine erste Vielzahl von Cache-Zeilen aufweist. So kann ein Verarbeitungsblock 82 beispielsweise eine Aufteilung eines 4kB-Datenblocks in vier IkB-Subblöcke von Daten beinhalten. Eine Identifizierung eines ersten Blocks kann ein Abrufen und/oder Empfangen eines ersten Blocks aus einem entfernten Speicher als Reaktion auf einen Cache-Fehler im speicherseitigen Cache beinhalten. Ein Partner-Subblock kann am Verarbeitungsblock 84 identifiziert werden, wobei der Partner-Subblock eine zweite Vielzahl von Cache-Zeilen aufweist und der Partner-Subblock ein Opfer-Subblock ist, der sich in einem speicherseitigen Cache befindet. Die Identifizierung des Partner-Subblocks kann beispielsweise eine Auswahl des Opfer-Subblocks in Übereinstimmung mit einem FEVU oder einer anderen geeigneten RichtZeile beinhalten. Jede Cache-Zeile in der ersten Vielzahl von Cache-Zeilen kann am Verarbeitungsblock 86 mit einer entsprechenden Cache-Zeile in der zweiten Vielzahl von Cache-Zeilen komprimiert werden, um einen komprimierten Subblock zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist. Ein Verarbeitungsblock 86 kann beispielsweise ein Anwenden eines oder mehrerer Komprimierungsverfahren auf einen Füll-Subblock und einen Partner-Subblock beinhalten und dann die Ergebnisse auf Cache-Zeilenbasis kombinieren.
-
Der Verarbeitungsblock 88 kann bestimmt werden, ob ein komprimierter Subblock eine Größenbedingung erfüllt. Wie bereits erwähnt, kann eine Größenbedingung beispielsweise beinhalten, dass jede Cache-Zeile aus einer dritten Vielzahl von Cache-Zeilen eine Größe aufweist, die kleiner oder gleich einer Cache-Zeilengröße ist, die einem prozessorseitigen Cache zugeordnet ist. Wenn die Größenbedingung erfüllt ist, ersetzt der gezeigte Verarbeitungsblock 90 einen Opfer-Subblock durch den komprimierten Subblock. Dementsprechend ermöglicht ein gezeigtes Verfahren 80, dass eine komprimierte Version eines Opfer-Subblocks zusammen mit einer komprimierten Version des Füll-Subblocks im speicherseitigen Cache verbleibt. Darüber hinaus kann eine Aufteilung eines ersten Blocks in Subblöcke die Wahrscheinlichkeit erhöhen/maximieren, dass ein Partner-Subblock für den Füll-Subblock gefunden wird. Tatsächlich kann eine Erhöhung von Kompressionsmetadaten angesichts der mit der Wahrscheinlichkeitssteigerung verbundenen Vorteile für Leistung und/oder Stromverbrauch vernachlässigbar sein. Wird bei Verarbeitungsblock 88 festgestellt, dass die Größenbedingung nicht erfüllt ist, kann ein Verarbeitungsblock 92 einen OpferSubblock durch einen Füll-Subblock ersetzen.
-
3B zeigt ein weiteres Verfahren 94 zum Partnering von speicherseitigen Cache-Unterblöcken. Ein Verfahren 94 kann im Allgemeinen in eine komprimierbare Speichervorrichtung implementiert werden, wie hierin beschrieben. Insbesondere kann ein Verfahren 94 in einem oder mehreren Modulen als ein Satz von Logikbefehlen implementiert werden, die in einem maschinen- oder computerlesbaren Speichermedium wie RAM, ROM, PROM, Firmware, Flash-Speicher usw. in konfigurierbarer Logik wie beispielsweise PLAs, FPGAs, CPLDs, in Logikhardware mit fester Funktionalität unter Verwendung von Schaltungstechnik wie beispielsweise ASIC, CMOS, TTL-Technologie oder einer beliebigen Kombination derselben gespeichert sind.
-
Ein gezeigter Verarbeitungsblock 96 ermöglicht ein Identifizieren eines ersten Blocks und ein Aufteilen eines ersten Blocks in Subblöcke, die größer als eine Cache-Zeilengröße sind, die einem prozessorseitigen Cache zugeordnet ist, wobei ein Füll-Subblock eine erste Vielzahl von Cache-Zeilen aufweist. So kann ein Verarbeitungsblock 96 beispielsweise eine Aufteilung eines 4kB-Datenblocks in vier IkB-Unterblöcke von Daten beinhalten, wie bereits erläutert. Ein Partner-Subblock kann am Verarbeitungsblock 98 identifiziert werden, wobei ein Partner-Subblock eine zweite Vielzahl von Cache-Zeilen aufweist und sich in einem speicherseitigen Cache befindet. Eine Identifizierung eines Partner-Subblocks kann eine Auswahl eines „Kandidaten“ aus einem bestimmten Satz im speicherseitigen Cache beinhalten (z.B. wenn ein speicherseitiger Cache ein mehrfacher-gesetzter assoziativer Cache ist, wobei jeder Satz mehrere Wege enthält und jeder Weg einen Datenblock enthält). Jede Cache-Zeile in einer ersten Vielzahl von Cache-Zeilen kann am Verarbeitungsblock 100 mit einer entsprechenden Cache-Zeile in einer zweiten Vielzahl von Cache-Zeilen komprimiert werden, um einen komprimierten Subblock zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist. Ein Verarbeitungsblock 100 kann beispielsweise das Anwenden eines oder mehrerer Komprimierungsverfahren auf einen Füll-Subblock und einen Partner-Subblock beinhalten und dann die Ergebnisse auf Cache-Zeilenbasis kombinieren.
-
Im Verarbeitungsblock 102 kann bestimmt werden, ob ein komprimierter Subblock eine Größenbedingung erfüllt, wobei eine Größenbedingung beispielsweise ist, dass jede Cache-Zeile aus einer dritten Vielzahl von Cache-Zeilen eine Größe aufweist, die kleiner oder gleich einer Cache-Zeilengröße ist, die einem prozessorseitigen Cache zugeordnet ist. Wenn die Größenbedingung erfüllt ist, ersetzt der gezeigte Verarbeitungsblock 104 einen Partner-Subblock durch einen komprimierten Subblock. Wird dagegen bei Verarbeitungsblock 102 bestimmt, dass die Größenbedingung nicht erfüllt ist, bestimmt der gezeigte Verarbeitungsblock 106, ob ein letzter Subblock (z.B. letzter Subblock im Satz) im speicherseitigen Cache erreicht wurde. Wenn ja, kann ein Partner-Subblock durch einen Füll-Subblock am Verarbeitungsblock 108 ersetzt werden. Wenn bei Verarbeitungsblock 106 festgestellt wird, dass der letzte Subblock nicht angetroffen wurde, kann ein nächster Kandidatenpartner-Subblock bei Verarbeitungsblock 110 ausgewählt werden und das gezeigte Verfahren 94 kehrt zu Verarbeitungsblock 100 zurück. So ermöglicht das gezeigte Verfahren 94, dass ein komprimierter Subblock durch einen ersten angetroffenen Subblock im speicherseitigen Cache ersetzt werden kann, so dass ein komprimierter Subblock die Größenbedingung erfüllt.
-
3C zeigt noch ein weiteres Verfahren 112 zum Zusammenführen von speicherseitigen Cache-Subblöcken. Ein Verfahren 112 kann im Allgemeinen in eine komprimierbare Speichervorrichtung implementiert werden, wie hierin beschrieben. Insbesondere kann ein Verfahren 112 in einem oder mehreren Modulen als ein Satz von Logikbefehlen implementiert werden, die in einem maschinen- oder computerlesbaren Speichermedium wie RAM, ROM, PROM, Firmware, Flash-Speicher usw. in konfigurierbarer Logik wie beispielsweise PLAs, FPGAs, CPLDs, in Logikhardware mit fester Funktionalität unter Verwendung von Schaltungstechnik wie beispielsweise ASIC, CMOS, TTL-Technologie oder einer beliebigen Kombination derselben gespeichert sind.
-
Ein gezeigter Verarbeitungsblock 114 ermöglicht ein Identifizieren eines ersten Blocks und ein Aufteilen eines ersten Blocks in Subblöcke, die größer als eine Cache-Zeilengröße sind, die einem prozessorseitigen Cache zugeordnet ist, wobei ein Füll-Subblock eine erste Vielzahl von Cache-Zeilen aufweist. So kann ein Verarbeitungsblock 114 beispielsweise eine Aufteilung eines 4kB-Datenblocks in vier IkB-Sub-Blöcke von Daten beinhalten, wie bereits erläutert. Ein Partner-Subblock kann am Verarbeitungsblock 116 identifiziert werden, wobei ein Partner-Subblock eine zweite Vielzahl von Cache-Zeilen aufweist und sich in einem speicherseitigen Cache befindet. Eine Identifizierung eines Partner-Subblocks kann eine Auswahl eines „Kandidaten“ aus einem bestimmten Satz im speicherseitigen Cache beinhalten (z.B. wenn ein speicherseitiger Cache ein mehrfacher gesetzter assoziativer Cache ist, wobei jeder Satz mehrere Wege enthält und jeder Weg einen Datenblock enthält).
-
Jede Cache-Zeile in der ersten Vielzahl von Cache-Zeilen kann am Verarbeitungsblock 118 mit einer entsprechenden Cache-Zeile in der zweiten Vielzahl von Cache-Zeilen komprimiert werden, um einen komprimierten Subblock zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist. Der Verarbeitungsblock 118 kann beispielsweise das Anwenden eines oder mehrerer Komprimierungsverfahren auf den Füll-Subblock und den Partner-Subblock beinhalten und dann die Ergebnisse auf Cache-Zeilenbasis kombinieren.
-
Ein gezeigter Verarbeitungsblock 120 bestimmt, ob ein letzter Subblock (z.B. letzter Subblock im Set) im speicherseitigen Cache erreicht ist. Wenn nicht, kann ein nächster Kandidatenpartner-Subblock am Verarbeitungsblock 122 ausgewählt werden und das gezeigte Verfahren 112 kehrt zum Verarbeitungsblock 118 zurück. Sobald es bei Verarbeitungsblock 120 bestimmt ist, dass der letzte Subblock erreicht ist, kann ein Verarbeitungsblock 124 den am besten geeigneten Partner-Subblock im speicherseitigen Cache durch einen entsprechenden komprimierten Subblock ersetzen. Ein am besten geeigneter Partner-Subblock kann als ein Subblock betrachtet werden, der bewirkt, dass ein Kompressionssubblock den geringsten ungenutzten Platz im speicherseitigen Cache zurücklässt.
-
Nun zu 4, in der ein speicherbasiertes Computersystem 130 dargestellt wird. Ein System 130 kann im Allgemeinen Teil eines Servers, Desktop-Computers, Notebooks, Tablet-Computers, Convertible Tablets, Smart TVs (TV), Personal Digital Assistant (PDA), Mobile Internet Devices (MID), Smartphones, tragbaren Gerätes, Media Players, etc. oder einer beliebigen Kombination davon sein. Im veranschaulichten Beispiel ist ein Ein-/Ausgabemodul (10) 148 kommunikativ mit einer Anzeige 150 (z.B. Flüssigkristallanzeige /LCD, Leuchtdiode/LED-Anzeige, Touchscreen), Massenspeicher 152 (z.B. Festplatte/HDD, optische Platte, Solid State Drive/SSD, Flash-Speicher) und einer Netzwerksteuerung 154 (z.B. drahtgebunden, drahtlos) gekoppelt. Ein veranschaulichtes System 130 kann auch einen Host-Prozessor 132 (z.B. Zentraleinheit/CPU) beinhalten, der einen prozessorseitigen Cache 134 (z.B. LLC) und eine integrierte Speichersteuerung 136 aufweist, die mit einem Systemspeicher 138 über einen Bus 140 oder eine andere geeignete Kommunikationsschnittstelle kommuniziert. Ein Host-Prozessor 132 und ein IO-Modul 148 können auf einem gemeinsamen Halbleiterchip (nicht dargestellt) in einer System-on-Chip-(SoC)-Struktur integriert werden.
-
Mit weiterem Bezug auf die 4 und 5 kann ein Systemspeicher 138 einen Speicher 142 (z.B. einen weiten Speicher, der entweder ein flüchtiger Speicher oder nichtflüchtiger Speicher sein kann), eine Cachesteuerung 144 (144a-144d) und einen speicherseitigen Cache 146 beinhalten, auf den schneller zugegriffen werden kann als auf den Speicher 142. Ein speicherseitiger Cache 146 kann in eine Vielzahl von Blöcken (oder Unterblöcken) organisiert werden. Der dargestellte Cache-Controller 144 kann im Allgemeinen einen oder mehrere Aspekte eines Verfahrens 40 (2A), eines Verfahrens 52 (2B), eines Verfahrens 68 (2C), eines Verfahrens 80 (3A), eines Verfahrens 94 (3B) und/oder eines Verfahrens 112 (3C) implementieren, die bereits erläutert wurden. Somit kann ein Cache-Controller 144 als eine kompressionsfähige Speichervorrichtung fungieren, die einen Cache-Fehlerbehandler (Cache-Miss-Handler) 144a beinhaltet, um einen ersten Block zu identifizieren (z.B. als Reaktion auf einen Cache-Fehler), wobei ein erster Block eine erste Vielzahl von Cache-Zeilen aufweist. So kann beispielsweise ein erster Block aus einem weiteren Speicher 142 abgerufen und/oder empfangen werden. Zusätzlich kann ein Kompressionscontroller 144b kommunikativ mit dem Cache-Fehlerbehandler 144a gekoppelt werden. Eine Kompressionssteuerung 144b kann einen zweiten Block identifizieren, der eine zweite Vielzahl von Cache-Zeilen aufweist und sich im speicherseitigen Cache 146 befindet. In einem Beispiel komprimiert eine Kompressionssteuerung 144b jede Cache-Zeile in einer ersten Vielzahl von Cache-Zeilen weiter mit einer entsprechenden Cache-Zeile in einer zweiten Vielzahl von Cache-Zeilen, um einen komprimierten Block zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist.
-
Darüber hinaus kann eine Ersetzungssteuerung 144c kommunikativ mit einem Cache-Fehlerbehandler 144a und einer Kompressionssteuerung 144b gekoppelt werden, wobei eine Ersetzungssteuerung 144c so konfiguriert ist, um einen zweiten Block im speicherseitigen Cache 146 durch einen komprimierten Block zu ersetzen, wenn der komprimierte Block eine Größenbedingung erfüllt. eine Größenbedingung kann beispielsweise beinhalten, dass jede Cache-Zeile aus einer dritten Vielzahl von Cache-Zeilen eine Größe aufweist, die kleiner oder gleich einer Cache-Zeilengröße ist, die einem prozessorseitigen Cache 134 zugeordnet ist. Eine Cachesteuerung 144 kann auch einen Subblock-Manager 144d beinhalten, um einen ersten Block in Subblöcke zu teilen, die größer als die Cache-Zeilengröße sind. In einem solchen Fall kann eine Kompressionssteuerung 144b einen zweiten Block auf Subblockbasis identifizieren.
-
In einem Beispiel kann ein speicherseitiger Cache 146 in einer zweistufigen Speicher/2LM-Struktur als „near memory“ bezeichnet werden. Wie bereits erwähnt, kann ein Speicher 142 des Weiteren ein Speicher sein, der entweder einen flüchtigen Speicher oder einen nichtflüchtigen Speicher aufweist. Ein nichtflüchtiger Speicher ist ein Speichermedium, das keine Energie benötigt, um einen Zustand, der auf einem Medium gespeicherten Daten zu bewahren. Nicht einschränkende Beispiele für nichtflüchtige Speicher können eine oder eine Kombination aus: Festkörperspeichern (wie Planar- oder 3D-NAND-Flash-Speicher oder NOR-Flash-Speicher), 3D-Knotenpunktspeicher, Speichervorrichtungen, die Chalkogenidphasenwechselmaterial verwenden (z.B. Chalkogenidglas), byteadressierbare nichtflüchtige Speichervorrichtungen, ferroelektrischer Speicher, Siliziumoxid-Nitrid-Oxid-Silizium(SONOS)-Speicher, Polymerspeicher (z. B., ferroelektrischer Polymerspeicher), ferroelektrischer Transistor-Random-Access-Speicher (Fe-TRAM) Ovonic-Speicher, Nanodrahtspeicher, elektrisch löschbarer programmierbarer Nur-Lese-Speicher (EEPROM), andere verschiedene Arten von nichtflüchtigen Random-Access-Speicher (RAMs) und Magnetspeicher sein. In einigen Ausführungsformen kann ein 3D-Knotenpunktspeicher eine transistorlose, stapelbare Kreuzungsstruktur umfassen, in der Speicherzellen am Schnittpunkt von Wortleitungen und Bitleitungen sitzen und einzeln adressierbar sind und in der eine Bitspeicherung auf einer Änderung des Massenwiderstands basiert. Insbesondere Ausführungsformen, ein Speichermodul mit nichtflüchtigem Speicher kann einer oder mehreren vom Joint Electron Device Engineering Council (JEDEC) veröffentlichten Normen entsprechen, wie z.B. JESD218, JESD219, JESD220-1, JESD223B, JESD223-1 oder einer anderen geeigneten Norm (die hierin genannten JEDEC-Normen sind unter jedec.org verfügbar).
-
Ein flüchtiger Speicher ist ein Speichermedium, das Strom benötigt, um einen Zustand von auf dem Medium gespeicherten Daten zu bewahren. Beispiele für flüchtige Speicher können verschiedene Arten von Direktzugriffsspeichern (RAM) beinhalten, wie beispielsweise dynamischen Direktzugriffsspeicher (DRAM) oder statischen Direktzugriffsspeicher (SRAM). Eine bestimmte Art von DRAM, die in einem Speichermodul verwendet werden kann, ist ein synchroner Dynamic Random Access Memory (SDRAM). Insbesondere Ausführungsformen, DRAM von Speichermodulen entsprechen einem von JEDEC veröffentlichten Standard, wie z.B. JESD79F für Double Data Rate (DDR) SDRAM, JESD79-2F für DDR2 SDRAM, JESD79-3F für DDR3 SDRAM oder JESD79-4A für DDR4 SDRAM (diese Standards sind unter www.jedec.org verfügbar). Diese Normen (und ähnliche Normen) können als DDR-basierte Normen und Kommunikationsschnittstellen von Speichergeräten 106, die diese Normen implementieren, als DDR-basierte Schnittstellen bezeichnet werden.
-
Zusätzliche Anmerkungen und Beispiele:
-
Beispiel 1 kann eine komprimierbare Speichervorrichtung beinhalten, die einen speicherseitigen Cache umfasst, der in eine Vielzahl von Blöcken organisiert werden soll, einen Cache-Fehlerbehandler zum Identifizieren eines ersten Blocks als Reaktion auf einen Cache-Fehler im speicherseitigen Cache, einen Subblock-Manager zum Teilen des ersten Blocks in Unterblöcke, die größer als eine Cache-Zeilengröße sind, die einem prozessorseitigen Cache zugeordnet ist, wobei ein Füll-Subblock eine erste Vielzahl von Cache-Zeilen beinhalten soll, eine Kompressionssteuerung, der kommunikativ mit dem Cache-Fehlerbehandler gekoppelt ist, wobei eine Kompressionssteuerung einen Partner-Subblock identifizieren soll, der eine zweite Vielzahl von Cache-Zeilen aufweist und sich im speicherseitigen Cache befindet, eine Kompressionssteuerung, um jede Cache-Zeile in der ersten Vielzahl von Cache-Zeilen mit einer entsprechenden Cache-Zeile in einer zweiten Vielzahl von Cache-Zeilen weiter zu komprimieren, um einen komprimierten Subblock zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist, und eine Ersetzungssteuerung, die kommunikativ mit einem Cache-Fehlerbehandler gekoppelt ist, eine Ersetzungssteuerung, um einen Partner-Subblock im speicherseitigen Cache durch eien komprimierten Subblock zu ersetzen, wenn ein komprimierter Subblock eine Größenbedingung erfüllt, wobei eine Größenbedingung ist, jede Cache-Zeile in einer dritten Vielzahl von Cache-Zeilen aufzunehmen, die eine Größe aufweist, die kleiner oder gleich der einem prozessorseitigen Cache zugeordneten Cache-Zeilengröße ist.
-
Beispiel 2 kann die Vorrichtung von Beispiel 1 beinhalten, wobei ein Opfer-Subblock als Partner-Subblock auszuwählen ist und eine Ersetzungssteuerung einen Opfer-Subblock durch einen Füll-Subblock ersetzen soll, wenn ein komprimierter Subblock eine Größenbedingung nicht erfüllt.
-
Beispiel 3 kann die Vorrichtung von Beispiel 1 beinhalten, wobei ein erster Subblock im speicherseitigen Cache, der bewirkt, dass ein Kompressionssubblock eine Größenbedingung erfüllt, als Partner-Subblock ausgewählt werden soll.
-
Beispiel 4 kann die Vorrichtung von Beispiel 1 beinhalten, wobei ein Subblock im speicherseitigen Cache, der bewirkt, dass ein Kompressions-Subblock möglichst wenig ungenutzten Platz zurücklässt, als Partner-Subblock ausgewählt werden soll.
-
Beispiel 5 umfasst ein speicherbasiertes Computersystem, das einen Prozessor mit einem prozessorseitigen Cache, einen mit dem Prozessor gekoppelten Bus und einen mit dem Bus gekoppelten Systemspeicher umfasst, wobei ein Systemspeicher einen Speicher, einen speicherseitigen Cache, der in eine Vielzahl von Blöcken organisiert werden soll, einen Cache-Fehlerbehandler zum Identifizieren eines ersten Blocks, wobei ein erster Block eine erste Vielzahl von Cacheleitungen beinhalten soll, einen Kompressionscontroller, der kommunikativ mit einem Cache-Fehlerbehandler gekoppelt ist, wobei ein Kompressionscontroller einen zweiten Block identifiziert, der eine zweite Vielzahl von Cacheleitungen aufweist und sich im speicherseitigen Cache befindet, eine Kompressionssteuerung, um jede Cache-Zeile in einer ersten Vielzahl von Cache-Zeilen mit einer entsprechenden Cache-Zeile in einer zweiten Vielzahl von Cache-Zeilen weiter zu komprimieren, um einen komprimierten Block zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist, und eine Ersetzungssteuerung, die kommunikativ mit einem Cache-Fehlerbehandler gekoppelt ist, wobei eine Ersetzungssteuerung einen zweiten Block in einem speicherseitigen Cache durch einen komprimierten Block ersetzt, wenn ein komprimierter Block eine Größenbedingung erfüllt.
-
Beispiel 6 kann das System von Beispiel 5 beinhalten, wobei eine Größenbedingung ist, jede Cache-Zeilen in einer dritten Vielzahl von Cache-Zeilen aufzunehmen, deren Größe kleiner oder gleich einer Cache-Zeilengröße ist, die dem prozessorseitigen Cache zugeordnet ist.
-
Beispiel 7 kann das System von Beispiel 5 beinhalten, wobei ein Opferblock als zweiter Block ausgewählt werden soll und eine Ersetzungssteuerung einen Opferblock durch einen ersten Block ersetzen soll, wenn ein komprimierter Block eine Größenbedingung nicht erfüllt.
-
Beispiel 8 kann das System von Beispiel 5 beinhalten, wobei ein erster Block im speicherseitigen Cache, der bewirkt, dass ein Kompressionsblock eine Größenbedingung erfüllt, als zweiter Block ausgewählt werden soll.
-
Beispiel 9 kann das System von Beispiel 5 beinhalten, wobei ein Block im speicherseitigen Cache, der bewirkt, dass ein Kompressionsblock, der am wenigsten ungenutzten Platz zurücklässt, als zweiter Block ausgewählt werden muss.
-
Beispiel 10 kann das System eines der Beispiele 5 bis 9 beinhalten, wobei ein Systemspeicher ferner einen Subblock-Manager aufweist, um einen ersten Block in Subblöcke zu teilen, die größer als eine Cache-Zeilengröße sind, die einem prozessorseitigen Cache zugeordnet ist, wobei ein zweiter Block auf Subblockbasis zu identifizieren ist.
-
Beispiel 11 kann das System eines der Beispiele 5 bis 9 beinhalten, wobei ein erster Block als Reaktion auf einen Cache-Fehler im speicherseitigen Cache zu identifizieren ist.
-
Beispiel 12 kann eine komprimierbare Speichervorrichtung beinhalten, die einen speicherseitigen Cache umfasst, der in eine Vielzahl von Blöcken organisiert werden soll, einen Cache-Fehlerbehandler zum Identifizieren eines ersten Blocks, wobei ein erster Block eine erste Vielzahl von Cacheleitungen beinhalten soll, einen Kompressionscontroller, der kommunikativ mit einem Cache-Fehlerbehandler gekoppelt ist, wobei ein Kompressionscontroller einen zweiten Block identifiziert, der eine zweite Vielzahl von Cache-Zeilen aufweist und sich im speicherseitigen Cache befindet, eine Kompressionssteuerung, um jede Cache-Zeile in einer ersten Vielzahl von Cache-Zeilen mit einer entsprechenden Cache-Zeile in einer zweiten Vielzahl von Cache-Zeilen weiter zu komprimieren, um einen komprimierten Block zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist, und eine Ersetzungssteuerung, die kommunikativ mit einem Cache-Fehlerbehandler gekoppelt ist, wobei eine Ersetzungssteuerung einen zweiten Block in einem speicherseitigen Cache durch einen komprimierten Block ersetzt, wenn ein komprimierte Block eine Größenbedingung erfüllt.
-
Beispiel 13 kann die Vorrichtung von Beispiel 12 beinhalten, wobei eine Größenbedingung ist, jede Cache-Zeile in einer dritten Vielzahl von Cache-Zeile aufzunehmen, die eine Größe aufweist, die kleiner oder gleich einer Cache-Zeilengröße ist, die einem prozessorseitigen Cache zugeordnet ist.
-
Beispiel 14 kann die Vorrichtung von Beispiel 12 beinhalten, wobei ein Opferblock als zweiter Block ausgewählt werden soll und eine Ersetzungssteuerung einen Opferblock durch einen ersten Block ersetzen soll, wenn ein komprimierter Block eine Größenbedingung nicht erfüllt.
-
Beispiel 15 kann die Vorrichtung von Beispiel 12 beinhalten, wobei ein erster Block im speicherseitigen Cache, der bewirkt, dass ein Kompressionsblock eine Größenbedingung erfüllt, als zweiter Block ausgewählt werden soll.
-
Beispiel 16 kann die Vorrichtung von Beispiel 12 beinhalten, wobei ein Block im speicherseitigen Cache, der bewirkt, dass ein Kompressionsblock, der am wenigsten ungenutzten Platz zurücklässt, als zweiter Block ausgewählt werden soll.
-
Beispiel 17 kann die Vorrichtung eines der Beispiele 12 bis 16 beinhalten, ferner einen Subblock-Manager, um einen ersten Block in Subblöcke zu teilen, die größer sind als eine Cache-Zeilengröße, die einem prozessorseitigen Cache zugeordnet ist, wobei ein zweiter Block auf Subblockbasis zu identifizieren ist.
-
Beispiel 18 kann die Vorrichtung eines der Beispiele 12 bis 16 beinhalten, wobei ein erster Block als Reaktion auf einen Cache-Fehler im speicherseitigen Cache zu identifizieren ist.
-
Beispiel 19 kann ein Verfahren zum Betreiben einer kompressionsfähigen Speichervorrichtung beinhalten, die ein Identifizieren eines ersten Blocks und eines zweiten Blocks umfasst, wobei ein erster Block eine erste Vielzahl von Cache-Zeilen aufweist, ein zweiter Block eine zweite Vielzahl von Cache-Zeilen aufweist und sich der zweite Block in einem speicherseitigen Cache befindet, wobei jede Cache-Zeile in der ersten Vielzahl von Cache-Zeilen mit einer entsprechenden Cache-Zeile in der zweiten Vielzahl von Cache-Zeilen komprimiert wird, um einen komprimierten Block zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist, und ein zweiter Block in dem speicherseitigen Cache durch einen komprimierten Block ersetzt wird, wenn der komprimierte Block eine Größenbedingung erfüllt.
-
Beispiel 20 kann das Verfahren des Beispiels 19 beinhalten, wobei eine Größenbedingung ist, dass jede Cache-Zeile aus einer dritten Vielzahl von Cache-Zeilen eine Größe aufweist, die kleiner oder gleich einer Cache-Zeilengröße ist, die einem prozessorseitigen Cache zugeordnet ist.
-
Beispiel 21 kann das Verfahren des Beispiels 19 beinhalten, wobei ein Opferblock als zweiter Block ausgewählt wird und ein Verfahren ferner ein Ersetzen des Opferblocks durch einen ersten Block aufweist, wenn ein komprimierter Block eine Größenbedingung nicht erfüllt.
-
Beispiel 22 kann das Verfahren von Beispiel 19 beinhalten, wobei ein erster Block im speicherseitigen Cache, der bewirkt, dass ein Kompressionsblock, der die Größenbedingung erfüllt, als zweiter Block ausgewählt wird.
-
Beispiel 23 kann das Verfahren des Beispiels 19 beinhalten, wobei ein Block im speicherseitigen Cache, der bewirkt, dass ein Kompressionsblock, der möglichst wenig ungenutzten Speicherplatz zurücklässt, als zweiter Block ausgewählt wird.
-
Beispiel 24 kann das Verfahren eines der Beispiele 19 bis 23 beinhalten, ferner ein Teilen eines ersten Blocks in Subblöcke, die größer als eine Cache-Zeilengröße sind, die einem prozessorseitigen Cache zugeordnet ist, wobei ein zweiter Block auf Subblockbasis identifiziert wird.
-
Beispiel 25 kann das Verfahren eines der Beispiele 19 bis 23 beinhalten, wobei ein erster Block als Reaktion auf einen Cache-Fehler im speicherseitigen Cache identifiziert wird.
-
Beispiel 26 kann eine kompressionsfähige Speichervorrichtung beinhalten, die Mittel zum Identifizieren eines ersten Blocks und eines zweiten Blocks, wobei ein erster Block eine erste Vielzahl von Cache-Zeilen beinhalten soll, ein zweiter Block eine zweite Vielzahl von Cache-Zeilen beinhalten soll und der zweite Block in einem speicherseitigen Cache liegen soll, Mittel zum Komprimieren jeder Cache-Zeile in einer ersten Vielzahl von Cache-Zeilen mit einer entsprechenden Cache-Zeile in einer zweiten Vielzahl von Cache-Zeilen, um einen komprimierten Block zu erhalten, der eine dritte Vielzahl von Cache-Zeilen aufweist, und Mittel zum Ersetzen eines zweiten Blocks in dem speicherseitigen Cache durch einen komprimierten Block, wenn ein komprimierter Block eine Größenbedingung erfüllt, umfasst
-
Beispiel 27 kann die Vorrichtung von Beispiel 26 beinhalten, wobei eine Größenbedingung ist, jede Cache-Zeile in einer dritten Vielzahl von Cache-Zeilen aufzunehmen, die eine Größe aufweist, die kleiner oder gleich einer Cache-Zeilengröße ist, die einem prozessorseitigen Cache zugeordnet ist.
-
Beispiel 28 kann die Vorrichtung von Beispiel 26 beinhalten, wobei der Opferblock als zweiter Block ausgewählt werden soll und eine Vorrichtung ferner Mittel zum Ersetzen des Opferblocks durch einen ersten Block aufweist,
-
Beispiel 29 kann die Vorrichtung von Beispiel 26 beinhalten, wobei ein erster Block im speicherseitigen Cache, der bewirkt, dass ein Kompressionsblock, der die Größenbedingung erfüllt, als zweiter Block ausgewählt werden soll.
-
Beispiel 30 kann die Vorrichtung von Beispiel 26 beinhalten, wobei ein Block im speicherseitigen Cache, der bewirkt, dass ein Kompressionsblock, der am wenigsten ungenutzten Platz lässt, als zweiter Block ausgewählt werden soll.
-
Beispiel 31 kann die Vorrichtung eines der Beispiele 26 bis 30 beinhalten, ferner Mittel zum Aufteilen eines ersten Blocks in Subblöcke, die größer sind als eine Cache-Zeilengröße, die einem prozessorseitigen Cache zugeordnet ist, wobei ein zweiter Block auf Subblockbasis zu identifizieren ist.
-
Beispiel 32 kann die Vorrichtung eines der Beispiele 26 bis 30 beinhalten, wobei ein erster Block als Reaktion auf einen Cache-Fehler im speicherseitigen Cache zu identifizieren ist.
-
Die hierin beschriebenen Techniken können daher die Cache-Kapazität erhöhen und den Zugriff auf den Weitbereichsspeicher reduzieren, was wiederum die Leistung verbessern und den Stromverbrauch senken kann. Darüber hinaus können Techniken die Dekompressionslatenz und den Overhead in kritischen Pfaden von CPU-Lesevorgängen reduzieren. Dementsprechend kann die Leistung weiter gesteigert werden. Darüber hinaus kann die speicherseitige Cache-Komprimierung die Systemkosten senken, indem sie den Aufbau kleinerer Caches ermöglicht und gleichzeitig die Lücke zu größeren Caches durch Kompression schließt. Die Techniken können auch auf verschiedene Block-/Cache-Zeilengranularitäten und Assoziativitäten erweitert werden.
-
Die Ausführungsformen sind für allen Arten von Halbleiterchips mit integrierter Schaltung („IC“) anwendbar. Beispiele für diese IC-Chips sind unter anderem Prozessoren, Controller, Chipsatzkomponenten, programmierbare Logik-Arrays (PLAs), Speicherchips, Netzwerkchips, Systems on Chip (SoCs), SSD/NAND-Controller-ASICs und dergleichen. Darüber hinaus werden in einigen der Zeichnungen Signalleitungen durch Zeilen dargestellt. Einige können unterschiedlich sein, um mehr konstituierende Signalpfade anzuzeigen, eine Nummernetikette zu haben, um eine Anzahl konstituierender Signalpfade anzuzeigen, und/oder Pfeile an einem oder mehreren Enden zu haben, um die Richtung des primären Informationsflusses anzuzeigen. Dies sollte jedoch nicht eingeschränkt ausgelegt werden. Vielmehr können solche zusätzlichen Details in Verbindung mit einer oder mehreren exemplarischen Ausführungsformen verwendet werden, um das Verständnis einer Schaltung zu erleichtern. Jede dargestellte Signalleitung, unabhängig davon, ob sie zusätzliche Informationen enthält oder nicht, kann tatsächlich ein oder mehrere Signale umfassen, die sich in mehrere Richtungen bewegen können, und kann mit jeder geeigneten Art von Signalschema implementiert werden, z.B. digitale oder analoge Leitungen, die mit differentiellen Paaren, Glasfaserleitungen und/oder single-ended Leitungen implementiert sind
-
Beispielgrößen/-Modelle/-Werte/-Bereiche können angegeben worden sein, obwohl die Ausführungsformen nicht auf dasselbe beschränkt sind. Da die Fertigungstechniken (z.B. die Photolithographie) im Laufe der Zeit reifen, wird erwartet, dass Vorrichtungen kleinerer Größe hergestellt werden können. Darüber hinaus können bekannte Strom-/Masseverbindungen zu IC-Chips und anderen Komponenten innerhalb der Abbildungen dargestellt werden, um die Darstellung und Diskussion zu vereinfachen und bestimmte Aspekte der Ausführungsformen nicht zu verdecken. Darüber hinaus können Anordnungen in Blockdiagrammform dargestellt werden, um unklare Ausführungsformen zu vermeiden, und auch angesichts der Tatsache, dass die Besonderheiten bei der Umsetzung solcher Blockdiagrammanordnungen stark von der Plattform abhängen, innerhalb derer die Ausführungsform implementiert werden soll, d. h., diese Besonderheiten sollten weitestgehend im Zuständigkeitsbereich eines Fachmanns liegen. Wenn spezifische Details (z.B. Schaltkreise) festgelegt sind, um exemplarische Ausführungsformen zu beschreiben, sollte einem Fachmann klar sein, dass Ausführungsformen ohne oder mit Variation dieser spezifischen Details geübt werden können. Die Beschreibung ist daher als veranschaulichend und nicht als einschränkend zu betrachten.
-
Der Begriff „gekoppelt“ kann hierin verwendet werden, um sich auf jede Art in direkter oder indirekter Beziehung auf die betreffenden Komponenten zu beziehen, und kann für elektrische, mechanische, flüssige, optische, elektromagnetische, elektromechanische oder andere Verbindungen stehen. Darüber hinaus dürfen die Begriffe „erste“, „zweite“ usw. hierin nur zur Erleichterung der Diskussion verwendet werden und haben, sofern nicht anders angegeben, keine besondere zeitliche oder chronologische Bedeutung.
-
Wie in dieser Anmeldung und in den Ansprüchen angewendet, kann eine Liste von Gegenständen, die durch den Begriff „einer oder mehrere von ihnen“ ergänzt werden, eine beliebige Kombination der aufgeführten Begriffe bedeuten. So können beispielsweise die Sätze „einer oder mehrere von A, B oder C“ A; B; C; C; A und B; A und C; A und C; B und C; oder A, B und C bedeuten.
-
Die Fachleute werden an der vorstehenden Beschreibung schätzen, dass die breiten Techniken der Ausführungsformen in einer Vielzahl von Formen umgesetzt werden können. Obwohl die Ausführungsformen im Zusammenhang mit bestimmten Beispielen davon beschrieben wurden, sollte der wahre Umfang der Ausführungsformen daher nicht so begrenzt sein, da dem Fachmann nach dem Studium der Zeichnungen, der Beschreibung und der folgenden Ansprüche andere Änderungen klar werden.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-
-
Zitierte Nicht-Patentliteratur
-
- Joint Electron Device Engineering Council (JEDEC) veröffentlichten Normen entsprechen, wie z.B. JESD218, JESD219, JESD220-1, JESD223B, JESD223-1 [0032]