-
Hintergrund der Erfindung
-
Die vorliegende Erfindung betrifft eine Cache-Logik zur Erzeugung einer Cache-Adresse, ein Cache-Speichersystem, sowie ein Verfahren zur Erzeugung einer Cache-Adresse.
-
Cache-Speicher werden weit zur Verbesserung der Leistung von Datenverarbeitungssystemen durch Reduktion der Latenzzeit verwendet, die mit Speicherzugriffen verbunden ist. Dies wird allgemein durch Cache-Speicherung einiger vorhergehend zugegriffener Daten (d. h. derjenigen Daten, auf die die jüngsten Zugriffe erfolgten) in einem Cache-Speicher erreicht, auf welche mit einer kürzeren Latenzzeit zugegriffen werden kann, als auf den Hauptspeicher, in dem die Daten gespeichert werden. Um sicherzustellen, dass die gecachten Daten ohne weiteres aus dem Cache-Speicher gelesen werden können, müssen die gecachten Daten nach einem definierten Schema organisiert werden.
-
Typischerweise werden die zu cachenden Daten an einer Quelle vorgehalten, die durch eine Adresse identifiziert wird, wie etwa eine Speicheradresse oder eine Hardware-Quelladresse in einem Rechensystem. Der Zugriff auf solche Quelladressen kann bestimmten festen Mustern folgen (wie etwa Zugriffe auf aufeinanderfolgende Speicherblöcke), und es muss daher sichergestellt werden, dass Daten, die entsprechend aufeinander bezogene (d. h. aufeinanderfolgende) Speicheradressen repräsentieren, gut über den Cache-Speicher verteilt sind, um pathologische Zugriffsfälle zu vermeiden. Eine Folge von Adressen, die alle auf wenige Cache-Zeilen abgebildet werden, ist ein Beispiel für einen solchen pathologischen Zugriffsfall, bei dem wiederholt auf die gleichen wenigen Cache-Zeilen zugegriffen wird, was zu einer signifikanten Anzahl von Cache-Zeilen-Ersetzungen und einer schlechten Trefferrate führt, wenn Daten aus dem Cache bezogen werden. Ein solches Verhalten beeinträchtigt schwerwiegend die Leistung eines solchen Cache-Speichers.
-
Es wurden gemäß dem Stand der Technik verschiedene Mechanismen zur Verbesserung der Verteilung von Daten über einen Cache und zur Maximierung der Cache-Trefferrate für eine vorgegebene Cache-Größe vorgeschlagen. Diese Mechanismen können Hash-Funktionen zur Einfügung einer pseudo-zufälligen Verteilung in die Verteilung von Daten auf Cache-Adressen verwenden. Beispielsweise ist von M. Schlansker et al. die Verwendung einer Hash-Funktion zur zufälligen Anordnung der Platzierung von Daten in einem Cache in ihrer Veröffentlichung „Randomization and Associativity in the Design of Placement-Insensitive Caches", Computer Systems Laboratory, HPL-93-41, Juni 1993 beschrieben. Jedoch ist die Verwendung solch komplexer Hash-Funktionen im Allgemeinen hinsichtlich der Silizium-Fläche und Latenzzeit zur Umsetzung in dem kritischen Pfad in einem Hochgeschwindigkeits-Cache-Speichersystem zu teuer.
-
Weitere Mechanismen zur Verbesserung der Cache-Leistung durch Vermeidung von Cache-Zugriffskollisionen (die zum Beispiel dann auftreten können, wenn auf gecachte Daten nicht zugegriffen werden kann, weil eine weitere Cache-Auslesung in der gleichen Cache-Zeile durchgeführt wird) umfassen die Verwendung einer schrägen Cache-Architektur. Solche Architekturen werden beschrieben in
„A case for two-way skewed-associative Caches", A. Seznec, Proceedings of the 20th international Symposium on Computer Architecture, San Diego, Mai 1993, und in
"Trade-offs for Skewed-Associative Caches", H. Vandierendonck und K. De Bosschere (eine Veröffentlichung der Fakultät für Elektronik und Informationssysteme, Universität Gent). Schräge Architekturen erfordern viele Cache-Bänke, da der Mechanismus niedrige Verfehlungsraten durch eine Zwischenbankverteilung der Cache-Adressen erreicht. Wie jedoch in der Veröffentlichung von Vandierendonck festgestellt wird, wird die beste Leistung durch Kombination einer schrägen Architektur mit Hash-Funktionen zur Einführung eines zufälligen Charakters in die Verteilung von Daten im Cache erreicht. Auch hier sind die Hash-Funktionen komplex und im Allgemeinen zu teuer, um sie in den kritischen Pfad eines Hochgeschwindigkeits-Cache-Speichersystems zu implementieren.
-
Zusammenfassung der Erfindung
-
Gemäß einem ersten Aspekt der vorliegenden Erfindung wird eine Cache-Logik zur Erzeugung einer Cache-Adresse aus einer binären Eingangsspeicheradresse angegeben, die eine erste binäre Zeichenkette umfasst, welche eine erste Folge von Bits einer ersten vorbestimmten Länge ist, sowie eine zweite binäre Zeichenkette, welche eine zweite Folge von Bits einer zweiten vorbestimmten Länge ist, wobei die Cache-Logik umfasst:
eine Hash-Engine, die ausgebildet ist zur Erzeugung einer dritten binären Zeichenkette aus der ersten binären Zeichenkette, wobei die dritte binäre Zeichenkette die zweite vorbestimmte Länge aufweist, wobei die Hash-Engine dazu ausgebildet ist, jedes Bit der dritten binären Zeichenkette durch Kombination eines jeweiligen Untersatzes von Bits der ersten binären Zeichenkette durch eine erste bitweise Operation zu bilden, wobei die Untersätze von Bits der ersten binären Zeichenkette an der Hash-Engine so definiert werden, dass jeder Untersatz einzigartig ist und im Durchschnitt etwa die Hälfte der Bits der ersten binären Zeichenkette umfasst; und
eine Kombinationseinheit zur Kombination der dritten binären Zeichenkette mit der zweiten binären Zeichenkette mittels einer umkehrbaren Operation, derart, dass eine binäre Ausgangszeichenkette zur Verwendung in zumindest einem Teil einer Cache-Adresse in einem Cache-Speicher gebildet wird.
-
Die Untersätze von Bits der ersten binären Zeichenkette können in der Hardware der Hash-Engine durch Datenpfade zwischen Bits der ersten und dritten binären Zeichenkette definiert werden, wobei jeder Datenpfad dazu vorgesehen ist, ein Bit der ersten binären Zeichenkette zur Kombination mit weiteren Bits der ersten binären Zeichenkette des gleichen Untersatzes vorzusehen, derart, dass das entsprechende Bit der dritten binären Zeichenkette gebildet wird.
-
Diese Datenpfade können körperliche Verbindungen der Hash-Engine sein. Die Hash-Engine kann eine Mehrzahl von Sätzen bitweiser Operatoren umfassen, die jeweils zur Bildung eines Bits der dritten binären Zeichenkette aus dem entsprechenden Untersatz von Bits der ersten binären Zeichenkette angeordnet sind.
-
Die binäre Ausgangszeichenkette kann zur Identifikation einer Cache-Zeile in einer Cache-Speicherbank dienen.
-
Die erste binäre Zeichenkette kann eine vorbestimmte Abfolge der signifikantesten Bits der binären Eingangsspeicheradresse sein.
-
Die zweite binäre Zeichenkette kann eine vorbestimmte Abfolge weniger signifikanter Bits der binären Eingangsadresse sein.
-
Die binäre Eingangsspeicheradresse kann eine feste Länge aufweisen, und die ersten und zweiten binären Zeichenketten können benachbarte Abfolgen von Bits in der binaren Eingangsspeicheradresse sein.
-
Die Cache-Logik kann ferner eine Bankauswahleinheit umfassen, die vorgesehen ist zur Kombination von einem oder mehreren Bits, die von der binären Ausgangszeichenkette geleitet sind, mit einer gleichen Anzahl von Bits der binären Eingangsspeicheradresse, mittels einer zweiten bitweisen Operation, zur Erzeugung eines Bankidentifizierers zur Identifizierung einer Bank in einem Cache-Speicher mit einer Mehrzahl von Cache-Bänken.
-
Der Bankidentifizierer kann die gleiche Länge aufweisen wie die Anzahl von Bits, die von der binären Ausgangszeichenkette abgeleitet sind.
-
Die ein oder mehreren Bits der binären Eingangszeichenkette können weniger signifikante Bits sein als die Bits der zweiten binären Zeichenkette.
-
Die ein oder mehreren Bits der binären Eingangszeichenkette können benachbart zu der zweiten binären Zeichenkette in der binären Eingangszeichenkette sein.
-
Die Cache-Logik kann ferner eine Bank-Verwürfelungseinheit umfassen, mit einem Bit-Register zur Speicherung einer vorbestimmten binären Zeichenkette, wobei die Bank-Verwürfelungseinheit (scramble unit) dazu vorgesehen ist, auf den ein oder mehreren Bits der binären Ausgangszeichenkette zu operieren, durch Verwendung einer Folge von ein oder mehreren Bits aus der binären Ausgangszeichenkette als Aufsuchtabelle in dem Bit-Register, zur Auswahl einer vorbestimmten Anzahl von Bits aus der gespeicherten vorbestimmten binären Zeichenkette zur Verwendung als das eine oder mehrere Bits, die von der binären Ausgangszeichenkette in der Bank-Auswahleinheit abgeleitet worden sind, wobei die vorbestimmte binäre Zeichenkette die Eigenschaft aufweist, dass der Wert der ausgewählten Bits im wesentlichen die gleiche Wahrscheinlichkeit aufweist, einen beliebigen der möglichen Werte anzunehmen.
-
Die vorbestimmte binäre Zeichenkette kann eine pseudo-zufällige binäre Zeichenkette sein.
-
Die vorbestimmte binäre Zeichenkette kann 2N Bits lang sein, und die vorbestimmte Folge von Bits aus der binären Ausgangszeichenfolge kann aus den N am wenigsten signifikanten Bits der binären Ausgangszeichenkette bestehen, wobei die Bank-Verwürfelungseinheit dazu ausgebildet ist, die N am wenigsten signifikanten Bits der binären Ausgangszeichenkette als eine Bit-Adresse in der vorbestimmten binären Zeichenkette zu verwenden, aus der die vorbestimmte Anzahl von Bits aus der gespeicherten vorbestimmten binären Zeichenkette auszulesen ist.
-
Das Bit-Register kann programmierbar sein, und die Bank-Verwürfelungseinheit kann dazu betrieben werden, dass eine pseudo-zufällig erzeugte binäre Zeichenkette in das Bit-Register zur Verwendung als vorbestimmte binäre Zeichenkette geschrieben wird.
-
Die erste bitweise Operation und die umkehrbare Operation können beide XOR-Operationen sein.
-
Die zweite bitweise Operation kann eine XOR-Operation sein.
-
Gemäß einem zweiten Aspekt der vorliegenden Erfindung kann ein Cache-Speichersystem angegeben werden, umfassend:
eine Cache-Logik gemäß dem ersten Aspekt der vorliegenden Erfindung, mit den oben genannten Merkmalen; und
einen Cache-Speicher mit einer Mehrzahl von Cache-Bänken;
wobei das Cache-Speichersystem dazu ausgebildet ist, an der Cache-Zeile, die durch die binäre Ausgangszeichenkette der Cache-Bank bezeichnet wird, welche durch den Bankidentifizierer bezeichnet wird, zumindest die erste binäre Zeichenkette und Daten zum cachen zu speichern, welche die binäre Eingangsspeicheradresse haben.
-
Jede Cache-Bank kann 2S Zeilen aufweisen, wobei S die Anzahl von Bits in jeder der ersten und dritten binären Zeichenketten ist.
-
Die binäre Eingangsspeicheradresse kann eine vierte binäre Zeichenkette der W am wenigsten signifikanten Bits der binären Eingangsspeicheradresse umfassen, wobei die vierte binäre Zeichenkette nicht die erste binäre Zeichenkette, die zweite binäre Zeichenkette oder die Bits umfasst, die aus der binären Ausgangszeichenkette zur Verwendung an der Bankauswahleinheit abgeleitet werden, und jede Cache-Zeile des Cache-Speichers hat eine Breite von zumindest 2W Bytes plus die Länge der Breite der ersten binären Zeichenkette.
-
Gemäß einem dritten Aspekt der vorliegenden Erfindung wird ein Verfahren zur Erzeugung einer Cache-Adresse aus einer binären Eingangsspeicheradresse angegeben, welche eine erste binäre Zeichenkette umfasst, die eine erste Abfolge von Bits einer ersten vorbestimmten Länge ist, und eine zweite binäre Zeichenkette umfasst, welche eine zweite Abfolge von Bits einer zweiten vorbestimmten Länge ist, wobei das Verfahren umfasst:
Empfangen einer ersten binären Zeichenkette der Eingangsspeicheradresse;
Erzeugen einer dritten binären Zeichenkette aus der ersten binären Zeichenkette, welche dritte binäre Zeichenkette die zweite vorbestimmte Länge aufweist, wobei jedes Bit der dritten binären Zeichenkette gebildet wird durch Kombination eines jeweiligen Untersatzes von Bits der ersten binären Zeichenkette durch eine erste bitweise Operation, wobei die Untersätze von Bits der ersten binären Zeichenkette derart definiert sind, dass jeder Untersatz einzigartig ist und im Durchschnitt etwa die Hälfte der Bits der ersten binären Zeichenkette umfasst; und
Kombination der dritten binären Zeichenkette mit der zweiten binären Zeichenkette durch eine umkehrbare Operation, zur Bildung einer binären Ausgangszeichenkette zur Verwendung als zumindest ein Teil einer Cache-Adresse in einem Cache-Speicher.
-
Maschinenlesbarer Code kann zur Erzeugung der Cache-Logik verwendet werden. Ein maschinenlesbares Speichermedium, auf dem ein nicht flüchtiger maschinenlesbarer Code gespeichert ist, kann zur Erzeugung der Cache-Logik vorgesehen sein.
-
Beschreibung der Zeichnungen
-
Im vorliegenden wird die vorliegende Erfindung beispielhaft mit Bezug auf die folgenden beigefügten Zeichnungen beschrieben.
-
1 ist eine schematische Darstellung eines Cache-Speichersystems.
-
2 ist eine schematische Darstellung einer Bank-Verwürfelungseinheit.
-
3 ist ein Flussdiagramm zur Darstellung eines Verfahrens zur Erzeugung einer Cache-Adresse.
-
4 ist eine schematische Darstellung einer verdrahteten Hash-Engine gemäß einem Ausführungsführungsbeispiel.
-
Kurzbeschreibung der Zeichnungen
-
Die folgende Beschreibung dient dazu, einem Fachmann die Erstellung und Benutzung der Erfindung zu ermöglichen und erfolgt im Zusammenhang mit einer besonderen Anwendung. Für den Fachmann ist es offensichtlich, dass in den dargestellten Ausführungsformen verschiedene Abwandlungen vorgenommen werden können.
-
Die hierin dargestellten allgemeinen Prinzipien können auf andere Ausführungsformen und Anwendungen übertragen werden, ohne dass vom Umfang und vom Gehalt der vorliegenden Erfindung abgewichen wird. Somit ist die vorliegende Erfindung nicht auf die dargestellten Ausführungsformen beschränkt, sondern soll den weitesten Umfang haben, der mit den darin offenbarten Prinzipien und Merkmalen vereinbar ist.
-
Hierin wird eine Cache-Logik für ein Hochgeschwindigkeits-Cache-Speichersystem beschrieben, die die Vorteile konventioneller Hash-Funktionen aufweist, ohne dass eine übermäßige Komplexität und Verzögerung eingeführt wird. Die Cache-Logik für ein Cache-System kann jede Art von Daten behandeln, einschließlich Quelladressen (wie etwa Speicher- und Hardware-Adressen), Prozessorbefehlen und Daten aus einem Speicher.
-
Ein schematisches Diagramm eines Cache-Speichersystems ist in 1 dargestellt. Die Cache-Logik 100 ist dazu vorgesehen, eine Cache-Adresse für einen Cache-Speicher 110 (typischerweise nicht Teil der Cache-Logik) zu bestimmen, an der Eingangsdaten 114 mit einer binären Eingangsspeicheradresse 101 gecacht werden oder aus der gecachte Daten gelesen werden. Gemäß der vorliegenden Erfindung muss lediglich ein Teil der Eingangsspeicheradresse 101 im Cache-Speicher gespeichert werden, da Teile der Eingangsspeicheradresse aus dem Ort der Daten im Cache-Speicher abgeleitet werden können. Der Cache-Speicher 110 kann jede geeignete Speicherarchitektur aufweisen: beispielsweise kann es sich um einen direkt kartierten Cache-Speicher oder um einen N-fach assoziativen Cache-Speicher handeln. Ein Beispiel für ein Verfahren, das von der Cache-Logik durchgeführt wird, ist im Flussdiagramm in 3 dargestellt und wird im Folgenden beschrieben.
-
Die Cache-Logik 100 umfasst eine Hash-Engine 106 und eine Kombinationseinheit 107 zur Bestimmung einer Cache-Zeile-Adresse aus der Eingangsadresse 101. In dem in 1 dargestellten Beispiel umfasst der Cache-Speicher 110 zwei Cache-Bänke (111 und 112) und eine Bankauswahleinheit 109 ist in der Cache-Logik 100 zur Auswahl einer Cache-Bank vorgesehen. Eine Bank-Verwürfelungseinheit 108 kann optional vorgesehen sein, um die Leistung der Cache-Logik weiter zu verbessern. Der Betrieb der Cache-Logik wird im Folgenden anhand von 1 beschrieben.
-
Die Cache-Logik 100 ist dazu ausgebildet, eine Cache-Adresse aus der Eingangsspeicheradresse 101 zu ermitteln, die sie empfängt (Schritt 301 in 3). Die Speicheradresse 101 hat typischerweise eine feste Länge. Im Allgemeinen kann die Eingangsspeicheradresse 101 jede Art von binärer Zeichenkette sein. Im dargestellten Ausführungsbeispiel ist die Eingangsspeicheradresse 101 eine Quelladresse, die als binäre Zeichenkette ausgedrückt wird.
-
Im in 1 dargestellten Beispiel umfasst die Speicheradresse 101 vier Abfolgen von Bits: (i) T Tag-Bits 102, (ii) S Set-Bits 103, (iii) B Bank-Bits 104, und (iv) W Word-Bits 105. Somit hat die Speicheradresse 101 eine Länge T + S + B + W Bits. Tag-Bits T sind die signifikantesten Bits, und Word-Bits sind die am wenigsten signifikanten Bits der Speicheradresse 101.
-
Gewöhnlich ist der Cache-Speicher 110 kleiner als der Hauptspeicher, auf welchen sich die Speicheradresse 101 bezieht, und Daten in einer bestimmten Cache-Zeile können Daten entsprechen, die an einer Mehrzahl unterschiedlicher Speicheradressen im Hauptspeicher gespeichert werden. In einem typischen Cache-System sind die Set- und Bank-Bits der Speicheradresse 101 für eine Datenzeile diejenigen Bits, die vom Ort des Cache-Speichers 110 abgeleitet werden können, an welchem die Daten gespeichert werden (oder gespeichert werden sollen). Die Tag-Bits der Speicheradresse 101 sind diejenigen Bits, die nicht aus dem Ort in den Cache-Speicher 110 abgeleitet werden können. Die Tag-Bits unterscheiden zwischen den Speicheradressen, die der gleichen Tag-Zeile entsprechen. Daher sind die Tag-Bits in dem Cache-Speicher 110 gespeichert, doch die Set- und die Bank-Bits müssen dies nicht sein, und sind auch nicht im Cache-Speicher 110 gespeichert, wenn Daten im Cache-Speicher 110 gespeichert werden. Die Wort-Bits bezeichnen einen Datenort im Hauptspeicher mit einer größeren Auflösung als eine Cache-Zeile, und da Daten im Cache-Speicher 110 in Einheiten von Cache-Zeilen gespeichert werden, müssen die Wort-Bits nicht im Cache-Speicher 110 gespeichert werden.
-
Im in 1 dargestellten Beispiel existieren zwei Cache-Bänke 111 und 112 derart, dass ein Bank-Bit ausreichend zur Identifizierung der Cache-Bänke ist, so dass in diesem Beispiel B = 1 ist. In anderen Beispielen kann jedoch eine andere Anzahl von Bänken im Cache-Speicher vorhanden sein, und gewöhnlich ist die Anzahl von Bänken im Cache-Speicher eine Potenz von 2, wie etwa 2, 4, 8 usw. In diesen weiteren Beispielen mag B nicht gleich 1 sein, und stattdessen könnte ein Anzahl von Bank-Bits (B) stehen, welche ausreichend zur Identifizierung einer Bank im Cache-Speicher entsprechend der Anzahl von Bänken im Cache-Speicher ist. Die Cache-Zeilen in dem Cache-Speicher 110 im Bespiel sind 2W-Bytes + T Bits breit, so dass die Tag-Bits 102 mit den Daten in den Cache-Leitungen gespeichert werden, doch in anderen Beispielen müssen die Tag-Bits 102 nicht notwendigerweise benachbart zu den Daten-Bits in den Cache-Leitungen gespeichert werden, da es von Nutzen sein kann, ein schnelleren Zugriff auf die Tag-Bits zu erlauben (zum Beispiel um zu bestimmen, ob der Cache augenblicklich einen bestimmten Datensatz speichert, d. h., um zu bestimmen, ob ein Cache-Treffer oder ein Cache-Fehlzugriff vorliegt), und als solche können die Tag-Bits 102 in Silizium in dem Cache-Speicher 110 gespeichert sein, was einen schnelleren Zugriff zulässt als das Silizium, auf welchem die Daten selbst in dem Cache-Speicher 110 gespeichert sind. Allgemein gesagt, kann der Cache-Speicher 110 ein N-fachgesetzter assoziativer Cache sein, und in diesem Fall kann jede Cache-Zeile 2 W × N-Bytes + TN-Bits breit sein, falls angemessen.
-
Eine Hash-Engine 106 ist dazu vorgesehen, auf den Tag-Bits 102 aus der binären Eingangsspeicheradresse 101 zu operieren, um eine binäre Zeichenkette 116 zu erzeugen (Schritt 302 in 3), welche die gleiche Länge aufweist, wie die kürzere Abfolge von S-Bits 103 aus der binären Eingangsspeicheradresse 101. Somit ist T > S. Indem man vorsieht, dass die Ausgabe der Hash-Engine 106 die gleiche Länge wie die Folge von S-Bits 103 aufweist, kann die Kombinationseinheit 107 dazu konfiguriert sein, die Ausgabe der Hash-Engine und die S-Bits-Folge durch eine einfache bitweise Operation zu kombinieren.
-
Die Folge von T-Bits ist vorzugsweise gleich den T signifikantesten Bits der binären Eingangsspeicheradresse 101, und die Folge von S-Bits ist vorzugsweise eine Folge von weniger signifikanten Bits. Im Beispiel in 1 ist die „Set”-Bit-Folge 103 benachbart zur „Tag”-Bit-Folge 102, in der binären Eingangsspeicheradresse 101. Die Tag-Bits sind typischerweise mit den Eingangsdaten im Cache-Speicher gespeichert.
-
Die Hash-Engine 106 wendet im Wesentlichen eine Hash-Funktion auf die binäre Zeichenkette 102 an, um die Cache-Adressen besser über die Zeilen des Cache-Speichers verteilen zu können und um die Reduktion der Länge der Zeichenkette von T- auf S-Bits zu erreichen. Der Sinn der Verwendung der Hash-Engine ist die Reduktion der Wahrscheinlichkeit regelmäßiger Muster von Adressen, was zu einer ungleichmäßigen Verwendung der Cache-Zeilen führt. Dies wird in den dargestellten Ausführungsbeispielen dadurch erreicht, dass jedes Ausgangsbits der binären Zeichenkette 116 aus einem vorbestimmten und einzigartigen Untersatz von Eingangs-„Tag”-Bits 102 gebildet wird. Mit anderen Worten, die Hash-Engine 106 ist dazu vorgesehen (d. h. verdrahtet), dass jedes Eingangs-„Tag”-Bit für eine Anordnung bitweiser Operatoren der Hash-Engine vorgesehen ist, welche gemeinsam dazu konfiguriert sind, die Ausgangs-Bits der binären Zeichenkette 116 zu bilden. Die bitweisen Operatoren sind vorzugsweise bitweise XORs, da XOR-Operationen sehr einfach in Hardware zu implementieren sind.
-
Die Hash-Engine 106 ist dazu vorgesehen, dass jedes Ausgangs-Bit der binären Zeichenkette 116 einen Beitrag von etwa der Hälfte der Bits der ersten binären Zeichenkette 102 empfängt (d. h. etwa die Hälfte der Bits der ersten binären Zeichenkette 102 ist für jeden bitweisen Operator vorgesehen). Dies stellt sicher, dass die Hash-Engine 106 im Wesentlichen die Eigenschaft guter kryptographischer Hash-Funktionen darstellt, nämlich dass falls sich ein Eingangs-Bit ändert, kann man im Durchschnitt erwarten, dass sich die Hälfte der Ausgangs-Bits 116 ändert. Falls sich ferner ein anderes der Eingangs-Bits ändert, kann man im Durchschnitt erwarten, dass sich andere Bits der Ausgangs-Bits 116 ändern, doch man kann immer noch erwarten, dass sich etwa die Hälfte die Ausgangs-Bits 116 ändert. In den hier dargestellten Beispielen erreichen wir das Merkmal durch vorbestimmte bitweise Kombinationen von Eingangs-Bits, ohne die komplexe Verarbeitung und Verzögerung, die typischerweise durch derartige kryptographische Hash-Funktionen eingeführt werden. Das allgemeine Ziel ist, dass sich bei jeder beliebigen Änderung der Eingangs-Bits 102 (ungeachtet dessen, wie viele Eingangs-Bits 102 sich ändern), im Durchschnitt die Hälfte der Ausgangs-Bits 116 ändern, und dass sich für andere Änderungen der Ausgangs-Bits 102 andere der Ausgangs-Bits 116 ändern. Dieses allgemeine Ziel mag nicht vollständig erreichbar sein, doch die hier dargestellten Beispiele beabsichtigen eine gute Annäherung an dieses Ziel.
-
Für vorgegeben Längen der „Tag”- und „Set”-Bit-Folgen existieren im allgemeinen viele mögliche Kombinationen von Bits in einer ersten binären Zeichenkette 102, welche den oben genannten Erfordernissen genügen und die Vorteile der hierin beschriebenen Ausführungsbeispiele bieten. Zwei Beispiele illustrieren ein Verfahren, bei welchem die Sätze von Verbindungen zwischen den Eingangs- und Ausgangs-Bits der Hash Engine bestimmt werden können, und diese werden im Folgenden beschrieben.
-
In dem Design-Prozess wird für jedes Bit der Eingangs-Bits 102 ein entsprechender Satz von Bits der Ausgangs-Bits 116 identifiziert, um anzugeben, welche Bits der Ausgangs-Bits 116 sich ändern werden, wenn sich das entsprechende Eingangs-Bit ändert. Falls möglich, umfasst jeder der Sätze der Ausgangs-Bits etwa die Hälfte der Ausgangs-Bits, da sich auf diese Weise, wenn sich das entsprechende Eingangs-Bit ändert, etwa die Hälfte der Ausgangs-Bits ändern wird. Falls möglich, unterscheiden sich ferner die Sätze von Ausgangs-Bits vorzugsweise, so dass eine Veränderung von jedem der Eingangs-Bits einen unterschiedlichen Effekt auf die Ausgangs-Bits hat. Falls also T-Eingangsbits existieren, werden dann T-Sätze der S-Ausgangsbits bestimmt. Falls bevorzugt wird, dass jeder Satz von Ausgangs-Bits etwa die Hälfte der Ausgangs-Bits umfasst, können dann anfänglich S über S/2 (d. h. C S / S/2) unterschiedliche Sätze bestimmt werden. Falls dies nicht genug Sätze erzeugt, dann können andere zusätzliche Kombinationen der Ausgangs-Bits verwendet werden, wie unten genauer beschrieben wird. Das vorstehend genannte Verfahren beschreibt, wie die Sätze von Ausgangs-Bits für die jeweiligen Eingangs-Bits bestimmt werden.
-
In einem ersten Beispiel wird die Situation betrachtet, in der die Länge T von Tag-Bits 102 = 28 Bits beträgt, und die Länge S von Z-Bits 103 = 5 Bits beträgt (was somit die gewünschte Länge der Ausgabe der Hash-Engine 106 ist). Zunächst wird die Anzahl der mathematischen Kombinationen der Länge [S/2] aus einem Satz der Länge S berechnet – d. h. in diesem Fall 5 über 2, da [5/2] = [2,5] = 2. Dies schafft 10 Sätze von Ausgangs-Bits, so dass weitere 18 Sätze noch benötigt werden, um auf 28 Sätze von Ausgangs-Bits zu kommen. Die nächstbesten Sätze zur Erreichung des Ziels der Veränderung der Hälfte der Ausgangs-Bits, wenn sich eines der Eingangs-Bits ändert, wird in diesem Fall gegeben durch 5 über 3. Dies schafft ebenfalls 10 Sätze von Ausgangs-Bits, was bedeutet, dass immer noch 8 an den 28 (d. h. T) Kombinationen fehlen. Somit addieren wir die nächsten Sätze, die durch 5 über 1 gegeben werden. Dies schafft 5 Sätze von Ausgangs-Bits, was bedeutet, dass noch 3 Sätze benötigt werden, um auf 28 Sätze von Eingangs-Bits zu kommen. Somit addieren wir einige der nächsten Sätze, gegeben durch 5 über 4. Dies schafft 5 Sätze von Ausgangs-Bits aus den 3, welche ausgewählt werden können, um somit die 28 Sätze von Ausgangs-Bits zu schaffen.
-
Die drei ausgewählten Sätze können ausgewählt werden durch Entnahme einer Streuprobe der möglichen Sätze, die aus der 5 über 4 Operation resultieren. Beispielsweise können wir die ersten, zweiten und vierten der 5-4-Bit-Sätze beibehalten. Die allgemeinen Prinzipien zur Bestimmung der Sätze von Ausgangs-Bits in weiteren Beispielen werden weiter unten genauer beschrieben. Wenn einmal T geeignete Sätze von Ausgangs-Bits bestimmt worden sind, können sie einem jeweiligen der T-Eingangs-Bits zugeordnet werden. Die oben genannte Liste ist ein Beispiel, welches einen jeweiligen Satz von Bits aus den 5 Ausgangs-Bits („OUT”) bezeichnet, der mit jedem der jeweiligen 28 Eingangs-Bits („IN”) assoziiert ist. Mit anderen Beispielen können die T-Sätze von Ausgangs-Bits anderen Eingangs-Bits zugeordnet sein. Beispielsweise kann die Reihenfolge der T-Eingangs-Bits in der unten stehenden Liste verwürfelt sein (d. h. willkürlich angeordnet, um eine systematische Verstärkung zu vermeiden, durch welche die Sätze von Ausgangs-Bits mit den Eingangs-Bits zugeordnet werden.
IN: OUT
0: 3 4
1: 2 4
2: 1 4
3: 0 4
4: 2 3
5: 1 3
6: 0 3
7: 1 2
8: 0 2
9: 0 1
10: 2 3 4
11: 1 3 4
12: 0 3 4
13: 1 2 4
14: 0 2 4
15: 0 1 4
16: 1 2 3
17: 0 2 3
18: 0 1 3
19: 0 1 2
20: 4
21: 3
22: 2
23: 1
24: 0
25: 0 1 2 3
26: 0 1 3 4
27: 0 2 3 4
-
Dieses Verfahren ermöglicht es uns, bereits einen geeigneten Satz von Eingangs- zu Ausgangs-Verbindungen für die Hash-Engine zu bestimmen. Die oben stehende Liste kann dazu verwendet werden, um zu identifizieren, welche Ausgangs-Bits einen Beitrag von welchen Eingangs-Bits erhalten. D. h. für jedes Ausgang-Bit kann ein Satz von Eingangs-Bits identifiziert werden, um das Ausgangs-Bit zu bestimmen. Jeder Satz von Eingangs-Bits wird in der Hash-Engine 106 durch eine bitweise Operation kombiniert, d. h. in diesem Beispiel eine XOR-Operation. Die 5 Ausgangs-Bits der binären Zeichenkette 116 sind somit:
Out[0] = In[3] XOR In[6] XOR In[8] XOR In[9] XOR In[12] XOR In[14] XOR In[15] XOR In[17] XOR In[18] XOR In[19] XOR In[24] XOR In[25] XOR In[26] XOR In[27];
Out[1] = In[2] XOR In[5] XOR In[7] XOR In[9] XOR In[11] XOR In[13] XOR In[15] XOR In[16] XOR In[18] XOR In[19] XOR In[23] XOR In[25] XOR In[26] XOR In[27];
Out[2] = In[1] XOR In[4] XOR In[7] XOR In[8] XOR In[10] XOR In[13] XOR In[14] XOR In[16] XOR In[17] XOR In[19] XOR In[22] XOR In[25] XOR In[26] XOR In[27];
Out[3] = In[0] XOR In[4] XOR In[5] XOR In[6] XOR In[10] XOR In[11] XOR In[12] XOR In[16] XOR In[17] XOR In[18] XOR In[21] XOR In[25] XOR In[26] XOR In[27];
Out[4] = In[0] XOR In[1] XOR In[2] XOR In[3] XOR In[10] XOR In[11] XOR In[12] XOR In[13] XOR In[14] XOR In[15] XOR In[20] XOR In[25] XOR In[26] XOR In[27].
-
In der oben genannten Liste von Ausgaben bezeichnet beispielsweise „In[11]” das Eingangs-Bit an einer Position 11 in Tag 102, und „OUT[3]” bezeichnet das Ausgangs-Bit in Position 3 in Ausgang 116, und so fort.
-
In einem zweiten Beispiel betrachten wir die Situation in der die Länge T der Tag-Bits 102 = 31 Bits beträgt, und die Länge S der Set-Bits 103 = 7 Bits beträgt (welches nun die gewünschte Länge der Ausgabe der Hash-Engine 106 ist). Zunächst wird zur Bestimmung der Sätze von Ausgangs-Bits, welche mit den jeweiligen Eingangs-Bits assoziiert werden, die Anzahl der mathematischen Kombinationen der Länge [S/2] aus einem Satz der Länge S berechnet – d. h. in diesem Fall sind dies 7 über 3, was 35 Kombinationen ergibt. Da wir zu viele Kombinationen erhalten, werden wir eine Streuprobe aus der Liste der möglichen Sätze von Ausgangs-Bits entnehmen – man kann beispielsweise die Sätze an Position 4 verwerfen (welche Ausgangs-Bits 056 enthalten würden), 13 (welche Ausgangs-Bits 026 enthalten würden), 22 (welche Ausgangs-Bits 125 enthalten würden) und 31 (welche Ausgangs-Bits 123 enthalten würden), in einer Liste von möglichen Kombinationen von 3 Ausgangs-Bits. Ähnlich wie in dem oben beschriebenen ersten Beispiel können T geeignete Sätze von Ausgangs-Bits, die einmal bestimmt worden sind, mit jeweils der einem T-Eingangs-Bits assoziiert werden. Die unten stehende Liste ist ein Beispiel, welches einen entsprechenden Satz von Bits aus den 7 Ausgangs-Bits („OUT”) bezeichnet, der mit jedem der entsprechenden 31 Eingangs-Bits („IN”) assoziiert ist. Wie oben erwähnt, können in unterschiedlichen Beispielen die T-Sätze von Ausgangs-Bits mit unterschiedlichen der Eingangs-Bits assoziiert werden.
IN: OUT
0: 4 5 6
1: 3 5 6
2: 2 5 6
3: 1 5 6
4: 3 4 6
5: 2 4 6
6: 1 4 6
7: 0 4 6
8: 2 3 6
9: 1 3 6
10: 0 3 6
11: 1 2 6
12: 0 1 6
13: 3 4 5
14: 2 4 5
15: 1 4 5
16: 0 4 5
17: 2 3 5
18: 1 3 5
19: 0 3 5
20: 0 2 5
21: 0 1 5
22: 2 3 4
23: 1 3 4
24: 0 3 4
25: 1 2 4
26: 0 2 4
27: 0 1 4
28: 0 2 3
29: 0 1 3
30: 0 1 2
-
Die Liste kann dazu verwendet werden, um zu identifizieren, welche Ausgangs-Bits einen Beitrag von welchen Eingangs-Bits erhalten. Das heißt, für jedes Ausgangs-Bit kann ein Satz von Eingangs-Bits identifiziert werden, um das Ausgangs-Bit zu bestimmen. Ausgedrückt als ein Satz von Eingangs-Bits die in der Hash-Engine durch eine XOR-Operation kombiniert werden, sind die 7 Ausgangs-Bits der binären Zeichenkette 116 somit:
Out[0] = In[7] XOR In[10] XOR In[12] XOR In[16] XOR In[19] XOR In[20] XOR In[21] XOR In[24] XOR In[26] XOR In[27] XOR In[28] XOR In[29] XOR In[30];
Out[1] = In[3] XOR In[6] XOR In[9] XOR In[11] XOR In[12] XOR In[15] XOR In[18] XOR In[21] XOR In[23] XOR In[25] XOR In[27] XOR In[29] XOR In[30];
Out[2] = In[2] XOR In[5] XOR In[8] XOR In[11] XOR In[14] XOR In[17] XOR In[20] XOR In[22] XOR In[25] XOR In[26] XOR In[28] XOR In[30];
Out[3] = In[1] XOR In[4] XOR In[8] XOR In[9] XOR In[10] XOR In[13] XOR In[17] XOR In[18] XOR In[19] XOR In[22] XOR In[23] XOR In[24] XOR In[28] XOR In[29];
Out[4] = In[0] XOR In[4] XOR In[5] XOR In[6] XOR In[7] XOR In[13] XOR In[14] XOR In[15] XOR In[16] XOR In[22] XOR In[23] XOR In[24] XOR In[25] XOR In[26] XOR In[27];
Out[5] = In[0] XOR In[1] XOR In[2] XOR In[3] XOR In[13] XOR In[14] XOR In[15] XOR In[16] XOR In[17] XOR In[18] XOR In[19] XOR In[20] XOR In[21];
Out[6] = In[0] XOR In[1] XOR In[2] XOR In[3] XOR In[4] XOR In[5] XOR In[6] XOR In[7] XOR In[8] XOR In[9] XOR In[10] XOR In[11] XOR In[12].
-
Viele Varianten sind in den oben angegebenen Sätzen möglich, doch das beschriebene Verfahren schafft eine einfache Technik zur Bestimmung eines Satzes von Eingangs- zu Ausgangs-Zuordnungen für die Hash-Engine 106, die sicherstellt, dass jedes Ausgangs-Bits einer binären Zeichenkette 116 einen Beitrag von etwa der Hälfte der Bits der ersten binären Zeichenkette 102 erhält. Im ersten genannten Beispiel erhält jedes der 5 Bits der binären Ausgangs-Zeichenkette 116 einen Beitrag von entweder 14 oder 15 der 28 Eingangs-Bits von Tag 102; und im zweiten Beispiel erhält jedes der 7 Bits der binären Ausgangszeichenkette 116 einen Beitrag von zwischen 12 und 15 der 31 Eingangs-Bits von Tag 102. In einer ersten Ausführungsform umfasst jeder Satz von Eingangs-Bits, der zur Bildung eines Ausgangs-Bits kombiniert wird, im Durchschnitt über die Sätze von 40% und 60% der Eingangs-Bits. In einer zweiten Ausführungsform wird jeder Satz von Eingangs-Bits, der zur Bildung eines Ausgangs-Bits kombiniert wird, im Durchschnitt über die Sätze zwischen 42% und 58% der Eingangs-Bits. In einer dritten Ausführungsform umfasst jeder Satz von Eingangs-Bits, der zur Bildung eines Ausgangs-Bits kombiniert wird, im Durchschnitt über die Sätze zwischen 45% und 55% der Eingangs-Bits.
-
Das oben beschriebene Verfahren kann wie folgt verallgemeinert werden. Mit vorgegebenen T-Eingangs-Bits und S-Ausgangs-Bits kann S über S/2 berechnet werden, um herauszufinden, wie viele mathematische Kombinationen dies ergibt, entsprechend unterschiedlichen Sätzen einschließlich [S/2] der Ausgangs-Bits. Falls die Anzahl von Kombinationen größer ist als T, kann eine Streuprobe der Liste der Kombinationen genommen werden, um T-Sätze von Ausgangs-Bits zu bestimmen. Falls die Anzahl von Kombinationen kleiner ist als T, müssen wir einige weitere Sätze von Ausgangs-Bits bestimmen, welche eine andere Anzahl von Ausgangs-Bits umfassen.
-
Das Ziel besteht darin, Sätze zu erhalten, welche annähernd S/2 der Ausgangs-Bits in sich umfassen, doch es existiert das (gelegentlich konkurrierende) Ziel der Bestimmung einzigartiger Sätze von Ausgangs-Bits, falls möglich. Falls somit [S/2] nicht zumindest T-Sätze von Ausgangs-Bits liefert, können wir versuchen, zusätzliche Sätze von Ausgangs-Bits zu verwenden, die unterschiedliche Zahlen von Ausgangs-Bits in sich umfassen. Die nächste nicht verwendete Anzahl, die am nächsten zu S/2 liegt, wird für die Anzahl von Ausgangs-Bits in den Sätzen verwendet. Falls ein Paar von Zahlen existiert, die gleichermaßen nahe an S/2 sind, und welche beide noch nicht benutzt worden sind, dann wir die kleinere der zwei Zahlen zuerst verwendet, da dies weniger XOR Operationen benötigt, und somit ist etwas weniger Hardware notwendig. Falls beispielsweise S gerade ist (zum Beispiel S = 6), dann ist [S/2] = S/2 (zum Beispiel [S/2 = 3], und falls S über S/2 (z. B. 6 über 3) nicht genügend Kombinationen liefert, dann wird S über S/2 – 1 (z. B. 6 über 2) verwendet. Falls dies immer noch nicht genügend Kombinationen ergibt, dann wird 6 über S/2 + 1 (z. B. 6 über 4) verwendet, und so weiter, in der Reihenfolge 6 über S/2 – 2, S über S/2 + 2, S über S/2 – 3 und so weiter bis T oder mehr Kombinationen bestimmt worden sind.
-
Falls mehr als T-Kombinationen bestimmt worden sind, dann werden die letzten zu bestimmenden Kombinationen (z. B. S/2 – 3) streuprobenartig entnommen, wobei die früheren Kombinationen in diesem Beispiel nicht stichprobenartig entnommen wurden, um die T-Kombinationen zu bestimmen. Auf diese Weise können die T-Eingangs-Bits einem Satz von Ausgangs-Bits zugeordnet werden, zu welchen Sie beitragen werden. Falls S ungerade ist (z. B. S = 7), dann ist [S/2] ungleich S/2 (d. h. [S/2] = 3), und falls S über [S/2] (z. B. 7 über 3) nicht genügend Kombinationen liefert, dann wird S über [S/2 + 1] verwendet (z. B. 7 über 4). Falls dies immer noch nicht genügend Kombinationen liefert, dann wird S über [S/2 – 1] verwendet (z. B. 7 über 2), und so weiter, in der Reihenfolge S über [S/2 + 2], S über S/2 – 2, S über [S/2 + 3], und so weiter, bis ≥ T-Kombinationen bestimmt worden sind. Falls mehr als T-Kombinationen bestimmt worden sind, dann werden die letzten zu bestimmenden Kombinationen (z. B. [S/2 + 3]) streuprobenartig genommen (man beachte, dass frühere Kombinationen in diesem Beispiel nicht streuprobenartig entnommen werden) um die T-Kombinationen zu bestimmen. Auf diese Weise können die T-Eingangs-Bits einem Satz von Ausgangs-Bits zugeordnet werden, zu welchen sie beitragen werden. Falls weniger als T einzigartige Sätze von Ausgangs-Bits existieren, welche möglicherweise aus den S-Ausgangs-Bits gebildet werden können, dann müssen zumindest einige der Sätze von Ausgangs-Bits zur Zuordnung mit anderen Eingangs-Bits wiederverwendet werden.
-
Die Hash-Engine 106 kann derart verdrahtet sein, dass jedes Eingangs-„Tag”-Bit zu einer Anordnung bitweiser XORs geschaffen wird, die dazu ausgebildet sind, die Ausgangs-Bits der binären Zeichenkette 116 zu bilden. Ein einfaches Beispiel für eine solche Ausführungsform ist in 4 dargestellt. In dieser Figur ist die Anzahl von Tag-Bits T = 5 (der Eingang) und die Anzahl von Set-Bits S ist gleich 4 (der Ausgang). Die Figur zeigt eine geeignete Anordnung von XORs 401–406 entsprechend den oben dargelegten Prinzipien, um Ausgangs-Bits wie folgt zu bilden:
Out[0] = In[2] XOR In[3] XOR In[4]
Out[1] = In[1] XOR In[4]
Out[2] = In[0] XOR In[3]
Out[3] = In[0] XOR In[1] XOR In[2]
-
Die binäre Ausgangs-Zeichenkette, die von der Hash-Engine 106 erzeugt wird, wird in der Kombinationseinheit 107 mit der Set-Bit-Folge 103 aus der Eingangszeichenkette 101 durch eine umkehrbare Operation kombiniert, vorzugsweise eine bitweise XOR-Operation (dies ist der Schritt 303 in 3), obwohl in anderen Beispielen diese umkehrbare Operation auch eine andere umkehrbare Operation sein kann, wie etwa eine Addition oder Subtraktion Modulo 2S. Eine XOR-Operation ist einfach und schnell in eine Logik zu implementieren. Ferner dient die XOR-Operation dazu, die Ausgangs-Zeichenkette 116 (welche eine Mischung der Tag-Bits-102 der Eingangsspeicheradresse 101 ist) mit den Set-Bits 103 der Eingangsspeicheradresse zu „mischen”, welches dazu beitragen kann, sicherzustellen, dass Zugriffe auf aufeinander folgende Speicheradressen nicht in der gleichen Cache-Zeile gespeichert werden. Der Ausgang 120 der Kombinationseinheit 107 wird als ein Cache-Zeilen-Identifizierer im Cache-Speicher 110 verwendet und bezeichnet daher, an welcher Zeile Tag-Bits 102 und die Daten selbst gespeichert werden sollen (dies ist Schritt 304 in 3). Vorzugsweise würde jede Cache-Bank 200 S Zeilen aufweisen, so dass jede S-Bit-Ausgabe 120 eine bestimmte Cache-Zeile identifiziert.
-
Eine Hash-Engine, die entsprechend den hier beschriebenen Beispielen konfiguriert ist, verkörpert effizient eine einfache Hash-Funktion, die schnell genug ist, um in dem kritischen Pfad verwendet zu werden, welche nicht signifikant die Komplexität oder Leistungsaufnahme eines Cache-Speichers steigert. Die Hash-Engine 106 kann ferner sicherstellen, dass Folgen von Daten, die regelmäßige Muster von Eingangs-Speicheradressen aufweisen, über den Cache-Speicher 110 verteilt sind.
-
Typischerweise wird ein Cache-Speichersystem mehr als eine Cache-Bank aufweisen. In 1 existieren zwei Cache-Bänke 111 und 112. Cache-Einträge können zwischen diesen Speicherbänken in einer Bankauswahleinheit 109 verteilt sein. In einigen Ausführungsformen ist die Bankauswahleinheit 109 ein bitweiser Operator, der das am wenigsten signifikante Bit (121) der Cache-Zeile 120 empfängt und diesen Bit mit einem „Bank”-Bit 104 von der Eingangs-Speicheradresse 101 kombiniert (vorzugsweise dem Bit, das benachbart, aber weniger signifikant ist als Set-Bits 103). Der bitweise Operator 109, der in dem in 1 dargestellten Beispiel ein XOR ist, schafft einen Bank-Identifizierer 122 an seinem Ausgang, so dass Eingangsdaten 114 zu der Cache-Zeile 120 von einer der zwei Cache-Bänke 111 oder 112 geleitet werden. Auf diese Weise werden Cache-Einträge zwischen den Cache-Bänken verteilt, und die Vorteile von Mehrfachbank-Caches können realisiert werden. Falls mehr als zwei Cache-Bänke vorhanden sind, wird die Anzahl der am wenigsten signifikanten Bits von der Cache-Adresse 120 und der (gleichen) Anzahl von Bank-Bits angemessen vergrößert (z. B. für vier Bänke wären Bank-Bits erforderlich).
-
In bevorzugten Ausführungsformen umfasst die Cache-Logik 100 ferner eine Bank-Verwürfelungseinheit 108, die dazu vorgesehen ist, einen Eingang (d. h. eine pseudo-zufällige Eingabe) in die Bank-Auswahleinheit 109 anstelle von Bits von der Cache-Zeile 120 zu schaffen. Das (die) am wenigsten signifikant(en) Bit(s) von der Cache-Zeile 120 wird bzw. werden als Aufsuchtabelle in einem Bit-Register der Bank-Verwürfelungseinheit 108 verwendet, das eine Bitfolge speichert (z. B. eine pseudozufällige Bitfolge), für welche die Wahrscheinlichkeit, dass eine Aufsuchtabelle einen der möglichen Werte zurückgibt, im wesentlichen für alle möglichen Werte gleich ist.
-
Die Bank-Verwürfelungseinheit 108 ist genauer in 2 dargestellt und umfasst ein Bitregister 201 zur Speicherung einer binären Folge und eine Bit-Auswahleinheit 202 zur Auswahl von einem oder mehreren Bits aus der binären Folge. Das Bitregister 201 und die Bit-Auswahleinheit 202 können durch jede geeignete Kombination von Logik und Speicher geschaffen werden, die zur Speicherung einer binären Zeichenkette der erforderlichen Länge geeignet ist; das Bitregister und die Auswahleinheit können beispielsweise eine einzige Logikeinheit sein, oder Teil einer größeren Logikeinheit.
-
Die Bank-Verwürfelungseinheit 108 könnte eine feste binäre Folge speichern oder ihre eigene pseudozufällige Folge von Bits erzeugen, zur Verwendung als die binäre Folge entsprechend einem beliebigen geeigneten Stand der Technik. Vorzugsweise ist das Bitregister 201 jedoch durch ein äußeres Mittel wie etwa eine Software- oder eine Hardwarefunktionalität eines Host-Computers programmierbar, an welcher die Cache-Logik 100 vorliegt. Dies vermeidet eine Vergrößerung der Komplexität der Cache-Logik und verringert die Verarbeitungsleistung, die typischerweise in anderen Teilen des Datenverarbeitungssystems vorliegt, in welchem die Cache-Logik implementiert ist, um die binäre Zeichenkette zu bilden. Typischerweise würde das Bitregister 201 durch einen Systemtreiber bei einem System-Neustart oder einem Hochfahren des Systems initialisiert.
-
Die binäre Zeichenkette, die in dem Bitregister 201 gespeichert wird, kann pseudozufällig erzeugt werden. Vorzugsweise kann jedoch eine gleiche Zahl aller möglichen Werte in Positionen der binären Zeichenkette eingesetzt werden, und die Werte können dann innerhalb der binären Zeichenkette gemischt werden, so dass die Wahrscheinlichkeit, dass ein Aufsuchen aus der binären Zeichenkette einen möglichen Wert zurückgibt, im wesentlichen für alle möglichen Werte die gleiche ist. Wie auch immer die binäre Zeichenkette erzeugt wird, so hat sie vorzugsweise die Eigenschaft, dass dann, falls eine Gruppe von B-Bits (z. B. B = 1 in den oben genauer beschriebenen Beispielen) aus der binären Zeichenkette an einem beliebigen Punkt innerhalb der binären Zeichenkette gelesen wird, die Wahrscheinlichkeit des Lesens von einem der möglichen 2B im wesentlichen die gleiche ist. Falls beispielsweise B = 1, dann wird bevorzugt, dass etwa die Hälfte der Bits der binären Zeichenkette gleich 0 sind, so dass die Bank-Verwürfelungseinheit annähernd gleich wahrscheinlich jede Bank des Cache-Speichers auswählt. Dies kann erreicht werden durch zufälliges (oder pseudozufälliges) Erzeugen einer binären Zeichenkette und anschließendes Verwerfen erzeugter binärer Zeichenketten, welche nicht diese Bedingungen erfüllen, bis eine binäre Zeichenkette erzeugt worden ist, welche diese Bedingungen erfüllt. Die Bedingung kann in einem Beispiel dadurch realisiert werden, dass lediglich binäre Zeichenkette in dem Bitregister gespeichert werden, die zwischen 40–60% Nullen enthalten, und in einem anderen Beispiel durch Speicherung lediglich binärer Zeichenketten in dem Bitregister, welche zwischen 45 und 55% Nullen enthalten. Alternativ kann in Beispielen mit B > 1 eine Gray-Codesequenz als die binäre Zeichenkette verwendet werden, so dass die binäre Zeichenkette alle möglichen Werte durchläuft. Die Art und Weise, auf die die binäre Zeichenkette gebildet wird, kann von der Reihenfolge abhängen, in welcher auf die Daten zugegriffen wird.
-
Die Bank-Verwürfelungseinheit 108 ist dazu konfiguriert, um eines oder mehrere am wenigsten signifikante Bits 121 der Cache-Zeile 120 als eine Aufsuchtabelle in der binären Zeichenkette zu verwenden, die in dem Bitregister 201 gespeichert ist. Diese Anordnung bedeutet, dass Bits der Cache-Adresse nicht in der Bankauswahleinheit 109 verwendet werden, sondern vielmehr ein Mittel darstellen, durch welches Bits aus einer (z. B. pseudozufälligen) binären Zeichenkette durch die Bank-Verwürfelungseinheit 108 ausgewählt werden. Am wenigsten signifikante Bits 121 werden als eine Aufsuchtabelle in dem Bitregister 201 durch die Auswahleinheit 202 in einer Weise entsprechend der Architektur des Bitregisters verwendet, das in der Bank-Verwürfelungseinheit verwendet wird. Beispielsweise können die am wenigsten signifikanten Bits verwendet werden, um eine Bitposition in dem Bitregister zu identifizieren, oder als ein Keim für einen Algorithmus, der dazu vorgesehen ist, eines oder mehrere Bits aus dem Bitregister auszuwählen.
-
In bevorzugten Ausführungsformen hat das Bitregister eine Länge von 2N Bits, wobei N die Zahl der am wenigsten signifikanten Bits 121 in der Cache Adresse ist. Dies ermöglicht die Verwendung der am wenigsten signifikanten Bits 121 als eine Adresse, die eine Bitposition in der binären Zeichenkette identifiziert, die in dem Register 201 gespeichert ist. Falls beispielsweise N = 5, dann ist die binäre Zeichenkette in dem Bitregister 32 Bits lang, wobei die 5-Bit-Zeichenkette der am wenigsten signifikanten Bits 121 einer gegebenen Cache-Adresse ein bestimmtes Bit der binären Zeichenkette identifiziert. Die Anzahl von Bits, die für die Bank-Auswahleinheit 109 benötigt wird, wird beginnend mit diesem bestimmten Bit in dem Bitregister 201 ausgewählt (z. B. für einen Cache-Speicher mit zwei Cache-Bänken wird lediglich das identifizierte Bit ausgewählt; für vier Cache-Bänke werden zwei Bits ausgewählt).
-
Die ein oder mehreren Bits, die von der Auswahleinheit 202 von dem Bitregister 201 gewählt werden, werden der Bank-Auswahleinheit 109 zur Kombination mit dem ein oder mehreren Bank-Bits 104 in der oben beschriebenen Weise zur Verfügung gestellt. Die Bank-Auswahleinheit 109 (welche vorzugsweise ein XOR-Operator ist) erzeugt einen Bank-Identifizierer 122 zur Identifizierung einer Cache-Bank, an der die Daten und die Tag-Bits 102 zu speichern sind.
-
Die Verwendung der Bank-Verwürfelungseinheit 108 dient dazu, die Zugriffe auf die Bänke in den Cache-Systemen zu verteilen. Da die binäre Folge, die in dem Register 201 gespeichert ist, so gewählt werden kann, dass sie pseudozufällige Eigenschaften aufweist (während vorzugsweise sichergestellt wird, dass etwa 50% der Bits Nullen sind), hat die Bank-Verwürfelungseinheit 108 im allgemeinen eine bessere Leistung als das Vermischen von Bit(s) des Cache-Zeilen-Indikators 121 mit den Bank-Bit(s) 104. Dies liegt daran, dass die Bankauswahl, die von der Bank-Verwürfelungseinheit getroffen wird, im wesentlichen von der bestimmten Folge von Bits entkoppelt wird, die in der Speicheradresse 101 vorhanden ist, und es ist daher weniger wahrscheinlich, dass pathologische Zugriffsmuster zwischen den Speicherbänken auftreten. Die Bank-Verwürfelungseinheit 108 kann wirksam außer Betrieb gesetzt werden, indem alle Bits des Bitregisters 201 auf Nullen gesetzt werden oder alle Bits auf Einsen.
-
Es ist zu bemerken, dass die Verwendung von XOR als Bankauswahleinheit 109 sicherstellt, dass im Fall von stoßweisen Übertragungen von Daten Paare aufeinanderfolgender 2W-Byte-Auslegungen immer noch von abwechselnden Bänken stammen bzw. zu diesen geschrieben werden, und somit die entsprechende Leistung erzielt wird. D. h., für zwei benachbarte Speicheradressen mit den gleichen Tag- und Set-Bits aber unterschiedlichen Bank-Bits wird die Cache-Zeilen-Bezeichnung 120, die von der Kombinationseinheit 107 ausgegeben wird, die gleiche sein, doch die Cache-Bank-Bezeichnungsausgabe von der Bankauswahleinheit 109 wird anders sein. Für andere Lese-/Schreibmuster (für welche die Tag- und/oder Set-Bits zwischen zwei Speicheradressen verändert sind, z. B. wenn die Set-Bits um 1 vergrößert sind), werden die Cache-Adressen gut zwischen den Bänken 111 und 112 verteilt sein, so dass pathologische Zugriffsfälle vermieden werden. Es wird angemerkt, dass das Zerlegen der Tag-Bits und das Bank-Verwürfeln deterministische Prozesse sind, in der Weise, dass eine gegebene Speicheradresse 101 sich auf die gleiche Cache-Adresse abbildet, falls das Cache-Mapping wiederholt wird.
-
Typischerweise wird lediglich ein Teil der Eingangsspeicheradresse 101 als Tag- und Set-Bits verwendet, während die am wenigstens signifikanten Bits von der Cache-Logik nicht benutzt werden und durch Wort-Bits 105 in 1 repräsentiert werden. Damit eine Eingangsspeicheradresse aus dem Cache-Speicher wieder erzeugt werden kann, müssen nicht alle ihrer Bits in dem Cache gespeichert werden. Dies liegt daran, dass beim Lesen eines Eintrags aus dem Cache
- a) der Wert der Bank-Anzeigebit(s) 122 und die Cache-Zeilen-Anzeigebits 120 bekannt sind, da bekannt ist, wo in dem Cache der Eintrag ausgelesen wurde. Die am wenigstens signifikanten Bits des Cache-Zeilen-Anzeigers können durch die Bank-Verwürfelungseinheit 108 (oder eine äquivalente Einheit) weitergereicht werden, und das Ergebnis kann als eine Eingabe oder eine XOR-Operation verwendet werden, mit dem Bank-Anzeigebit (den Bits) als weitere Eingabe, um somit das bzw. die Bank-Bit(s) der Speicheradresse zu finden.
- b) die Set-Bits können leicht aus den Cache-Zeilen-Anzeiger-Bits 120 berechnet werden, da die Operation, die an der Kombinationseinheit 107 durchgeführt wird, umkehrbar ist. Das Tag wird in dem Cache gespeichert und kann beispielsweise wieder durch die Hash-Engine durchgereicht werden (oder eine äquivalente Einheit), um die Bits zu finden, welche mit den Set-Bits der Cache-Zeilen-Adresse kombiniert werden müssen. Da die Ausgabe der Kombinationseinheit bekannt ist (die Cache-Zeilen-Anzeigebits) und eine der Eingaben der Kombinationseinheit bekannt ist, kann die andere Eingabe in die Kombinationseinheit der Set-Bits 103 bestimmt werden, da die Operation, die an der Operationseinheit 107 durchgeführt wird, umkehrbar ist.
-
Somit kann der Informationsgehalt einer binären Eingangs-Speicheradresse 110 gespeichert werden, indem lediglich die Tag-Bits 102 der Speicheradresse 101 zusammen mit den Daten selbst gespeichert werden, welche eine Länge von 2W aufweisen. Die Wort-Bits werden bestimmt durch die Byte-Position in der Cache-Zeile, an der die Daten gespeichert wurden.
-
Eine Cache-Logik, die gemäß der vorliegenden Erfindung konfiguriert ist, könnte eines oder mehrere der folgenden Beispiele umfassen: eine bestimmte Hardware-Logik, eine geeignet programmierte rekonfigurierbare Logik (z. B. ein FPGA), und/oder einen Prozessor, der einen Code ausführt, der so konfiguriert ist, dass die Kombination von Prozessor und Code die Funktionen der hier beschriebenen Erfindung aufweist (wie etwa ein ASIC oder FPGA). In bevorzugten Ausführungsformen ist die Cache-Logik eine fest verdrahtete Logikeinheit.
-
Die beanspruchten Funktionen der Cache-Logik (z. B. die Hash-Engine, die Kombinationseinheit, die Bank-Auswahleinheit und die Bank-Verwürfelungseinheit) müssen nicht als diskrete Einheiten ausgebildet sein und repräsentieren Funktionen, die a) in beliebiger Weise kombiniert werden können, und b) selbst eine oder mehrere Logikeinheiten umfassen können.
-
Die Begriffe Software und Programmcode, wie sie hier verwendet werden, umfassen ausführbaren Code für Prozessoren (z. B. CPUs und/oder GPUs), Firmware, Bytecode, programmierbarer Sprachencode wie etwa C or OpenCL, und Module für rekonfigurierbare Logikeinheiten wie etwa FPGAs. Maschinenlesbarer Code umfasst Software/Programmcode sowie Code zur Festlegung von Hardware-Repräsentationen integrierter Schaltkreise auf einer beliebigen Stufe, einschließlich einer Register-Transferstufe (RTL), High-Level-Schaltkreis-Repräsentationen, wie etwa Verilog oder VHDL oder niederstufige Repräsentationen wie etwa OASIS und GDSII.
-
Die hier beschriebenen Algorithmen und Verfahren können durch eine oder mehrere physikalische Verarbeitungseinheiten durchgeführt werden, welche Software ausführen, welche die Einheite(n) dazu veranlasst, die Algorithmen/Verfahrensschritte durchzuführen. Die oder jede physikalische Verarbeitungseinheit könnte jeder geeignete Prozessor sein, wie etwa eine CPU oder GPU (oder ein Kern derselben) oder eine feste Funktion oder programmierbare Hardware. Die Software könnte in nicht flüchtiger Form in einem maschinenlesbaren Medium gespeichert sein, wie etwa einem integrierten Schaltkreisspeicher, oder auf einem optischen oder magnetischen Speicher. Ein maschinenlesbares Medium könnte mehrere Speicher umfassen, wie etwa on-chip-Speicher, Computerarbeitsspeicher und nicht flüchtige Speichereinrichtungen.
-
Der Anmelder offenbart hiermit jedes individuelle Merkmal, das hier beschrieben wird, und jede Kombination von zwei oder mehrerer solcher Merkmale, in dem Ausmaß, dass solche Merkmale oder Kombinationen derselben auf Grundlage der vorliegenden Beschreibung insgesamt im Lichte des allgemeinen Wissens eines Fachmanns ausgeführt werden können, unabhängig davon, ob solche Merkmale oder Kombinationen von Merkmalen hier offenbarte Probleme lösen und ohne Beschränkung auf den Umfang der Ansprüche. Der Anmelder zeigt hiermit an, dass Aspekte der vorliegenden Erfindung aus einem beliebigen solcher individueller Merkmale oder Kombinationen von Merkmalen bestehen können. In Anbetracht der vorhergehenden Beschreibung ist für den Fachmann ersichtlich, dass im Rahmen der Erfindung verschiedene Abwandlungen vorgenommen werden können.
-
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 Nicht-Patentliteratur
-
- M. Schlansker et al [0004]
- „Randomization and Associativity in the Design of Placement-Insensitive Caches”, Computer Systems Laboratory, HPL-93-41, Juni 1993 [0004]
- „A case for two-way skewed-associative Caches”, A. Seznec, Proceedings of the 20th international Symposium on Computer Architecture, San Diego, Mai 1993 [0005]
- ”Trade-offs for Skewed-Associative Caches”, H. Vandierendonck und K. De Bosschere [0005]