DE10045188B4 - Cacheadresskonfliktvorrichtung - Google Patents
Cacheadresskonfliktvorrichtung Download PDFInfo
- Publication number
- DE10045188B4 DE10045188B4 DE10045188A DE10045188A DE10045188B4 DE 10045188 B4 DE10045188 B4 DE 10045188B4 DE 10045188 A DE10045188 A DE 10045188A DE 10045188 A DE10045188 A DE 10045188A DE 10045188 B4 DE10045188 B4 DE 10045188B4
- Authority
- DE
- Germany
- Prior art keywords
- access
- cache
- conflict
- memory
- logic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 claims abstract description 7
- 230000008569 process Effects 0.000 claims abstract description 7
- 238000011068 loading method Methods 0.000 claims description 6
- 238000003780 insertion Methods 0.000 claims description 5
- 230000037431 insertion Effects 0.000 claims description 5
- 239000000872 buffer Substances 0.000 description 18
- 238000013461 design Methods 0.000 description 9
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 7
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000004044 response Effects 0.000 description 4
- 206010000210 abortion Diseases 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002250 progressing effect Effects 0.000 description 1
- 230000035484 reaction time Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
wobei die Cache-Anordnung eine Mehrebenencachestruktur (100) aufweist, auf die durch den Prozessor zugegriffen werden kann, um Speicherzugriffsanfragen zu erfüllen, wobei die Mehrebenencachestruktur (100) konfiguriert ist, um mehrere Speicherzugriffsanfragen zu empfangen und die mehreren Anfragen parallel zu verarbeiten, um zu bestimmen, ob eine der mehreren Ebenen die mehreren empfangenen Speicherzugriffsanfragen erfüllen kann,
wobei eine Ebene der Mehrebenencachestruktur eine Warteschlange (209) zum Halten von Einträgen von Adreßinformationen für Datenzugriffe aufweist,
dadurch gekennzeichnet, dass die Ebene folgende Merkmale aufweist:
eine Konfliktlogik (407, 408, 409) zum Prüfen jeder Zugriffsanfrage hinsichtlich der Einträge der Warteschlange nach Konflikten, bevor jede Zugriffsanfrage in die Warteschlange eingefügt wird, wobei Informationen, die den Konflikt beschreiben, in die Warteschlange eingefügt werden; und
eine Ausgabelogik zum Bestimmen welche Einträge von der Warteschlange basierend auf den Resultaten der Konfliktlogik auszugeben sind.
Description
- Diese Erfindung bezieht sich allgemein auf eine Cacheanordnung für ein Computersystem.
- Computersysteme können eine Mehrebenenhierarchie eines Speichers mit einem relativ schnellen, aufwendigen, jedoch kapazitätsbegrenzten Speicher auf der höchsten Ebene der Hierarchie und fortschreitend zu einem relativ langsameren, weniger aufwendigen, jedoch höherkapazitiven Speicher auf der untersten Ebene der Hierarchie verwenden. Die Hierarchie kann einen kleinen schnellen Speicher, der Cache genannt wird, und der entweder innerhalb eines Prozessors physisch integriert ist oder physisch nahe zu dem Prozessor zur Beschleunigung angebracht ist, umfassen. Das Computersystem kann getrennte Befehlscaches und Datencaches verwenden. Zusätzlich kann das Computersystem mehrere Cacheebenen verwenden. Die Verwendung eines Caches ist allgemein einem Computerprogramm auf der Befehlsebene transparent und kann folglich zu einer Computerarchitektur hinzugefügt werden, ohne den Befehlssatz zu verändern oder ohne eine Modifikation der existierenden Programme zu erfordern.
- Computerprozessoren umfassen typischerweise einen Cache zum Speichern von Daten. Wenn ein Befehl ausgeführt wird, der einen Zugriff auf einen Speicher (z. B. ein Lesen von oder ein Schreiben zu einem Speicher) erfordert, greift ein Prozessor typischerweise auf einen Cache bei einem Versuch zu, diesen Befehl zu erfüllen. Natürlicherweise ist es wünschenswert, daß der Cache auf eine Art und Weise implementiert ist, die es ermöglicht, daß der Prozessor auf den Cache auf eine effiziente Art und Weise zugreift. Das heißt, es ist wünschenswert, daß der Cache auf eine Art und Weise implementiert ist, derart, daß der Prozessor auf den Cache schnell zugreifen (d. h. aus dem Cache lesen oder zu dem Cache schreiben) kann, so daß der Prozessor Befehle schnell ausführen kann. Caches werden sowohl in In-Chip- als auch Außer-Chip-Anordnungen konfiguriert. In-Prozessor-Chip-Caches weisen eine geringere Latenz bzw. Reaktionszeit auf, da dieselben näher zu dem Prozessor sind. Da jedoch der In-Chip-Bereich aufwendig bzw. teuer ist, sind solche Caches typischerweise kleiner als Außer-Chip-Caches. Außer-Prozessor-Chip-Caches weisen längere Latenzen bzw. Reaktionszeiten auf, da dieselben von dem Prozessor entfernt positioniert sind, solche Caches sind jedoch typischerweise größer als die In-Chip-Caches.
- Eine bekannte Lösung besteht in mehreren Caches, einige klein und einige groß. Typischerweise sind die kleineren Caches in dem Chip positioniert und die größeren Caches sind außerhalb des Chips positioniert. Typischerweise wird bei Mehrebenencache-Entwürfen auf die erste Cacheebene (d. h. L0) zuerst zugegriffen, um zu bestimmen, ob ein echter bzw. wirklicher Cachetreffer für eine Speicherzugriffsanfrage erreicht wird. wenn ein echter Cachetreffer für die erste Cacheebene nicht erreicht wird, dann wird eine Bestimmung für die zweite Cacheebene (d. h. L1) usw. durchgeführt, bis die Speicherzugriffsanfrage durch eine Cacheebene erfüllt wird. Wenn die angefragte Adresse nicht in einer der Cacheebenen gefunden wird, dann sendet der Prozessor eine Anfrage zu dem Hauptspeicher des Systems bei einem Versuch, die Anfrage zu erfüllen. Bei vielen Prozessorentwürfen ist die Zeit, die erforderlich ist, um auf einen Gegenstand für einen echten Cachetreffer zuzugreifen, ein Hauptbegrenzer der Taktrate des Prozessors, wenn der Entwickler eine Einzelzykluscachezugriffszeit anstrebt. Bei anderen Entwürfen kann die Cachezugriffszeit mehrere Zyklen betragen, die Leistung eines Prozessors kann jedoch in den meisten Fällen verbessert werden, wenn die Cachezugriffszeit in Zyklen reduziert wird. Daher ist die Optimierung der Zugriffszeit für Cachetreffer für die Leistung des Computersystems kritisch.
- Bekannte Cacheentwürfe für Computerprozessoren erfordern typischerweise, daß "Steuerdaten" oder Etiketten verfügbar sind, bevor ein Cachedatenzugriff beginnt. Die Etiketten zeigen, ob eine gewünschte Adresse (d. h. eine Adresse, die für eine Speicherzugriffsanfrage erforderlich ist) innerhalb des Caches enthalten ist. Dementsprechend sind bekannte Caches typischerweise in einer seriellen Art und Weise implementiert, bei der, wenn der Cache eine Speicherzugriffsanfrage empfängt, ein Etikett für die Anfrage erhalten wird, und danach, wenn das Etikett zeigt, daß die gewünschte Adresse innerhalb des Caches enthalten ist, auf das Datenarray des Caches zugegriffen wird, um die Speicherzugriffsanfrage zu erfüllen. Folglich erzeugen bekannte Cacheentwürfe typischerweise Etiketten, die anzeigen, ob ein echter Cache-"Treffer" für eine Cacheebene erreicht wurde, und nur nachdem ein echter Cachetreffer erreicht wurde, wird auf die Daten tatsächlich zugegriffen, um die Speicherzugriffsanfrage zu erfüllen. Ein echter Cache-"Treffer" tritt auf, wenn ein Prozessor einen Gegenstand von einem Cache anfragt, und der Gegenstand tatsächlich in dem Cache vorhanden ist. Ein Cache-"Verfehlen" tritt auf, wenn ein Prozessor einen Gegenstand von einem Cache anfragt und der Gegenstand nicht in dem Cache vorhanden ist. Die Etikettdaten, die anzeigen, ob ein 'echter" Cachetreffer für eine Cacheebene erreicht wurde, weisen typischerweise ein Etikettenübereinstimmungssignal auf. Das Etikettenübereinstimmungssignal zeigt an, ob eine Übereinstimmung für eine angefragte Adresse in den Etiketten einer Cacheebene erreicht wurde. Ein solches Etikettenübereinstimmungssignal zeigt jedoch nicht alleine an, ob ein echter Cachetreffer erreicht wurde.
- Als ein Beispiel kann bei einem Mehrprozessorsystem eine Etikettenübereinstimmung für eine Cacheebene erreicht werden, die spezielle Cachezeile für die die Übereinstimmung erreicht wurde, kann jedoch ungültig sein. Die spezielle Cachezeile kann beispielsweise ungültig sein, da ein weiterer Prozessor diese spezielle Cachezeile hinausgeschnüffelt (snooped out) hat. Wie hierin verwendet, ist ein "Schüffeln" (Snoop) eine Anfrage von einem ersten Prozessor zu einem zweiten Prozessor, ob eine spezielle Cacheadresse innerhalb des zweiten Prozessors gefunden wurde. Dementsprechend wird bei Mehrprozessorsystemen typischerweise ein MESI-Signal verwendet, um anzuzeigen, ob eine Zeile in dem Cache "modifiziert (Modified), exklusiv (Exclusive), gemeinsam verwendet (Shared) oder ungültig (Invalid)" ist. Daher weisen Steuerdaten, die anzeigen, ob ein echter Cachetreffer für eine Cacheebene erreicht wurde, typischerweise ein MESI-Signal sowie das Etikettenübereinstimmungssignal auf. Lediglich wenn eine Etikettenübereinstimmung für eine Cacheebene gefunden wird und das MESI-Protokoll anzeigt, daß eine derartige Etikettenübereinstimmung gültig ist, zeigen die Steuerdaten an, daß ein echter Cachetreffer erreicht wurde. Hinsichtlich des vorhergehenden wird bei bekannten Cacheentwürfen zuerst eine Bestimmung durchgeführt, ob eine Etikettenübereinstimmung für eine Cacheebene gefunden wird, und dann wird eine Bestimmung durchgeführt, ob das MESI-Protokoll anzeigt, daß eine Etikettenübereinstimmung gültig ist. Wenn eine Bestimmung durchgeführt wurde, daß ein echter Etikettentreffer erreicht wurde, dann beginnt der Zugriff auf die angefragten tatsächlichen Cachedaten.
-
7 zuwendend ist ein Beispiel eines typischen Cacheentwurfs des Stands der Technik gezeigt. Wenn ein Befehl einen Zugriff auf eine spezielle Adresse erfordert, wird typischerweise eine virtuelle Adresse von dem Prozessor zu dem Cachesystem geliefert. Wie es in der Technik gut bekannt ist, enthält eine solche virtuelle Adresse typischerweise ein Indexfeld und ein virtuelles Seitenzahlfeld. Die virtuelle Adresse wird in einen Übersetzungs-Seitenblick-Puffer ("TLB"; Translation Look-aside Buffer)710 eingegeben. Der TLB710 ist eine übliche Komponente von modernen Cachearchitekturen, die in der Technik gut bekannt ist. Der TLB710 liefert eine Übersetzung von der empfangenen virtuellen Adresse bzw. logischen Adresse zu einer physischen bzw. absoluten Adresse. Innerhalb eines Computersystems ist der virtuelle Adreßraum bzw. der Raum für virtuelle Adressen typischerweise wesentlich größer als der physische Adreßraum bzw. der Raum für physische Adressen. Der physische Adreßraum ist die tatsächliche physische Speicheradresse eines Computersystems, das den Cache, einen Hauptspeicher, eine Festplatte und irgend etwas anderes umfaßt, auf das der Computer zugreifen kann, um Daten wiederzugewinnen. Damit ein Computersystem folglich auf den gesamten physischen Adreßraum zugreifen kann, wird typischerweise eine vollständige physische Abbildung bzw. eine Tabellierung von den virtuellen Adressen zu den physischen Adressen geliefert. - Sobald die wiedergewonnene virtuelle Adresse in eine physische Adresse durch den TLB
710 übersetzt ist, wird das Indexfeld einer solchen physischen Adresse in das (die) Etikett(en)712 der Cacheebene eingegeben, das N mal für N Assoziativitäts-"Wege" verdoppelt wird. Wie hierin verwendet, bezieht sich der Ausdruck "Weg" (Way) auf eine Unterteilung des Caches. Beispielsweise kann der Cache eines Systems in eine beliebige Anzahl von Wegen unterteilt sein. Caches sind üblicherweise in vier Wege unterteilt. Der physische Adreßindex wird ferner in das (die) Datenarray s) 716 der Cacheebene eingegeben, das ebenfalls N mal für N Assoziativitätswege verdoppelt werden kann. - Aus dem (den) Etikett(en)
712 der Cacheebene wird ein Wegetikettenübereinstimmungssignal für jeden Weg erzeugt. Das Wegetikettenübereinstimmungssignal zeigt an, ob eine Übereinstimmung für die physische Adresse innerhalb des (der) Etiketts (Etiketten)712 der Cacheebene erreicht wurde. Wie im vorhergehenden erörtert, wird in Mehrprozessorsystemen typischerweise ein MESI-Protokoll verwendet, um anzuzeigen, ob eine Zeile in dem Cache modifiziert und exklusiv, gemeinsam verwendet oder ungültig ist. Bei solchen Multiprozessorsystemen ist dementsprechend das MESI-Protokoll mit dem Wegetikettenübereinstimmungssignal kombiniert, um anzuzeigen, ob ein "echter" Etikettentreffer für eine Cacheebene erreicht wurde. In Mehrprozessorsystemen bzw. Multiprozessorsystemen wird ein echter Etikettentreffer folglich erreicht, wenn sowohl ein Etikettentreffer für ein Etikett (Etiketten)712 gefunden wird als auch das MESI-Protokoll anzeigt, daß eine solche Etikettenübereinstimmung eine gültige Übereinstimmung ist. In7 wird dementsprechend die MESI-Schaltungsanordnung714 verwendet, um ein "Echter"-Etikettentreffer-Signal zu berechnen, um zu bestimmen, ob ein echter Etikettentreffer für diese Cacheebene erreicht wurde. Sobald aus dem MESI714 bestimmt ist, daß ein "echter" Etikettentreffer für diese Cacheebene erreicht wurde, dann wird auf das Datenarray (die Datenarrays)716 dieser Cacheebene, das ebenfalls N mal für N Assoziativitätswege verdoppelt werden kann, zugegriffen, um die empfangene Speicherzugriffsanfrage zu erfüllen. Das Echter-Etikettentreffer-Signal kann insbesondere verwendet werden, um einen Multiplexer ("MUX")718 zu steuern, um den geeigneten Datenarrayweg auszuwählen, um Daten auszugeben, um die empfangene Speicherzugriffsanfrage zu erfüllen. Die ausgewählten Daten aus dem Datenarray (den Datenarrays)716 werden in den Kern des Chips720 ausgegeben, der die spezielle Ausführungseinheit (z. B. eine Ganzzahlausführungseinheit oder eine Gleitkommaausführungseinheit) ist, die die Speicherzugriffsanfrage zu dem Cache ausgegeben hat. - Hinsichtlich des vorhergehenden sind bekannte Caches typischerweise auf eine serielle Art und Weise implementiert, wobei jeder folgende Cache mit einem vorhergehenden Cache durch ein einziges Tor verbunden ist. Folglich können bekannte Caches lediglich begrenzte Zahlen von Anfragen gleichzeitig handhaben. Daher können die bekannten Caches keine ausreichend hohe Bandbreite zurück zu dem CPU-Kern liefern, was bedeutet, daß die Entwürfe des Stands der Technik die Latenz bzw. Reaktionszeit beim Wiedergewinnen von Daten aus einem Cache erhöhen, was die Ausführungseinheit innerhalb des Kerns eines Chips verlangsamt.
- Bei bekannten Systemen wird die Programmanordnung aufrecht erhalten, indem Adreßkonflikte unter Verwendung von Speicherpuffern gehandhabt werden, derart, daß, sowie Speicher operationen verarbeitet werden, und bevor dieselben tatsächlich in das Cachespeicherarray aktualisiert werden, sich die Daten in einem Speicherpuffer befinden. Die Steuerlogik mit Adreßkomparatoren wird verwendet, um zu bestimmen, ob ein späteres Laden oder Speichern die Daten von einem Speichern benötigt, das nicht in das Cachespeicherarray aktualisiert wurde. Wenn es eine Erfassung gibt, daß die Daten benötigt werden, dann werden die Daten ausgelesen und mit Daten aus dem Cachespeicher kombiniert, und die Kombination wird als die Ladedaten zurück zu dem CPU-Kern geliefert. Das Hauptproblem dieser Anordnung ist der hohe Komplexitätsgrad. Eine Speicherpufferstruktur mit diesen Lesepunkten ist sehr kompliziert. Diese Anordnung erfordert ferner eine große Menge an Oberflächenbereich, da viele Komponenten, z. B. Komparatoren und Multiplexer, insbesondere, um das Mischen der Pufferdaten und der Cachedaten durchzuführen, für den Betrieb derselben erforderlich sind.
- Aus der
DE 195 06 734 A1 ist ein System zum Aufrechterhalten einer Speicherkonsistenz in einer Busanforderungswarteschlange bekannt. Anforderungen werden beim Einreihen in die Busanforderungswarteschlange an den Anfang einer FIFO eingereiht. Beim Aktualisieren werden die Anforderungen vom Anfang zum Ende der FIFO weitergegeben, wobei dabei nach Gleiche-Adressen-Konflikten zwischen einer aktuellen Anforderung und einer zuvor ausgegebenen Anforderung, die in die Busanforderungswarteschlange eingegeben wurde, gesucht wird, wobei die aktuelle Anforderung an den Anfang der FIFO zurückgesendet wird, wenn ein Gleiche-Adressen-Konflikt gefunden wird. Gemäß einem Ausführungsbeispiel sind ein Ladepuffer, in den alle Ladeoperationen eingereiht werden, und ein Speicherpuffer, in den alle Speicheroperationen eingereiht werden, vorgesehen. Der Speicherpuffer überprüft alle Ladeoperationen auf Speicheradreßkonflikte, um sicherzustellen, daß die Ladeoperationen konsistent mit den vorher ausgeführten Speicheroperationen sind. Gemäß einem weiteren Ausführungsbeispiel ist ein FIFO vorgesehen, wobei neue Anforderungen, Lese- oder Schreibanforderungen, an das Ende der FIFO ge setzt werden. Wenn eine Anforderungen den Anfang der FIFO erreicht, wird eine Konfliktüberprüfung durchgeführt, wobei, wenn ein Konflikt auftritt, die Anforderung zurückgewiesen und wieder am Ende des FIFO eingefügt wird. - Die Aufgabe der vorliegenden Erfindung besteht darin, eine Cache-Anordnung für ein Computersystem zum Zugreifen auf einen Mehrebenencache eines Computersystems zu schaffen, die eine Speicherpufferstruktur ermöglicht und eine Abarbeitung von Speicheradreßkonfliktsituationen ermöglicht.
- Diese Aufgabe wird durch eine Cache-Anordnung gemäß Anspruch 1 gelöst.
- Die Cache-Anordnung verwendet einen L1-Cache, der mehrere Tore aufweist. Der erfinderische Cache verwendet getrennte Warteschlangenstrukturen für Daten und Befehle, was folglich ein ungeordnetes Verarbeiten ermöglicht. Der erfinderische Cache verwendet Anordnungsmechanismen, die eine Programmreihenfolge garantieren, wenn es Adreßkonflikte und architektonische Anordnungserfordernisse gibt. Die Warteschlangenstrukturen sind durch andere Prozessoren eines Mehrprozessorsystems schnüffelbar (snoopable). Dies ist erforderlich, da die Etiketten vor den Warteschlangen in der Pipeline sind. Es sei bemerkt, daß dies bedeutet, daß die Warteschlange den Etikettenzustand einschließlich Treffer/Verfehlen-Informationen enthält. Wenn ein Schnüffeln an den Etiketten durchgeführt wird, wenn dasselbe nicht ebenfalls an der Warteschlange durchgeführt wird, nimmt die Warteschlange an, daß dieselbe einen Treffer für eine Zeile aufweist, die nicht länger in dem Cache vorhanden ist. Folglich muß die Warteschlange durch andere Prozessoren in dem System schnüffelbar sein.
- Der erfinderische Cache weist eine Etikettenzugriffsumleitung um die Warteschlangenstrukturen auf, um ein spekulatives Überprüfen durch andere Cacheebenen und eine niedrigere Latenz bzw. Reaktionszeit zu ermöglichen, wenn die Warteschlangen leer sind. Der erfinderische Cache ermöglicht es mindestens, daß vier Zugriffe gleichzeitig verarbeitet werden. Die Resultate des Zugriffs können zu mehreren Verbrauchern gesendet werden. Die mehrtorige Natur des erfinderischen Caches ermöglicht eine sehr große Bandbreite, die durch diesen Cache mit einer niedrigen Latenz verarbeitet wird.
- Der erfinderische Cache verwaltet Adreßkonflikte und behält die Programmreihenfolge ohne Verwenden eines Speicherpuffers bei. Der Cache verwendet einen Ausgabealgorithmus, um sicherzustellen, daß die Zugriffe, die in dem gleichen Takt ausgegeben werden, tatsächlich in einer Reihenfolge ausgegeben werden, die mit der Programmreihenfolge übereinstimmt. Dies wird durch Durchführen von Adreßvergleichen vor der Einfügung der Zugriffe in die Warteschlange durchgeführt. Wenn zusätzlich Zugriffe durch einen oder mehrere Takte getrennt sind, werden Adreßvergleiche durchgeführt, und Zugriffe, die Daten aus dem Cachespeicherarray erhalten, bevor eine vorhergehende Aktualisierung tatsächlich den Cachespeicher in dem Array aktualisiert hat, werden abgebrochen. Dies liefert eine Garantie, daß die Programmreihenfolge beibehalten wird, da es nicht möglich ist, daß ein Zugriff beendet wird, bis sichergestellt ist, daß die jüngsten Daten beim Zugriff des Arrays empfangen werden.
- Ein technischer Vorteil der Erfindung besteht darin, daß mehrere Zugriffe auf das Datenarray in jedem Taktzyklus durchgeführt werden können.
- Ein weiterer technischer Vorteil der Erfindung besteht darin, daß Adreßkonflikte verwaltet und die Programmreihenfolge mit einem Cache beibehalten werden kann, der eine geringere Komplexität und weniger Oberflächenbereich der CPU erfordert.
- Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend unter Bezugnahme auf die beigefügten Zeichnungen näher erläutert. Es zeigen:
-
1 ein Blockdiagramm, das die erfinderische Cacheanordnung darstellt; -
2A und2B die inneren Elemente des L1-Caches von1 , die bei einer Speicheroperation verwendet werden; -
3 die Stufen, in denen Zugriffseinträge aus den Warteschlangen ausgegeben werden; -
4A und4B die Abschnitte des Ausgabealgorithmusses für den L1-fache von1 ; -
5 ein Flußdiagramm, das die Pipelineoperationen des L1-Caches für eine Serie von Zugriffsanfragen darstellt; -
6A und6B die Abbruchlogik, die Zugriffe abbricht, die anderen Zugriffen folgen; und -
7 eine bekannte Anordnung für eine Cachestruktur. -
1 ist ein Blockdiagramm, das die Anordnung100 des L1-Caches101 mit dem L0-Befehlscache102 , dem L0-Datencache103 , der CPU104 und dem L2-Cache105 und die Informationswege zwischen den Caches, der CPU104 und dem Systembus106 darstellt. - Der (Levell-Cache) L1-Cache
101 , der ein kombinierter Daten- und Befehlscache ist, empfängt Zugriffsanfragen von dem L0-Datencache103 . In diesem L1-Cache sind Warteschlangenstrukturen umfaßt, die die Etiketten und die Daten für Informationen, die in dem Cache gespeichert sind, halten. Der L1-Cache ist konfiguriert, um jeden Taktzyklus vier Zugriffe oder Zugriffsanfragen von dem L0-Datencache über vier Tore107 zu empfangen. Die Zugriffe können Speichervorgänge oder Ladevorgänge sein. Ein Speichervorgang oder ein Speichern ist eine Speicherzugriffsanfrage, die Daten zu einem Cache schreiben möchte. Ein Ladevorgang oder ein Laden ist eine Speicherzugriffsanfrage, die Daten von dem Cache lesen möchte. Der L1-Cache verwendet eine Pipeline und zwei Warteschlangen, um die Zugriffsanfragen zu verwalten. Die Zugriffe können aus der Pipeline oder den Warteschlangen zum Verarbeiten gezogen werden. Der L1-Cache kann bis zu zwei Ganzzahlresultate pro Takt über zwei Tore108 zu dem L0-Daten- (L0d-) Cache103 zuführen. Diese Ganzzahlresultate können durch den L0d-Cache zu den Ganzzahlallgemeinregistern in dem CPU-Kern104 gesendet werden. Der L1-Cache kann ferner bis zu vier Gleitkommaresultate pro Takt über vier Tore109 direkt zu den Gleitkommaregistern des CPU-Kerns104 zuführen. Der L1-Cache kann ferner 256 Bits von Befehlsdaten zu dem L0i-Cache (L0-Befehlscache) über den Rückgabebus110 senden. Die Schnittstellen erlauben es dem L1-Cache mit den anderen Caches, der CPU und anderen Elementen, die mit dem Bus106 gekoppelt sind, zu kommunizieren. Der Bus113 lie fert eine Mehrprozessorunterstützung, indem Schnüffelanfragen von anderen Prozessoren, um auf den L0-Cache zuzugreifen, ermöglicht werden. Es sei bemerkt, daß eine Schnüffelanfrage bzw. eine Snoop-Anfrage zu dem L1-Cache weitergeleitet wird, als ob das Schnüffeln eine CPU-Anfrage ist. - Der Weg
114 zwischen dem L0-Befehlscache und dem L0-Datencache dient für Befehlsholanfragen, die den L0-Befehlscache (L0i-Cache) verfehlt haben. Der L0i-Cache führt eine Anfrage des L0-Datencaches nach einer Speicherzeile durch, die auszuführende Befehle enthält. Der L0-Datencache verwendet ein nicht verwendetes Tor der vier Tore107 , um die Befehlsanfrage zu dem L1-Cache101 zu senden. - Der Weg
112 besteht tatsächlich aus zwei Wegen. Der Anfrageteil des Wegs112 wird zum Senden von Daten- oder Befehls-Zugriffen zu dem L2-Cache105 verwendet. Diese Anfragen können spekulativ, d. h. vor der Kenntnis eines Zugriffsverfehlens des L1-Caches, gesendet werden, um die Latenz des Zugreifens auf den L2-Cache zu minimieren. Der L2 liefert eine vollständige Zeile von Daten in vier Takten über den Datenrückgabebus111 zu dem L1-Cache101 . Der L1-Cache füllt die volle Datenzeile in dem L1-Cache und kann die Resultate zu dem notwendigen Verbraucher umleiten, der102 ,103 oder104 sein kann. Der andere Weg des Wegs112 ist der Schnüffelreaktionsweg. Für ein Schnüffeln des L1-Caches liefert der L1 eine Bericht zu dem L2/Bus-Cluster bzw. der L2/Bus-Gruppe hinsichtlich des Status der Zeile in dem L1-Cache. Dieses Resultat wird unter Verwendung des Schnüffelreaktionswegteils des Wegs112 geliefert. - Es sei bemerkt, daß der Befehlsrückgabebus
110 , die neuen Zugriffstore107 , die Ganzzahlrückgabetore108 und die fp-Rückgabetore (fp = floating point = Gleitkomma)109 , das L2-Anfragetor112 und der Datenrückgabebus111 alle zur gleichen Zeit mit einigen Einschränkungen aktiv sein können. Die größte Einschränkung besteht hinsichtlich des fp-Rückgabetors109 , der Ganzzahlrückgabetore108 und der Befehls rückgabetore110 . Es gibt mehrere mögliche maximale Kombinationen der Aktivität, die unterstützt werden können. Die Begrenzungen basieren auf der Vier-Zugriffe-pro-Takt-Begrenzung für Datenzugriffe und den Arraybegrenzungen, daß lediglich 512 Bits pro Takt zugeführt werden können, und der Überzeichnungslogik, die Betriebsmittelkonfliktblockierungen bis zu einem gewissen Grad lindern kann. Die mögliche gleichzeitige Tornutzung der L1-Rückgabetore109 ,108 und110 sieht wie folgt aus: - Es sei bemerkt, daß die zwei Ganzzahltore mit den vier Gleitkomma-Toren tatsächlich die Ganzzahltore verwenden, um eine Datenzeile zu dem L0d-Cache zu senden.
- Die Anordnung
100 arbeitet wie folgt. Die CPU104 gibt beispielsweise einen Ganzzahlladetypbefehl aus, der zu dem L0-Datencache und zu dem L1-Cache parallel gesendet wird. Auf die Etiketten jedes Caches wird parallel zugegriffen. Es sei bemerkt, daß auf die Etiketten des L1-Caches spekulativ, mit anderen Worten unter der Annahme, daß der L0-Datencache nicht die Daten aufweist und ein Verfehlen auftreten wird, zugegriffen wird. Wenn der L0-Datencache verfehlt, dann wird der L1 die Resultate dieses spekulativen Etikettenzugriffs verwenden, um zu bestimmen, ob derselbe die Daten aufweist oder nicht. Wenn der L0-Datencache die angefragten Daten aufweist, dann wird der L0 die Daten zu der CPU-Kernregisterdatei zurückgeben, und L1 wird den Zugriff anhalten, selbst wenn derselbe spekulativ auf die Etiketten und ferner spekulativ auf die Daten zugegriffen hat. Der L0-Datencache sendet ein Signal zu dem L1-Cache, um den L1-Cache über ei nen Treffer oder ein Verfehlen zu informieren. Wenn der L0-Datencache ein Verfehlen aufweist und der L1-Cache einen Treffer aufweist, dann werden die Ganzzahldaten zu dem L0-Datencache103 über die Tore108 zurückgegeben. Die Daten können beim Bewegen einer Zeile von Daten hinauf zu dem L0-Datencache verwendet werden und/oder über den L0-Datencache zu der CPU-Kernganzzahlregisterdatei gesendet werden. - Nachdem der L1-Cache die spekulative Anfrage von dem L0-Cache empfängt, sendet der L1-Cache eine spekulative Anfrage zu dem L2-Cache. Wenn der L1-Cache verfehlt, dann ordnet der L1-Cache eine Zeile in dem Array desselben in Erwartung einer Datenrückgabe von dem L2-Cache zu. Es sei bemerkt, daß der Bus
112 , der die spekulative Anfrage zu dem L2-Cache durchführt, ein Einzeltorbus ist, der eine Anfrage pro Taktzyklus tragen kann, so daß prioritätsausgewählte Strukturen verwendet werden, um die geeigneten L2-Cachestrukturen mit dem Bus zu verbinden. Wenn der L2-Cache die Daten aufweist, und unter der Annahme, daß der L0-Cache und der L1-Cache diese nicht aufweisen, sendet dann der L2-Cache die Daten zurück zu dem L1-Cache. Der L1-Cache wird diese Daten in den L1-Cache füllen. Zuerst puffert derselbe eine vollständige Zeile, einschließlich der angefragten Daten, und schreibt die Zeile dann in das L1-Cachearray. Parallel zu dem Puffern sendet der Cache ferner die angefragten Daten zu dem LO-Datencache und/oder dem CPU-Kern. Wenn der L2 verfehlt, dann verwendet der L2 seine BRQ-Struktur (BRQ = Bus Request Queue) oder Busanfragewarteschlange, um eine Anfrage in dem Prozessorschnittstellenspeicherbus106 oder dem Systembus zu senden. Diese Anfrage wird eine Zeile aus dem RAM-Speicher wiedergewinnen. Es sei bemerkt, daß der L2-Cache größer als der L1-Cache sein kann, und der L1-Cache größer als die Kombination des L0-Befehlscaches und des L0-Datencaches sein kann. Es sei ferner bemerkt, daß L0, L1 und L2 ge samt auf dem Prozessorchip positioniert sein können, um die Latenz bzw. Reaktionszeit zu reduzieren. -
2A stellt den Adreßinformationsweg für eine Speicheroperation dar. Diese Flußanordnung300 beginnt mit dem Etikettenzugriff und endet mit dem Speichern der Daten in dem Speicherarray des L1-Caches201 . Ein Zugriff, der die physische Adresse umfaßt, wird von dem L0-Datencache zu dem L1-Cache gesendet, in dem auf die Etiketten durch die Schaltung205 zugegriffen wird, um zu bestimmen, ob ein Treffer aufgetreten ist. Wenn ein Treffer aufgetreten ist, wird der Zugriff zu entweder der Befehlswarteschlange206 oder der Datenwarteschlange209 gesendet. - Eine Prioritätslogik (nicht gezeigt) steuert den Multiplexer
220 und wählt dadurch entweder die Datenwarteschlange209 oder die Umleitung als die Quelle der Adreßinformationen aus. Es sei bemerkt, daß bis zu vier Zugriffe in dem gleichen Zyklus gehandhabt werden können. Die Latches221 ,222 ,223 werden für Zeitabstimmungszwecke beim Bewegen der Daten entlang der Pipeline verwendet. Der Multiplexer224 erlaubt es, daß Adressen für Füllungen von dem Tor111 hineingebracht werden. Die ausgewählte Adresse wird als die Adresse für die Speicherung in dem Array201 verwendet. - Der Multiplexer
210 wird zum Auswählen der Umgehungszugriffe (von107 /205 ), der Speicherzugriffe (von223 und224 ) und der Füllzugriffe (von223 und224 ) verwendet. Es sei bemerkt, daß die Ladevorgänge und die Speichervorgänge von dem Tor107 ausgehen. - Es sei bemerkt, daß ein Fenster zwischen den Speichervorgängen und den Ladevorgängen besteht. Da einige Speichervorgänge ferner Ladevorgänge durchführen, können Speichervorgänge ihre Daten solange nicht in das Speicherarray schreiben, bis dieselben mit den Ladedaten kombiniert wurden und ein neuer ECC erzeugt wurde. Folglich können die Speichervorgänge bis drei Pipe-Stufen nach dem frühesten Zeitpunkt, zu dem ein Ladevorgang durchgeführt werden konnte, nicht auftreten. Ladevorgänge können vor Speichervorgängen ausgegeben werden, da die Ladevorgänge solange zu warten haben, bis ein Speichervorgang erledigt ist. Folglich können Ladevorgänge auf die Datenarrays dann zugreifen, sobald dies möglich ist, und Speichervorgänge werden durchgeführt, um das Array so bald wie möglich zu aktualisieren, wie es dem langsamsten Speichervorgang möglich ist. Daher befinden sich drei Takte zwischen der Pipelinestufe eines Ladevorgangs und derselben eines Speichervorgangs, der das Array beeinflußt. Daher gibt es die zusätzlichen Pipelinelatches bzw. Pipelinezwischenspeicher
221 ,222 ,223 , die in2A gezeigt sind. -
2B stellt den Fluß von Daten bei einer Speicheroperation dar. Dieser Fluß beginnt mit einem Multiplexer301 , der die Registerdateidaten in das Speicherformat stellt. Die Latches302 ,303 ,304 ,305 werden verwendet, um die zeitliche Abstimmung in der Pipeline beizubehalten. Nach der Rotation bzw. der Drehung werden die Daten in der Datenwarteschlange306 plaziert, die sich von der Datenwarteschlange209 unterscheidet. Die Datenwarteschlange209 hält eine Adresse, während die Datenwarteschlange306 die Daten hält, die der Adresse zugeordnet werden sollen. Es sei bemerkt, daß maximal zwei Speichervorgänge pro Zyklus empfangen werden, es kann jedoch eine Gesamtzahl von vier Zugriffen pro Zyklus empfangen werden. Folglich sind der Multiplexer/das Latch/die Warteschlange301 ,302 und306 entworfen, um lediglich zwei Zugriffe pro Takt, die spezifischen zwei Speichervorgänge, die pro Takt möglich sind, zu akzeptieren. Der Multiplexer215 ermöglicht es, daß Daten, die für eine Lesen/Modifizieren/Schreiben-Operation geladen werden, gespeichert werden. Der ECC wird für die Daten erzeugt, und wird dann in dem Array201 zusammen mit den Daten gespeichert. -
3 stellt den Informationsfluß für die Dateneinfügungen in die Warteschlangen des L1-Caches101 dar. Die obere Pipeline402 ist die Haupt-CPU-Pipeline und weist die EXE- (Ausführungs-), DET- (Ausnahmeerfassungs-) und WB- (Zurückschreibe-) Stufen auf. Die physische Adresse404 der Zugriffsanfrage wird von der L0M-Stufe empfangen. Die Speicherdaten405 werden durch die CPU in der EXE-Stufe gesendet. Die Einfügungen treten in der Stufe L0W auf. Der L1-Cache verwendet fünf Warteschlangen. - Die erste Warteschlange ist die Datenwarteschlange
306 , die die tatsächlichen Daten hält, die bei der Speicheroperation verwendet werden. Die Daten werden in die Warteschlange in der Stufe L0W403 eingefügt. Diese Daten werden später für die Speicherung in dem L1-Array ausgelesen. Die nächste Warteschlange ist der Füllpuffer407 . Diese Warteschlange wird verwendet, um Informationen über die Anfragen zu halten, die zu dem L2-Cache oder der Busgruppe gemacht werden. Solche Anfragen werden verarbeitet, wenn ein Verfehlen für den L1-Cache auftritt. Die Informationen in der Warteschlange werden beim Verarbeiten der Datenrückgaben von dem L2-Cache oder der Busgruppe und zum Verwalten von Adressenkonflikten verwendet. Die dritte Warteschlange ist eine Datenwarteschlange209 , die die Adresse und andere Informationen, wie z. B. Steuer- und Anordnungs-Informationen, hält, die den Schreibdaten zugeordnet sind, die in der Warteschlange306 gespeichert sind. Die Steuerinformationen umfassen, ob der Zugriff ein L1-Cache-Treffer, ein L1-Cache-Verfehlen oder ein Umlauf ist. Andere Informationen umfassen den Speichertyp, ob der Zugriff ein Zurückschreiben, ein Durchschreiben oder nicht cachebar ist. Und ferner, ob der L0-Cache zu füllen oder nicht zu füllen ist, und wenn dies der Fall ist, Informationen hinsichtlich der Füllung, die diesem Zugriff zugeordnet ist. Weitere Informationsdetails, wie z. B. ob der Zugriff erfolgreich aus der CPU-Pipeline zurückgezogen wurde, was gültig ist, wenn der Zugriff keine Fehler oder Fallenanzeigen aufweist, die verhindern würden, daß derselbe den Speicher aktualisiert oder Daten zu einem Zielregister (für einen Ladevorgang) zurückgibt. Die Warteschlange kann 32 Einträge halten. Diese Informationen werden beim Zugreifen auf den L1-Cache, dem Ausgeben von Daten zu dem L2-Cache und dem Anordnen und der Adreßkonfliktverwaltung verwendet. Die nächste Warteschlange ist die Befehlswarteschlange206 . Befehle werden, wenn dieselben in dem L1-Cache eintreffen, zu der Befehlswarteschlange weitergeleitet. Die Befehlswarteschlange wird mit einem anderen Algorithmus als die Datenwarteschlange209 verwaltet, da sich die Anordnungserfordernisse für Befehlszugriffe von denselben für die Datenzugriffe unterscheiden. - Die Anordnung von
3 wird wie folgt betrieben. Die Speicherdaten treten durch den Multiplexer301 in die DET-Stufe ein. Die Speicherdaten werden dann in der Datenwarteschlange306 über den Latch302 in der WRB-Stufe der CPU-Pipeline402 gespeichert403 . Diese Schritte formatieren die Speicherdaten in das Speicherformat und fügen die Daten in die Datenwarteschlange306 ein. Die physische Adresse404 von dem TLB und die anderen Zugriffsinformationen406 werden in der L0M-Stufe empfangen. Die anderen Zugriffsinformationen weisen den OP-Code, die Datengröße und beliebige Informationen aus dem TLB, wie z. B. den Speicherattributtyp, auf. CAM-Prüfungen407 ,408 oder Prüfungen des inhaltsadressierbaren Speichers (CAM; CAM = Content Addressable Memory) werden an dem Füllpuffer und der Datenwarteschlange209 durchgeführt, um zu bestimmen, ob es Konflikte mit anderen anhängigen Zugriffsanfragen in der nächsten Stufe, nämlich L0D, gibt. Eine CAM-Prüfung vergleicht die Adresse der Zugriffsanfrage mit den Adressen der Zugriffseinträge in den Warteschlangen. - Wenn ein Verfehlen in sowohl dem Füllpuffer als auch den Datenwarteschlangen-CAM auftritt, dann gibt es keine Konflikte mit den Warteschlangeneinträgen und die Warteschlangen werden, wie benötigt, gefüllt.
- Wenn ein Treffer in dem Füllpuffer-CAM auftritt, dann hat eine vorhergehende Anfrage in dem L1-Cache verfehlt und ein Anfrageeintrag ist für die Daten von entweder dem L2-Cache oder der Busgruppe anhängig. Es sei bemerkt, daß ein Treffer in dem Füllpuffer-CAM nicht notwendigerweise bedeutet, daß ebenfalls ein Treffer in dem CAM der Datenwarteschlange
209 auftritt. Die Zugriffsanfrage, die übereinstimmt, wird als ein Umlaufeintrag in entweder die Datenwarteschlange oder die Befehlswarteschlange, wie geeignet, eingefügt. Der umlaufende Eintrag wird solange nicht auf den Cache zugreifen, bis das vorhergehende Verfehlen zurückgegeben wird. - Wenn ein Treffer in dem Datenwarteschlangen-CAM auftritt, dann hängt die Erledigung desselben von den L1-Etikettenübereinstimmungsinformationen von sowohl dem Zugriff als auch dem Eintrag ab. Wenn sowohl der Zugriff als auch der kollidierende Eintrag (Konflikteintrag) L1-Treffer aufweisen, dann wird der Zugriff in die Datenwarteschlange als ein L1-Treffereintrag eingefügt. Wenn der Zugriff ein L1-Verfehlen aufweist und der Eintrag einen L1-Treffer aufweist, dann wird der Zugriff in die Datenwarteschlange als ein L1-Verfehlen-Eintrag eingefügt. Ein illegaler Zustand besteht dort, wo der Zugriff einen L1-Treffer aufweist und der Eintrag ein L1-Verfehlen aufweist, da diese Kombination nicht auftreten kann. Wenn sowohl der Zugriff als auch der Eintrag L1-Verfehlungen sind, dann wird der Zugriff in die Datenwarteschlange als ein Umlaufeintrag eingefügt.
- Treffer in dem L1-Cache werden gemäß dem Zugriffstyp derselben, z. B. Laden oder Speichern, und gemäß der Zugriffsgröße verwaltet. Wenn einer (oder beide) der übereinstimmenden Zugriffe, alt oder neu, ein Speichervorgang ist, dann werden Konfliktinformationen hinsichtlich der übereinstimmenden Adresse in der Warteschlange zusammen mit dem neueren Zugriff gespeichert. Die Konfliktinformationen betreffen einen speziellen architektonischen Anordnungsmechanismus, der effektive Freigabe genannt wird. Der Ausgabealgorithmus verwendet diesen Mechanismus, um sicherzustellen, daß der neuere Zugriff nicht vor dem älteren Zugriff ausgegeben wird. Wenn insbesondere einer der Zugriffe ein Speichern bzw. ein Speichervorgang ist, dann werden die Zugriffe der Reihe nach ausgegeben. Wenn beide übereinstimmenden Zugriffe Ladevorgänge sind, dann können dieselben in jeder beliebigen Reihenfolge ausgegeben werden.
- Es gibt drei Zustände für einen Zugriff in sowohl die Datenwarteschlange
209 als auch die Befehlswarteschlange206 , genauer gesagt einen L1-Treffer, ein L1-Verfehlen und ein Umlaufen. Der Füllpuffer weist einen Zustand, nämlich L1-Verfehlen, auf. Das Umlaufen ist ein Anhaltemechanismus, der einen der vier Zugriffe zurück zu der L0M-Stufe leitet, in der auf die Etiketten neu zugegriffen wird. Das Umlaufen ermöglicht es, daß Zugriffe beispielsweise angehalten werden, wenn ein Zugriff einen Konflikt mit einem vorhergehenden Verfehlen aufweist, das auf von dem L2-Cache oder der Busgruppe zurückgegebene Daten wartet, dann kann der neuere Zugriff so lange umlaufen, bis die Daten eintreffen. Der Umlauf ist hinsichtlich der Anzahl der Male, mit der ein Zugriff umläuft, unbegrenzt. Es sei bemerkt, daß ein Treffer und ein Verfehlen hier einen Treffer und ein Verfehlen be deuten, wie es durch die L1-Etikettenzugriffsprüfung und nicht die Füllpuffer- und Datenwarteschlangen-CAM-Prüfungen bestimmt wird. Die L1-Etikettenzugriffsprüfung wird parallel zu dem L0-Zugriff durchgeführt. Ein "Verfehlen" wird zu dem L2-Cache oder der Busgruppe gesendet, während ein "Treffer" anzeigt, daß sich die Daten in dem L1-Cache befinden und aus dem L1-Cache wiedergewonnen werden können. - Wenn versucht wird, einen Zugriff in die Datenwarteschlange
401 einzufügen, werden zusätzlich zu den Anordnungs- und den Adreß-Informationen ferner Bankkonfliktinformationen419 bestimmt, um den Ausgabealgorithmus zu optimieren. Diese Informationen beziehen sich auf den Entwurf des Cachespeicherarrays. Idealerweise greift beim gleichzeitigen Verarbeiten von mehreren Zugriffen jeder Zugriff auf unterschiedliche Speicherbänke zu, da zwei Zugriffe, die die gleiche Bank betreffen, nicht in dem gleichen Zyklus verarbeitet werden können (es sei bemerkt, daß eine oder mehrere Bänke bei einem Zugriff betroffen sein können). Folglich werden Zugriffe, die die gleiche(n) Speicherbank(en) betreffen, unterschiedlichen Ausgabezyklen zugewiesen, um die Leistung zu verbessern. Jegliche Bankkonflikte werden zusammen mit dem Zugriff in die Datenwarteschlange209 gespeichert. Es sei bemerkt, daß Einfügungen von Befehlen206 nicht überprüft werden, da lediglich ein Befehl bei einem Zyklus gespeichert oder geladen werden kann, während mehrere Datenzugriffe (vier) in einem einzigen Zyklus durchgeführt werden können, so daß keine Anordnungskonflikte mit Befehlen auftreten. Bei Befehlen werden jedoch Adreßkonfliktüberprüfungen ähnlich zu denselben, die für Daten, z. B. dem CAM408 , durchgeführt werden, durchgeführt, so daß lediglich ein Verfehlen zu einem Zeitpunkt für eine gegebene Zeilenadresse verfolgt wird. - Wie in den
2A und2B gezeigt, kann die Datenwarteschlange306 vier Zugriffe pro Takt die Pipeline hinunter ausgeben, wobei2A den Adreßweg darstellt und2B den Datenweg darstellt. Mehrere Zugriffe (Ladevorgänge oder Speichervorgänge) können nicht auf die gleiche Speicherbank gleichzeitig zugreifen. Das Cachespeicherarray201 ist in 16 Bänke eingeteilt. Jede Bank weist eine getrennte Zugriffslogik oder Zugriffsschaltungsanordnung auf. Folglich kann die Logik lediglich einen Zugriff zu einem Zeitpunkt (pro Takt) erfüllen. Die Bankidentifikation für einen Zugriff ist ein Teil der Speicheradresse, z. B. die Bits 7 bis 4 der Zugriffsadresse. Wenn folglich zwei Speicherzugriffe die Pipeline hinunter gesendet werden, wobei der erste auf die Bänke 1 bis 3 zugreift und der zweite auf die Bänke 3 bis 5 zugreift, dann können, da die Zugriffe überlappen, d. h. Bank 3, dann beide Zugriffe nicht beendet werden. - Vor dem Einfügen der Zugriffe in die Warteschlangen, d. h. in die Warteschlange
209 , führt der Cache eine CAM-Prüfung durch, um Bankkonflikte zu bestimmen409 . Diese CAM-Prüfung vergleicht die Banknummern jedes neuen Zugriffs mit den Zugriffen, die in der Warteschlange gespeichert sind. Da mehrere Zugriffe in einem Taktzyklus eingefügt werden können, vergleicht die CAM-Prüfung ferner die Banknummern jedes neuen Zugriffs mit den anderen neuen Zugriffen in dem gleichen Taktzyklus. Jeder alte Zugriff, der einen Konflikt aufweist, wird mit Konfliktinformationen etikettiert, die anzeigen, daß derselbe einen Bankkonflikt aufweist, und Informationen umfassen, die die kollidierenden jüngeren Zugriffe identifizieren. -
4A stellt den Abschnitt des Ausgabealgorithmusses dar, der Cachespeicherbankkonflikte, insbesondere den Abschnitt der Logik für den Eintrag C der Datenwarteschlange, verwaltet. Diese Logik wird für jeden Eintrag in der Warteschlange wiederholt. Wenn folglich die Warteschlange 32 Einträge aufweist, dann wird diese Logik folglich 32 Male wiederholt. In4A sind drei Zugriffseinträge A, B, C gezeigt, wobei A älter als B und B älter als C ist. Es sei angenommen, daß der Ein trag A einen Konflikt mit dem Eintrag C aufweist, dann wird der Eintrag A mit einem Bit503 etikettiert, das einen Konflikt mit dem Eintrag C anzeigt. Es sei bemerkt, daß C nicht etikettiert ist, dieser Ausgabemechanismus ist wirksam, da Einträge in der Programmreihenfolge ausgegeben werden. Jeder Eintrag weist ein UND-Gatter501 auf, das mit einer Anfrageleitung502 und der Konfliktbitleitung503 verbunden ist. Die Anfrageleitung zeigt an, daß ein spezieller Eintrag versucht, auszugeben (oder ernannt wurde, um auszugeben). Es sei angenommen, daß der Eintrag A und der Eintrag C versuchen, auszugeben. Folglich wird das UND-Gatter501 , wenn sich beide Eingangssignale in einem hohen Zustand befinden, in einen hohen Zustand gehen, und das hohe Eingangssignal zu einem ODER-Gatter504 liefern. Wenn sich eines der Eingangssignale desselben in einem hohen Zustand befindet, geht das ODER-Gatter504 in einen hohen Zustand. Da sich beide Eingangssignale zu dem UND-Gatter505 in einem hohen Zustand befinden, wird dann das UND-Gatter505 bewirken, daß ein Entscheidungssignal506 bei dem nächsten Zyklus in den niedrigen Zustand geht. Das Entscheidungssignal zeigt an, daß die Finden-der-ersten-Vier-Logik507 entscheiden soll, welcher Eintrag A oder C ausgegeben werden soll. Es sei bemerkt, daß jeder der 32 Einträge ein Entscheidungssignal aufweist, das sich in einem hohen Zustand befinden muß, wenn ein Zugriff ausgegeben werden soll. Jedes Entscheidungssignal eines Eintrags wird mit dem Anfragesignal UND-verknüpft, und das Ausgangssignal wird in die Finden-der-ersten-Vier-Logik gespeist. Wenn ein Entscheidungssignal für einen Eintrag deaktiviert wird, dann zeigt das Eingangssignal der Finden-der-ersten-Vier-Logik für diesen Eintrag, daß der Eintrag nicht in diesem Takt ausgegeben werden kann. Andere Einträge, die ausgegeben werden können, werden betrachtet und können ausgegeben werden. - Die Logik
507 bestimmt, welcher Eintrag älter ist, und ermöglicht es, daß dieser Eintrag ausgegeben wird. Da C nicht ausgegeben werden kann, bestimmt die Logik507 drei andere Zugriffe, die ausgeben können, und ermöglicht es A und den drei anderen Einträgen, auszugeben. Folglich verhindert diese Logik einen Bankkonflikt, indem dieselbe verhindert, daß zwei (oder mehrere) Zugriffe ausgegeben werden, die auf die gleiche Cachespeicherbank zugreifen. Es sei bemerkt, daß die Logik bestimmt, welcher der älteste Eintrag ist, da die Einträge auf eine deterministische Art und Weise in einer Warteschlange, d. h. der Älteste zuerst, dann der Jüngste, gefüllt werden. Es sei bemerkt, daß diese Logik in einem einzigen Taktzyklus wirksam ist. Diese Logik befindet sich in einer Datenwarteschlange209 und ist in Stufen L1N und L1I wirksam, obwohl dieselbe in einem einzigen Zyklus wirksam ist, der zwischen zwei Zyklen geteilt ist. Es sei bemerkt, daß sich die Entscheidungslogik in der L1N befindet, die Erste-Vier-Logik ist jedoch am Beginn der L1I wirksam. Es sei ferner bemerkt, daß diese Logik verhindert, daß der Zugriffseintrag C ausgibt. Dieser Eintrag kann für eine weitere Ausgabe in dem nächsten Taktzyklus berücksichtigt werden. - Wie es in
3 gezeigt ist, führt vor dem Einfügen der Zugriffe in die Warteschlange, d. h. die Datenwarteschlange209 , der Cache eine CAM-Prüfung durch, um Adreßkonflikte zu bestimmen,408 . Diese CAM-Prüfung vergleicht Adressen für jeden neuen Zugriff mit den Zugriffen, die in der Warteschlange gespeichert sind. Da mehrere Zugriffe in einem Taktzyklus eingefügt werden können, vergleicht die CAM-Prüfung ferner die Adressen jedes neuen Zugriffs mit anderen neuen Zugriffen in dem gleichen Taktzyklus. Jeder neue Zugriff, der einen Konflikt aufweist, wird mit Konfliktinformationen etikettiert, die anzeigen, daß derselbe einen Konflikt aufweist, und Informationen umfassen, die den (die) kollidierenden älteren Zugriff(e) identifizieren. Es sei bemerkt, daß dies anders als bei Bankkonflikten ist. Dieses Etikettieren wird mit der "Effektive-Freigabe"-Notation durchgeführt. Es sei ferner bemerkt, daß ein Bankkonflikt zwei Zugriffe sind, die die gleiche Speicherbank erfordern, um beendet zu werden. Ein Adreßkonflikt sind zwei Zugriffe, bei denen der Jüngere nach dem Älteren in der Reihenfolge beendet werden muß. Wenn die Zugriffe nicht in der Reihenfolge beendet werden, dann wird entweder der Speicher oder ein CPU-Register mit den falschen Informationen aktualisiert. -
4B stellt den Abschnitt des Ausgabealgorithmusses dar, der Cachespeicheradreßkonflikte verwaltet, insbesondere den Abschnitt der Logik für den Eintrag C der Datenwarteschlange. Diese Logik wird für jeden Eintrag in der Warteschlange wiederholt. Wenn folglich die Warteschlange 32 Einträge aufweist, dann wird diese Logik 32 Male wiederholt. In4B sind drei Zugriffseinträge A, B, C gezeigt, wobei A älter als B und B älter als C ist. Es sei angenommen, daß A, B und C versuchen, auszugeben, wobei B und C versuchen, die gleiche Position zu adressieren, und A und B einen Bankkonflikt aufweisen. Bei dem Adreßkonflikt wird das Effektive-Freigabe-Bit513 auf den neueren Zugriff, hier den Eintrag C, eingestellt. Dieses Bit bewirkt, daß der Eintrag wie eine Freigabeoperation behandelt wird. Diese Freigabeoperation definiert den Eintrag als solange nicht in der Lage beendet zu werden, bis ältere Zugriffe beendet wurden. Es sei bemerkt, daß Beendigung bedeutet, bis zu einem Punkt verarbeitet, bei dem das Beendigen des Zugriffs nicht mehr verhindert werden kann. Bei dem Bankkonflikt ruft die Logik von4A das Entscheidungssignal für den Eintrag B auf. Das Sperrsignal508 zeigt, daß verhindert wurde, daß ein Eintrag ausgegeben wird, und basiert auf dem Entscheidungssignal. Folglich ist das Sperrsignal für den Eintrag B aktiv. Wenn sich beide Eingangssignale in einem hohen Zustand befinden, geht das UND-Gatter509 in einen hohen Zustand. Wenn sich eines der Eingangssignale desselben in einem hohen Zustand befindet, geht das ODER-Gatter510 in einen hohen Zustand. Das Ausgabe-H-Bit oder das Signal512 zeigt, ob der spezielle Zugriffseintrag, der zugeordnet ist, tatsächlich ausgegeben wird. Da sich nun alle drei Eingangssignale in einem hohen Zustand befinden, geht das UND-Gatter511 in einen hohen Zustand, was eine ungültige Freigabe514 für den Eintrag C zeigt. Es sei bemerkt, daß die effektive Freigabe513 keine architektonische Freigabe, sondern vielmehr eine Hardwareergänzung des Anordnungsmodells ist. Dies ermöglicht es, daß der Ausgabealgorithmus in einer ungeordneten Art und Weise wirkt und dennoch in der Lage ist, zu garantieren, daß Zugriffe in einer Reihenfolge ausgegeben werden, wenn Anordnungsbeschränkungen auferlegt werden müssen. Es sei bemerkt, daß diese Logik in einem einzigen Taktzyklus wirkt. Diese Logik befindet sich in einer Datenwarteschlange209 und ist in Stufen L1I wirksam. Es sei bemerkt, daß der Zugriffeintrag C ausgegeben wurde. Das Ungültige-Freigabe-Bit514 bewirkt, daß der Zugriff auf ungültig geschaltet wird. Der Zugriff bewegt sich ungültig weiter die Pipeline hinunter und wird weggeworfen, wenn der Zugriff das Array201 erreicht. Folglich werden weniger als vier Zugriffe mit dem Array201 verarbeitet. - Ein weiteres Konfliktproblem ist ein Speichern/Laden-Konflikt. Dieser Konflikt ist am besten hinsichtlich eines Beispiels verständlich, das in
5 dargestellt ist. Diese Figur weist die Pipelinestufen515 quer über die Figur und die Zeit516 die Figur hinunter auf.5 betrifft zwei Speichervorgänge und vier Ladevorgänge, die die Pipeline hinunter folgend in der Reihenfolge Speichervorgang1 , LdA, LdB, LdC, LdD und Speichervorgang2 , einer pro Taktzyklus, verarbeitet werden. Alle diese Zugriffe überlappen und beeinflussen den gleichen Abschnitt des Cachespeichers. Alle diese Zugriffe wurden ferner ausgegeben. Es sei bemerkt, daß lediglich ein Eintrag pro Taktzyklus zur Vereinfachung gezeigt ist. Die Pipelinestufen sind in2A und2B gezeigt, wobei die Stufen L1N und L1I sich innerhalb der Datenwarteschlange209 befinden. Die spezifischen Zugriffe, die Adreßkonflikte bewirken, sind ein Speichervorgang, dem ein Ladevorgang folgt, ein Speichervorgang, dem ein Speichervorgang folgt, oder ein Ladevorgang, dem ein Speichervorgang folgt. Es sei bemerkt, daß ein Speichervorgang, dem ein Speichervorgang folgt, ein Problem aus zwei Gründen darstellt. Wenn dieselben ungeordnet durchgeführt werden, dann spiegelt der Speicher den Wert des älteren Speicherns bzw. Speichervorgangs und nicht des jüngeren Speichervorgangs, nachdem beide beendet sind, wider. Wenn zusätzlich der zweite Speichervorgang eine Lesen-Modifizieren-Schreiben-Operation (ein 1-Byte- oder ein 2-Byte-Speichervorgang für den vorliegenden Prozessor) erfordert, dann muß der Leseteil des Lesen-Modifizieren-Schreiben-Speichervorgangs den aktuellen Wert des Speichers lesen. Der Konflikt tritt auf, da Ladevorgänge und Speichervorgänge an einem unterschiedlichen Punkt in der Pipeline verarbeitet werden, insbesondere werden Ladevorgänge in L1M gelesen, während Speichervorgänge in L1W geschrieben werden. Folglich wird der Speichervorgang1 bis zur Zeit L1W nicht verarbeitet, Ladevorgänge LdA, LdB und LdC werden jedoch an der L1M-Stufe vorbeigegangen sein, bevor der Speichervorgang1 beendet wurde. Folglich werden LdA, LdB und LdC inkorrekte Daten, d. h. alte Daten, lesen, es sei denn sie werden abgebrochen. LdD wird die ordnungsgemäßen Daten sehen, sowie derselbe die L1M-Stufe in dem Takt8 erreicht, was nach der Beendigung des Speichervorgangs1 ist, und kann folglich beendet werden. Die Ladevorgänge LdA, LdB und LdC werden umlaufen und können, nachdem der Speichervorgang1 beendet wurde, beendet werden. Es sei bemerkt, daß der Speichervorgang2 solange abgebrochen werden muß, bis LdA, LdB und LdC beendet sind, andernfalls werden die Ladevorgänge die Daten des Speichervorgangs2 und nicht des Speichervorgangs1 lesen. Die Logik in6A und6B führt diese Abbruchvorgänge bzw. Abbrüche durch. - Es sei bemerkt, daß die Speichervorgänge (Schreibevorgänge) mehr Schritte als die Ladevorgänge (Lesevorgänge) erfordern. Beispielsweise benötigen Speichervorgänge, daß ECC für die Speicherdaten erzeugt wird. Ferner können Speichervorgänge ein Lesen von anderen Daten und das Mischen der anderen Daten mit den neuen Daten, um eine Cachezeile zu bilden, betreffen. Diese Schritte erfordern eine zusätzliche Zeit, die für Ladeoperationen nicht benötigt wird. Um ein unnötiges Verzögern von allen Ladevorgängen zu verhindern, können Ladeoperationen auf das Datenarray in der Pipeline früher zugreifen, als Speicheroperationen bereit sind, um auf das Datenarray zuzugreifen.
-
6A stellt die Abbruchlogik600 dar, die Ladevorgänge folgend einer Speicheroperation abbricht. Wenn eine Speicheroperation in der L1A-, L1M-, L1D- oder L1C-Stufe auftritt, die mit der Adresse (die den Index und die Weginformationen aufweist) einer Ladeoperation in der L1A-Stufe übereinstimmt, dann wird der Ladevorgang in L1A abgebrochen. Dies verhindert, daß die Ladevorgänge LdA, LdB und LdC wirksam sind, bevor der Speichervorgang1 in5 wirksam war. Es sei bemerkt, daß, da mehrere Zugriffe in dem gleichen Zyklus ausgegeben werden können, ein Speichervorgang in L1A mit einem Ladevorgang in L1A verglichen wird. Es sei bemerkt, daß der Index und der Weg ein vollständiger Adreßvergleich sind. Es sei ferner bemerkt, daß Speichervorgänge, die versuchen, zusammen in dem gleichen Takt auszugeben, durch die Bankkonfliktlogik behandelt werden. Die abgebrochenen Zugriffe werden auf ungültig geschaltet. Die Zugriffe bewegen sich weiter ungültig die Pipeline hinunter und werden weggeworfen, wenn die Zugriffe das Array201 erreichen. - Ein alternatives Ausführungsbeispiel zu
6A besteht darin, daß kein Speichervorgang-L1C-Vergleich auftritt. In diesem Fall kann, da ein Ladevorgang in L1A lediglich einen Taktzyklus davon entfernt ist, um zulässig zu sein, verarbeitet zu werden, dieser Zugriff an dem Ausgeben für einen Taktzyklus gehindert werden und dann die Erlaubnis erhalten, ausgegeben werden. Folglich kann eine Schaltungsanordnung ähnlich zu derselben von4A verwendet werden, um die Freigabe des Ladevorgangs in L1A zu sperren. Die Bits503 werden für einen Adreßkonflikt, insbesondere einen Bankkonflikt, der sich drei Takte entfernt befindet, eingestellt. Da die Warteschlange solange nicht aktualisiert wird, bis der Speichervorgang beendet ist, kann ein Vergleich zwischen Ladevorgängen in der L1N-Stufe und anhängigen Speichervorgängen in der L1M-Stufe gemacht werden. Dann werden alle Ladevorgänge zu der gleichen Bank wie der Speichervorgang ge sperrt. Ladevorgänge in der L1N-Stufe werden verwendet, da dies die Stufe ist, in der die Entscheidung überprüft wird. Folglich wird LdC gesperrt (oder gehindert) und nicht abgebrochen (oder für ungültig erklärt). Folglich wird LdC einen Taktzyklus verzögert und erhält die gleiche zeitliche Abstimmung wie LdD, so daß LdD und LdC zusammen ausgegeben werden könnten, solange dieselben nicht auf die gleiche Bank zugreifen. -
6B zeigt die Abbruchlogik601 , die Speichervorgänge folgend einer abgebrochenen Lade- oder Speicher-Operation abbricht. Wenn eine Speicheroperation in der L1A-Stufe auftritt, die mit der Adresse eines abgebrochenen Zugriffs (Ladevorgang oder Speichervorgang) in den Stufen L1M, L1D oder L1C übereinstimmt, dann wird der L1A-Speichervorgang abgebrochen. Dies verhindert, daß der Speichervorgang2 in5 wirksam ist, bevor die Ladevorgänge LdA, LdB und LdC wirksam waren. Es sei bemerkt, daß abgebrochene vorhergehende Speichervorgänge ebenfalls bewirken, daß ein folgender Speichervorgang abgebrochen wird. Es sei in5 angenommen, daß der erste Speichervorgang aus einem speziellen Grund abgebrochen wird, und wenn dann der zweite Speichervorgang geschrieben wird, wird der erste Speichervorgang zurück hindurchreichen und den zweiten Speichervorgang überschreiben. Folglich weist der Cache inkorrekte Daten auf, da die Daten von dem zweiten Speichervorgang den ersten Speichervorgang überschreiben sollten. Folglich muß der zweite Speichervorgang abgebrochen werden, wodurch es ermöglicht wird, daß der erste Speichervorgang zurück durchreicht und schreibt, und dann wird der zweite Speichervorgang zurück durchreichen und den ersten Speichervorgang überschreiben. - Folglich garantiert der erfinderische Cache das Verarbeiten von Adreßkonfliktzugriffen der Reihe nach sowie von Bankkonflikten.
Claims (8)
- Cache-Anordnung für ein Computersystem, das einen Prozessor aufweist, wobei die Cache-Anordnung eine Mehrebenencachestruktur (
100 ) aufweist, auf die durch den Prozessor zugegriffen werden kann, um Speicherzugriffsanfragen zu erfüllen, wobei die Mehrebenencachestruktur (100 ) konfiguriert ist, um mehrere Speicherzugriffsanfragen zu empfangen und die mehreren Anfragen parallel zu verarbeiten, um zu bestimmen, ob eine der mehreren Ebenen die mehreren empfangenen Speicherzugriffsanfragen erfüllen kann, wobei eine Ebene der Mehrebenencachestruktur eine Warteschlange (209 ) zum Halten von Einträgen von Adreßinformationen für Datenzugriffe aufweist, dadurch gekennzeichnet, dass die Ebene folgende Merkmale aufweist: eine Konfliktlogik (407 ,408 ,409 ) zum Prüfen jeder Zugriffsanfrage hinsichtlich der Einträge der Warteschlange nach Konflikten, bevor jede Zugriffsanfrage in die Warteschlange eingefügt wird, wobei Informationen, die den Konflikt beschreiben, in die Warteschlange eingefügt werden; und eine Ausgabelogik zum Bestimmen welche Einträge von der Warteschlange basierend auf den Resultaten der Konfliktlogik auszugeben sind. - Cache-Anordnung gemäß Anspruch 1, bei der eine Ebene der Mehrebenencachestruktur (
100 ) folgende Merkmale aufweist: ein Speicherarray (201 ) zum Speichern von Daten, das in einer Mehrzahl von Bänken angeordnet ist; wobei die Konfliktlogik eine Bankkonfliktlogik (409 ) zum Prüfen jeder Zugriffsanfrage hinsichtlich der Einträge der Warteschlange (209 ) nach Bankkonflikten vor der Einfügung jeder Zugriffsanfrage in die Warteschlange ist, wobei ein Bankkonflikt auftritt, wenn sich eine Zugriffsanfrage auf die gleiche Speicherbank wie ein Eintrag bezieht; wobei ein Zugriff mit einem Bankkonflikt in die Warteschlange eingefügt wird, und Informationen, die den Konflikt beschreiben, in die Warteschlange eingefügt werden; und wobei die Ausgabelogik (511 ) den Zugriff und den kollidierenden Eintrag aus der Warteschlange in unterschiedlichen Zyklen basierend auf den Informationen, die den Konflikt beschreiben, ausgibt. - Cache-Anordnung gemäß Anspruch 2, bei der die Informationen, die den Konflikt beschreiben, dem kollidierenden Eintrag in der Warteschlange (
209 ) zugeordnet sind. - Cache-Anordnung gemäß Anspruch 1, bei der die Konfliktlogik eine Adreßkonfliktlogik (
407 ,408 ) zum Prüfen jeder Zugriffsanfrage hinsichtlich der Einträge der Warteschlange nach Adreßkonflikten vor der Einfügung jeder Zugriffsanfrage in die Warteschlange (209 ) ist, wobei ein Adreßkonflikt auftritt, wenn eine Zugriffsanfrage die gleiche Speicherposition wie ein Eintrag betrifft; wobei ein neuer Zugriff mit einem Adreßkonflikt in die Warteschlange eingefügt wird, und Informationen, die den Konflikt beschreiben, in die Warteschlange eingefügt werden; und die Ausgabelogik (511 ) den neuen Zugriff und den kollidierenden Eintrag aus der Warteschlange in unterschiedlichen Zyklen basierend auf den Informationen, die den Konflikt beschreiben, ausgibt. - Cache-Anordnung gemäß Anspruch 4, bei der die Informationen, die den Konflikt beschreiben, dem neuen Zugriff in der Warteschlange zugeordnet sind.
- Cache-Anordnung gemäß Anspruch 1, bei der die Mehrebenencachestruktur die Zugriffe in einer Mehrzahl von Pipelinestufen verarbeitet, wobei die Zugriffe mindestens einen Ladezugriff und einen Speicherzugriff aufweisen, und der Ladezugriff an der Mehrebenencachestruktur in einer früheren Stufe als der Speicherzugriff wirksam ist, und die Mehrebenencachestruktur ferner folgende Merkmale aufweist: eine Ladekonfliktlogik (
600 ) zum Prüfen nach Ladekonflikten zwischen einem früher ausgegebenen Speicherzugriff und einem später ausgegebenen Ladezugriff, wobei ein Ladekonflikt auftritt, wenn der früher ausgegebene Speicherzugriff und der später ausgebende Ladezugriff die gleiche Speicherposition betreffen, und die Pipelinestufe des später ausgebenden Ladezugriffs in der Nähe der Pipelinestufe des früher ausgegebenen Speicherzugriffs positioniert ist, derart, daß der spätere Ladezugriff auf die Mehrebenencachestruktur vor dem früheren Speicherzugriff wirksam ist; und eine Abbruchlogik zum Abbrechen des später ausgebenden Ladezugriffs, wenn die Ladekonfliktlogik einen Ladekonflikt für den Ladezugriff bestimmt. - Cache-Anordnung gemäß Anspruch 6, bei der die Ladekonfliktlogik folgende Merkmale aufweist: eine Logik zum Bestimmen, ob sich ein Ladezugriff, der einen Ladekonflikt aufweist, innerhalb eines Taktzyklusses befindet, der keinen Ladekonflikt aufweist; und eine Verzögerungslogik zum Verzögern eines Ladezugriffs um einen Taktzyklus, das heißt in einen Taktzyklus, der keinen Ladekonflikt aufweist.
- Cache-Anordnung gemäß Anspruch 6 oder 7, bei der die Mehrebenencachestruktur ferner folgende Merkmale aufweist: eine Speicherkonfliktlogik (
601 ) zum Prüfen nach Speicherkonflikten zwischen einem früher ausgegebenen Zugriff und einem später ausgegebenen Speicherzugriff, wobei ein Speicherkonflikt auftritt, wenn der früher ausgegebene Zugriff und der später ausgebende Speicherzugriff die gleiche Speicherposition betreffen, und der früher ausgegebene Zugriff abgebrochen wurde, derart, daß der spätere Speicherzugriff auf die Mehrebenencachestruktur vor dem früher abgebrochenen Zugriff wirksam ist; und eine Abbruchlogik zum Abbrechen des später ausgebenden Speicherzugriffs, wenn die Speicherkonfliktlogik einen Speicherkonflikt bestimmt.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/510279 | 2000-02-21 | ||
US09/510,279 US6539457B1 (en) | 2000-02-21 | 2000-02-21 | Cache address conflict mechanism without store buffers |
Publications (2)
Publication Number | Publication Date |
---|---|
DE10045188A1 DE10045188A1 (de) | 2001-09-06 |
DE10045188B4 true DE10045188B4 (de) | 2005-11-03 |
Family
ID=24030090
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE10045188A Expired - Fee Related DE10045188B4 (de) | 2000-02-21 | 2000-09-13 | Cacheadresskonfliktvorrichtung |
Country Status (2)
Country | Link |
---|---|
US (1) | US6539457B1 (de) |
DE (1) | DE10045188B4 (de) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6711654B2 (en) * | 2001-06-28 | 2004-03-23 | Intel Corporation | Mechanism for bank conflict resolution for an out-of-order cache |
US6839808B2 (en) * | 2001-07-06 | 2005-01-04 | Juniper Networks, Inc. | Processing cluster having multiple compute engines and shared tier one caches |
US20030163643A1 (en) * | 2002-02-22 | 2003-08-28 | Riedlinger Reid James | Bank conflict determination |
US6906978B2 (en) * | 2002-03-19 | 2005-06-14 | Intel Corporation | Flexible integrated memory |
US7000041B2 (en) * | 2003-03-31 | 2006-02-14 | Intel Corporation | Method and an apparatus to efficiently handle read completions that satisfy a read request |
US7146457B2 (en) | 2003-09-24 | 2006-12-05 | Hewlett-Packard Development Company, L.P. | Content addressable memory selectively addressable in a physical address mode and a virtual address mode |
US7451271B2 (en) * | 2004-04-05 | 2008-11-11 | Marvell International Ltd. | Physically-tagged cache with virtually-tagged fill buffers |
US7181575B2 (en) * | 2004-09-29 | 2007-02-20 | Hewlett-Packard Development Company, L.P. | Instruction cache using single-ported memories |
US7631132B1 (en) * | 2004-12-27 | 2009-12-08 | Unisys Corporation | Method and apparatus for prioritized transaction queuing |
CN101547383B (zh) * | 2008-03-26 | 2013-06-05 | 华为技术有限公司 | 一种接入认证方法及接入认证系统以及相关设备 |
US8843690B2 (en) | 2011-07-11 | 2014-09-23 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Memory conflicts learning capability |
KR101292309B1 (ko) * | 2011-12-27 | 2013-07-31 | 숭실대학교산학협력단 | 반도체칩 및 메모리 제어방법, 그리고 그 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 기록매체 |
US8832376B2 (en) * | 2012-03-16 | 2014-09-09 | Infineon Technologies Ag | System and method for implementing a low-cost CPU cache using a single SRAM |
US9286233B2 (en) * | 2012-08-30 | 2016-03-15 | Advanced Micro Devices, Inc. | Oldest operation translation look-aside buffer |
CN104360966B (zh) * | 2014-11-21 | 2017-12-12 | 浪潮(北京)电子信息产业有限公司 | 对块数据进行输入输出操作的方法和装置 |
CN106126450B (zh) * | 2016-06-20 | 2018-10-30 | 中国航天科技集团公司第九研究院第七七一研究所 | 一种应对多核处理器监听访问冲突的Cache设计结构及方法 |
US10380020B2 (en) | 2017-07-17 | 2019-08-13 | International Business Machines Corporation | Achieving high bandwidth on ordered direct memory access write stream into a processor cache |
US10649900B2 (en) * | 2017-11-06 | 2020-05-12 | Samsung Electronics Co., Ltd. | Method to avoid cache access conflict between load and fill |
CN112965668B (zh) * | 2021-03-30 | 2022-04-29 | 上海芷锐电子科技有限公司 | 一种缓存数字电路处理请求冲突的方法 |
CN116107929B (zh) * | 2023-04-13 | 2023-07-25 | 摩尔线程智能科技(北京)有限责任公司 | 一种数据访问方法、装置、存储介质及电子设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE19506734A1 (de) * | 1994-03-02 | 1995-09-07 | Intel Corp | Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5197130A (en) * | 1989-12-29 | 1993-03-23 | Supercomputer Systems Limited Partnership | Cluster architecture for a highly parallel scalar/vector multiprocessor system |
US5261066A (en) * | 1990-03-27 | 1993-11-09 | Digital Equipment Corporation | Data processing system and method with small fully-associative cache and prefetch buffers |
DE4129614C2 (de) * | 1990-09-07 | 2002-03-21 | Hitachi Ltd | System und Verfahren zur Datenverarbeitung |
US5640534A (en) * | 1994-10-05 | 1997-06-17 | International Business Machines Corporation | Method and system for concurrent access in a data cache array utilizing multiple match line selection paths |
US5761706A (en) * | 1994-11-01 | 1998-06-02 | Cray Research, Inc. | Stream buffers for high-performance computer memory system |
US5860095A (en) * | 1996-01-02 | 1999-01-12 | Hewlett-Packard Company | Conflict cache having cache miscounters for a computer memory system |
US5752260A (en) * | 1996-04-29 | 1998-05-12 | International Business Machines Corporation | High-speed, multiple-port, interleaved cache with arbitration of multiple access addresses |
JP2000501539A (ja) * | 1996-09-25 | 2000-02-08 | フィリップス エレクトロニクス ネムローゼ フェンノートシャップ | アドレス競合検出を持つ多重ポート・キャッシュメモリ |
US5781924A (en) * | 1996-09-30 | 1998-07-14 | Sun Microsystems, Inc. | Computer caching methods and apparatus |
US6081873A (en) * | 1997-06-25 | 2000-06-27 | Sun Microsystems, Inc. | In-line bank conflict detection and resolution in a multi-ported non-blocking cache |
US5930819A (en) * | 1997-06-25 | 1999-07-27 | Sun Microsystems, Inc. | Method for performing in-line bank conflict detection and resolution in a multi-ported non-blocking cache |
US6145054A (en) * | 1998-01-21 | 2000-11-07 | Sun Microsystems, Inc. | Apparatus and method for handling multiple mergeable misses in a non-blocking cache |
GB2345770B (en) * | 1999-01-15 | 2003-06-25 | Advanced Risc Mach Ltd | Data processing memory system |
-
2000
- 2000-02-21 US US09/510,279 patent/US6539457B1/en not_active Expired - Lifetime
- 2000-09-13 DE DE10045188A patent/DE10045188B4/de not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE19506734A1 (de) * | 1994-03-02 | 1995-09-07 | Intel Corp | Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange |
Also Published As
Publication number | Publication date |
---|---|
DE10045188A1 (de) | 2001-09-06 |
US6539457B1 (en) | 2003-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE10045188B4 (de) | Cacheadresskonfliktvorrichtung | |
DE4218003C2 (de) | Cache-Steuereinrichtung für ein sekundäres Cache-Speichersystem | |
DE60036016T2 (de) | Schnell multithreading für eng gekoppelte multiprozessoren | |
DE69908193T2 (de) | Ausführung von speicher- und ladeoperationen mittels einer linkdatei | |
DE68926059T2 (de) | Organisation einer integrierten Cache-Einheit zur flexiblen Verwendung beim Entwurf von Cache-Systemen | |
DE68922326T2 (de) | Speicherwarteschlange für eine festgekoppelte Mehrprozessorenkonfiguration mit einem zweistufigen Cache-Pufferspeicher. | |
DE68917325T2 (de) | Verfahren und Vorrichtung zum Schreiben gegenseitiger verriegelter Variablen in einen integrierten Cachespeicher. | |
DE60002200T2 (de) | Umschaltungsverfahren in einem multithreadprozessor | |
DE68917326T2 (de) | Organisation eines integrierten Cachespeichers zur flexiblen Anwendung zur Unterstützung von Multiprozessor-Operationen. | |
DE69429061T2 (de) | Superskalarmikroprozessoren | |
DE4291778B4 (de) | Cache-Speichereinrichtung für ein Mikroprozessorsystem mit einem Cache-Speicher mit asynchronem Datenpfad | |
DE69434728T2 (de) | Synchronisationssystem und verfahren in einem datencachesystem mit aufgeteiltem pegel | |
DE69427734T2 (de) | Linearadressierter Mikroprozessorcachespeicher | |
DE69432133T2 (de) | Datenprozessor mit Cache-Speicher | |
DE60005701T2 (de) | Threadumschaltungslogik in einem multithreadprozessor | |
DE69518676T2 (de) | Cache-Speicheranordnung für einen Speicher | |
DE69327981T2 (de) | Kombinierte Speicheranordnung mit einem Vorausholungspuffer und einem Cachespeicher und Verfahren zur Befehlenversorgung für eine Prozessoreinheit, das diese Anordnung benutzt. | |
DE112007003801B3 (de) | Vorrichtung mit einer speichereinheit und einer logik zur bereitstellung eines effizienten mechanismus‘ für transaktionalspeicherausführungen in out-of-order-prozessoren | |
DE69514165T2 (de) | Mehrstufige Cache-Speicheranordnung | |
DE69331039T2 (de) | Rechnersystem mit einem Vorausholungscachespeicher | |
DE69616223T2 (de) | Datenstromvorausladepufferspeicher mit Datenstromfilters | |
DE60005002T2 (de) | Vertikal-threaded prozessor mit multidimensionalem speicher | |
DE19983793B4 (de) | System mit einem Prozessor, auf dem mehrere, gleichzeitig aktive Ausführungsentitäten ausgeführt werden, und mit einem mehrere, den Ausführungsentitäten zugewiese Cache-Abschnitte aufweisenden Cache-Speicher | |
DE69128741T2 (de) | Mehrstufiger Befehlscachespeicher und Verwendungsverfahren dafür | |
DE102013204414B4 (de) | Daten-Cachespeicherblock-Freigabeanforderungen in einer Cachespeicherhierarchie mit mehreren Ebenen |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
8127 | New person/name/address of the applicant |
Owner name: INTEL CORPORATION, SANTA CLARA, CALIF., US Owner name: HEWLETT-PACKARD CO. (N.D.GES.D.STAATES DELAWARE), |
|
8364 | No opposition during term of opposition | ||
R082 | Change of representative |
Representative=s name: SCHOPPE, ZIMMERMANN, STOECKELER, ZINKLER & PAR, DE Representative=s name: SCHOPPE, ZIMMERMANN, STOECKELER, ZINKLER & PARTNER |
|
R081 | Change of applicant/patentee |
Owner name: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., HOU, US Free format text: FORMER OWNERS: HEWLETT-PACKARD CO. (N.D.GES.D.STAATES DELAWARE), PALO ALTO, CALIF., US; INTEL CORPORATION, SANTA CLARA, CALIF., US Effective date: 20120229 Owner name: INTEL CORPORATION, SANTA CLARA, US Free format text: FORMER OWNERS: HEWLETT-PACKARD CO. (N.D.GES.D.STAATES DELAWARE), PALO ALTO, CALIF., US; INTEL CORPORATION, SANTA CLARA, CALIF., US Effective date: 20120229 Owner name: INTEL CORPORATION, SANTA CLARA, US Free format text: FORMER OWNER: HEWLETT-PACKARD CO. (N.D.GES.D., INTEL CORPORATION, , US Effective date: 20120229 Owner name: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., HOU, US Free format text: FORMER OWNER: HEWLETT-PACKARD CO. (N.D.GES.D., INTEL CORPORATION, , US Effective date: 20120229 |
|
R082 | Change of representative |
Representative=s name: SCHOPPE, ZIMMERMANN, STOECKELER, ZINKLER, SCHE, DE Effective date: 20120229 Representative=s name: SCHOPPE, ZIMMERMANN, STOECKELER, ZINKLER & PAR, DE Effective date: 20120229 |
|
R119 | Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee | ||
R119 | Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee |
Effective date: 20150401 |