DE10045188B4 - Cacheadresskonfliktvorrichtung - Google Patents

Cacheadresskonfliktvorrichtung Download PDF

Info

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
Application number
DE10045188A
Other languages
English (en)
Other versions
DE10045188A1 (de
Inventor
Dean A. Mulla
Reid James Riedlinger
Thomas Grutkowski
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Hewlett Packard Development Co LP
Original Assignee
Intel Corp
Hewlett Packard Co
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp, Hewlett Packard Co filed Critical Intel Corp
Publication of DE10045188A1 publication Critical patent/DE10045188A1/de
Application granted granted Critical
Publication of DE10045188B4 publication Critical patent/DE10045188B4/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches 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

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.

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 TLB 710 ist eine übliche Komponente von modernen Cachearchitekturen, die in der Technik gut bekannt ist. Der TLB 710 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. In 7 wird dementsprechend die MESI-Schaltungsanordnung 714 verwendet, um ein "Echter"-Etikettentreffer-Signal zu berechnen, um zu bestimmen, ob ein echter Etikettentreffer für diese Cacheebene erreicht wurde. Sobald aus dem MESI 714 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 Chips 720 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 und 2B die inneren Elemente des L1-Caches von 1, die bei einer Speicheroperation verwendet werden;
  • 3 die Stufen, in denen Zugriffseinträge aus den Warteschlangen ausgegeben werden;
  • 4A und 4B die Abschnitte des Ausgabealgorithmusses für den L1-fache von 1;
  • 5 ein Flußdiagramm, das die Pipelineoperationen des L1-Caches für eine Serie von Zugriffsanfragen darstellt;
  • 6A und 6B die Abbruchlogik, die Zugriffe abbricht, die anderen Zugriffen folgen; und
  • 7 eine bekannte Anordnung für eine Cachestruktur.
  • 1 ist ein Blockdiagramm, das die Anordnung 100 des L1-Caches 101 mit dem L0-Befehlscache 102, dem L0-Datencache 103, der CPU 104 und dem L2-Cache 105 und die Informationswege zwischen den Caches, der CPU 104 und dem Systembus 106 darstellt.
  • Der (Levell-Cache) L1-Cache 101, der ein kombinierter Daten- und Befehlscache ist, empfängt Zugriffsanfragen von dem L0-Datencache 103. 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 Tore 107 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 Tore 108 zu dem L0-Daten- (L0d-) Cache 103 zuführen. Diese Ganzzahlresultate können durch den L0d-Cache zu den Ganzzahlallgemeinregistern in dem CPU-Kern 104 gesendet werden. Der L1-Cache kann ferner bis zu vier Gleitkommaresultate pro Takt über vier Tore 109 direkt zu den Gleitkommaregistern des CPU-Kerns 104 zuführen. Der L1-Cache kann ferner 256 Bits von Befehlsdaten zu dem L0i-Cache (L0-Befehlscache) über den Rückgabebus 110 senden. Die Schnittstellen erlauben es dem L1-Cache mit den anderen Caches, der CPU und anderen Elementen, die mit dem Bus 106 gekoppelt sind, zu kommunizieren. Der Bus 113 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 Tore 107, um die Befehlsanfrage zu dem L1-Cache 101 zu senden.
  • Der Weg 112 besteht tatsächlich aus zwei Wegen. Der Anfrageteil des Wegs 112 wird zum Senden von Daten- oder Befehls-Zugriffen zu dem L2-Cache 105 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ückgabebus 111 zu dem L1-Cache 101. Der L1-Cache füllt die volle Datenzeile in dem L1-Cache und kann die Resultate zu dem notwendigen Verbraucher umleiten, der 102, 103 oder 104 sein kann. Der andere Weg des Wegs 112 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 Wegs 112 geliefert.
  • Es sei bemerkt, daß der Befehlsrückgabebus 110, die neuen Zugriffstore 107, die Ganzzahlrückgabetore 108 und die fp-Rückgabetore (fp = floating point = Gleitkomma) 109, das L2-Anfragetor 112 und der Datenrückgabebus 111 alle zur gleichen Zeit mit einigen Einschränkungen aktiv sein können. Die größte Einschränkung besteht hinsichtlich des fp-Rückgabetors 109, der Ganzzahlrückgabetore 108 und der Befehls rückgabetore 110. 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ückgabetore 109, 108 und 110 sieht wie folgt aus:
    Figure 00130001
  • 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 CPU 104 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-Datencache 103 über die Tore 108 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 Prozessorschnittstellenspeicherbus 106 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ßanordnung 300 beginnt mit dem Etikettenzugriff und endet mit dem Speichern der Daten in dem Speicherarray des L1-Caches 201. 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 Schaltung 205 zugegriffen wird, um zu bestimmen, ob ein Treffer aufgetreten ist. Wenn ein Treffer aufgetreten ist, wird der Zugriff zu entweder der Befehlswarteschlange 206 oder der Datenwarteschlange 209 gesendet.
  • Eine Prioritätslogik (nicht gezeigt) steuert den Multiplexer 220 und wählt dadurch entweder die Datenwarteschlange 209 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 Latches 221, 222, 223 werden für Zeitabstimmungszwecke beim Bewegen der Daten entlang der Pipeline verwendet. Der Multiplexer 224 erlaubt es, daß Adressen für Füllungen von dem Tor 111 hineingebracht werden. Die ausgewählte Adresse wird als die Adresse für die Speicherung in dem Array 201 verwendet.
  • Der Multiplexer 210 wird zum Auswählen der Umgehungszugriffe (von 107/205), der Speicherzugriffe (von 223 und 224) und der Füllzugriffe (von 223 und 224) verwendet. Es sei bemerkt, daß die Ladevorgänge und die Speichervorgänge von dem Tor 107 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 in 2A gezeigt sind.
  • 2B stellt den Fluß von Daten bei einer Speicheroperation dar. Dieser Fluß beginnt mit einem Multiplexer 301, der die Registerdateidaten in das Speicherformat stellt. Die Latches 302, 303, 304, 305 werden verwendet, um die zeitliche Abstimmung in der Pipeline beizubehalten. Nach der Rotation bzw. der Drehung werden die Daten in der Datenwarteschlange 306 plaziert, die sich von der Datenwarteschlange 209 unterscheidet. Die Datenwarteschlange 209 hält eine Adresse, während die Datenwarteschlange 306 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 Warteschlange 301, 302 und 306 entworfen, um lediglich zwei Zugriffe pro Takt, die spezifischen zwei Speichervorgänge, die pro Takt möglich sind, zu akzeptieren. Der Multiplexer 215 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 Array 201 zusammen mit den Daten gespeichert.
  • 3 stellt den Informationsfluß für die Dateneinfügungen in die Warteschlangen des L1-Caches 101 dar. Die obere Pipeline 402 ist die Haupt-CPU-Pipeline und weist die EXE- (Ausführungs-), DET- (Ausnahmeerfassungs-) und WB- (Zurückschreibe-) Stufen auf. Die physische Adresse 404 der Zugriffsanfrage wird von der L0M-Stufe empfangen. Die Speicherdaten 405 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 L0W 403 eingefügt. Diese Daten werden später für die Speicherung in dem L1-Array ausgelesen. Die nächste Warteschlange ist der Füllpuffer 407. 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 Datenwarteschlange 209, die die Adresse und andere Informationen, wie z. B. Steuer- und Anordnungs-Informationen, hält, die den Schreibdaten zugeordnet sind, die in der Warteschlange 306 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 Befehlswarteschlange 206. Befehle werden, wenn dieselben in dem L1-Cache eintreffen, zu der Befehlswarteschlange weitergeleitet. Die Befehlswarteschlange wird mit einem anderen Algorithmus als die Datenwarteschlange 209 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 Multiplexer 301 in die DET-Stufe ein. Die Speicherdaten werden dann in der Datenwarteschlange 306 über den Latch 302 in der WRB-Stufe der CPU-Pipeline 402 gespeichert 403. Diese Schritte formatieren die Speicherdaten in das Speicherformat und fügen die Daten in die Datenwarteschlange 306 ein. Die physische Adresse 404 von dem TLB und die anderen Zugriffsinformationen 406 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üfungen 407, 408 oder Prüfungen des inhaltsadressierbaren Speichers (CAM; CAM = Content Addressable Memory) werden an dem Füllpuffer und der Datenwarteschlange 209 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 Befehlswarteschlange 206, 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 Bankkonfliktinformationen 419 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 Datenwarteschlange 209 gespeichert. Es sei bemerkt, daß Einfügungen von Befehlen 206 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 CAM 408, durchgeführt werden, durchgeführt, so daß lediglich ein Verfehlen zu einem Zeitpunkt für eine gegebene Zeilenadresse verfolgt wird.
  • Wie in den 2A und 2B gezeigt, kann die Datenwarteschlange 306 vier Zugriffe pro Takt die Pipeline hinunter ausgeben, wobei 2A den Adreßweg darstellt und 2B den Datenweg darstellt. Mehrere Zugriffe (Ladevorgänge oder Speichervorgänge) können nicht auf die gleiche Speicherbank gleichzeitig zugreifen. Das Cachespeicherarray 201 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 bestimmen 409. 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. In 4A 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 Bit 503 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-Gatter 501 auf, das mit einer Anfrageleitung 502 und der Konfliktbitleitung 503 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-Gatter 501, wenn sich beide Eingangssignale in einem hohen Zustand befinden, in einen hohen Zustand gehen, und das hohe Eingangssignal zu einem ODER-Gatter 504 liefern. Wenn sich eines der Eingangssignale desselben in einem hohen Zustand befindet, geht das ODER-Gatter 504 in einen hohen Zustand. Da sich beide Eingangssignale zu dem UND-Gatter 505 in einem hohen Zustand befinden, wird dann das UND-Gatter 505 bewirken, daß ein Entscheidungssignal 506 bei dem nächsten Zyklus in den niedrigen Zustand geht. Das Entscheidungssignal zeigt an, daß die Finden-der-ersten-Vier-Logik 507 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 Logik 507 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 Datenwarteschlange 209 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 Datenwarteschlange 209, 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. In 4B 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-Bit 513 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 von 4A das Entscheidungssignal für den Eintrag B auf. Das Sperrsignal 508 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-Gatter 509 in einen hohen Zustand. Wenn sich eines der Eingangssignale desselben in einem hohen Zustand befindet, geht das ODER-Gatter 510 in einen hohen Zustand. Das Ausgabe-H-Bit oder das Signal 512 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-Gatter 511 in einen hohen Zustand, was eine ungültige Freigabe 514 für den Eintrag C zeigt. Es sei bemerkt, daß die effektive Freigabe 513 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 Datenwarteschlange 209 und ist in Stufen L1I wirksam. Es sei bemerkt, daß der Zugriffeintrag C ausgegeben wurde. Das Ungültige-Freigabe-Bit 514 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 Array 201 erreicht. Folglich werden weniger als vier Zugriffe mit dem Array 201 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 Pipelinestufen 515 quer über die Figur und die Zeit 516 die Figur hinunter auf. 5 betrifft zwei Speichervorgänge und vier Ladevorgänge, die die Pipeline hinunter folgend in der Reihenfolge Speichervorgang 1, LdA, LdB, LdC, LdD und Speichervorgang 2, 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 in 2A und 2B gezeigt, wobei die Stufen L1N und L1I sich innerhalb der Datenwarteschlange 209 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 Speichervorgang 1 bis zur Zeit L1W nicht verarbeitet, Ladevorgänge LdA, LdB und LdC werden jedoch an der L1M-Stufe vorbeigegangen sein, bevor der Speichervorgang 1 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 Takt 8 erreicht, was nach der Beendigung des Speichervorgangs 1 ist, und kann folglich beendet werden. Die Ladevorgänge LdA, LdB und LdC werden umlaufen und können, nachdem der Speichervorgang 1 beendet wurde, beendet werden. Es sei bemerkt, daß der Speichervorgang 2 solange abgebrochen werden muß, bis LdA, LdB und LdC beendet sind, andernfalls werden die Ladevorgänge die Daten des Speichervorgangs 2 und nicht des Speichervorgangs 1 lesen. Die Logik in 6A und 6B 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 Abbruchlogik 600 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 Speichervorgang 1 in 5 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 Array 201 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 von 4A verwendet werden, um die Freigabe des Ladevorgangs in L1A zu sperren. Die Bits 503 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 Abbruchlogik 601, 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 Speichervorgang 2 in 5 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 in 5 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)

  1. 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.
  2. 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.
  3. Cache-Anordnung gemäß Anspruch 2, bei der die Informationen, die den Konflikt beschreiben, dem kollidierenden Eintrag in der Warteschlange (209) zugeordnet sind.
  4. 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.
  5. Cache-Anordnung gemäß Anspruch 4, bei der die Informationen, die den Konflikt beschreiben, dem neuen Zugriff in der Warteschlange zugeordnet sind.
  6. 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.
  7. 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.
  8. 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.
DE10045188A 2000-02-21 2000-09-13 Cacheadresskonfliktvorrichtung Expired - Fee Related DE10045188B4 (de)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
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