DE10219623A1 - System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen - Google Patents
System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren WarteschlangenInfo
- Publication number
- DE10219623A1 DE10219623A1 DE10219623A DE10219623A DE10219623A1 DE 10219623 A1 DE10219623 A1 DE 10219623A1 DE 10219623 A DE10219623 A DE 10219623A DE 10219623 A DE10219623 A DE 10219623A DE 10219623 A1 DE10219623 A1 DE 10219623A1
- Authority
- DE
- Germany
- Prior art keywords
- pending
- requests
- cache
- memory
- read
- 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.)
- Ceased
Links
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/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
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
Die Erfindung beschreibt ein System für ein Verfahren zur Verwendung von mehreren Warteschlangen zum Zugreifen auf Speicherentitäten. Die Prioritäten können zwischen konkurrierenden Warteschlangen eingerichtet werden, um eine maximale Verarbeitungseffizenz zu ermöglichen. Zusätzlich, wenn mehr als eine ausstehende Transaktion denselben Speicherplatz betrifft, werden Abhängigkeiten eingerichtet, um die korrekte Sequenzierung der konkurrierenden Transaktionen sicherzustellen.
Description
Der Gegenstand der vorliegenden Anmeldung ist verwandt zu
dem in der eingereichten Anmeldung mit dem Titel SCHNELLE
PRIORITÄTSBESTIMMUNGSSCHALTUNG MIT ROTIERENDER PRIORITÄT,
deren Offenbarung hiermit durch Bezugnahme aufgenommen
worden ist.
Die Erfindung bezieht sich im allgemeinen auf
Computerspeichersysteme und spezieller auf eine
Speichersteuerung in einem System, um eine Zugriffszeit auf
Daten unter Verwendung eines Speichers zu verbessern.
Der Wunsch nach einer Erhöhung der Geschwindigkeit, mit der
der Computer Informationen verarbeitet, ist immer stärker
geworden. Ein Schema zum Erhöhen der
Verarbeitungsgeschwindigkeit umfaßt die Verbesserung einer
Speicherzugriffszeit.
Eine übliche Art und Weise, mit der die
Speicherzugriffszeit verbessert werden soll, ist, einen
Cache-Speichers zusammen mit einem Hauptspeicher
bereitzustellen. Ein Cache-Speicher ist typischerweise
einem Prozessor zugeordnet und erfordert weniger
Zugriffszeit als der Hauptspeicher. Kopien von Daten aus
Lese- und Schreibeaktionen aus dem Prozessor werden im
Cache zurückgehalten. Manche Cache-Systeme behalten vor
kurzem vorgenommene Lese- und Schreibeaktionen ein, während
andere komplexere Algorithmus aufweisen können, um zu
bestimmen, welche Daten im Cache-Speicher zurückgehalten
werden. Wenn ein Prozessor Daten anfordert, die derzeit im
Cache resident sind, wird nur auf den Cache-Speicher
zugegriffen. Da der Cache-Speicher eine geringere
Zugriffszeit erfordert als der Hauptspeicher, wird die
Verarbeitungsgeschwindigkeit verbessert. Heutzutage können
Speicherzugriffe vom Hauptspeicher sogar 250 Nanosekunden
dauern, während ein Cache-Zugriff zwei oder drei
Nanosekunden dauern kann.
Zusätzlich kann ein Cache-System verwendet werden, um die
effektive Geschwindigkeit einer Datenschreibe-Aktion zu
erhöhen. Wenn ein Prozessor z. B. eine Speicherstelle
schreiben soll, kann der Prozessor eine Datenschreibe-
Aktion ausschließlich an den Cache-Speicher ausführen. Der
Cache-Speicher und eine zugeordnete Steuerlogik können dann
die Daten an den Hauptspeicher schreiben, während der
Prozessor mit anderen Aufgaben fortfährt.
Computersysteme können auch die Verwendung des Caches
erweitern und eine Multiebenen-Hierarchie des Cache-
Speichers verwenden, wobei sich ein relativ schneller,
kostspieliger Speicher mit eingeschränkter Kapazität auf
der höchsten Ebene der Hierarchie befindet und zu einem
relativ langsameren, kostengünstigeren Speicher mit einer
höheren Kapazität auf der niedrigsten Ebene der Hierarchie
übergegangen wird. Typischerweise umfaßt die Hierarchie
einen kleinen, schnellen Speicher, der als Primär-Cache
bezeichnet wird, der entweder physisch in eine
prozessorintegrierte Schaltung integriert ist oder sich
physisch nahe am Prozessor angebracht ist. Der Primär-
Cache, der auf dem gleichen Chip wie die zentrale
Verarbeitungseinheit (CPU) eingebaut ist, kann eine
Frequenz (d. h. Zugriffszeit) gleich der Frequenz der CPU
aufweisen. Es kann ein separater Anweisungs-Primär-Cache
und ein Daten-Primär-Cache vorhanden sein. Primär-Caches
maximieren typischerweise das Verhalten, während dabei
Kapazität geopfert wird, um eine Datenlatenz zu minimieren.
Zusätzlich stellt der Primär-Cache typischerweise eine hohe
Bandbreite bereit. Ein Sekundär-Cache oder ein Tertiär-
Cache können ebenfalls verwendet werden und sind
typischerweise weiter vom Prozessor entfernt. Diese
Sekundär- und Tertiär-Caches liefern einen "Rückanschlag"
(Backstop) für den Primär-Cache und weisen im allgemeinen
eine größere Kapazität, eine höhere Latenz und eine
geringere Bandbreite als der Primär-Cache auf. Wenn ein
Prozessor ein Teil von einem Primär-Cache anfordert und das
Teil im Primär-Cache vorhanden ist, resultiert daraus ein
Cache-"Treffer". Während es, wenn ein Teil nicht vorhanden
ist, einen Primär-Cache-"Fehlschlag" gibt. Im Falle eines
Primär-Cache-Fehlschlags wird das angeforderte Teil von der
nächsten Ebene des Cache-Speichers oder, wenn das
angeforderte Teil nicht im Cache-Speicher enthalten ist,
vom Hauptspeicher abgerufen.
Typischerweise sind alle Speicher in Worten organisiert
(z. B. 32 Bits oder 64 Bits pro Wort). Der
Mindestspeicherbetrag, der zwischen einem Cache und einer
nächstniedrigen Ebene der Speicherhierarchie übertragen
werden kann, wird als eine Cache-Zeile oder manchmal als
ein Block bezeichnet. Eine Cache-Zeile umfaßt
typischerweise mehrere Worte (z. B. 16 Worte pro Zeile).
Ein Speicher kann auch in Seiten (auch als Segmente
bezeichnet), mit vielen Zeilen pro Seite aufgeteilt sein.
Bei manchen Systemen kann die Seitengröße variabel sein.
Caches sind unter Verwendung von drei Hauptarchitekturen
konstruiert worden: direkt abgebildete, satzassoziative
(satzadressierte) und vollassoziative (voll
inhaltsadressierte). Einzelheiten über die drei Cache-Typen
sind in den nachstehenden Druckschriften des Stands der
Technik beschrieben, deren Offenbarung hiermit durch
Bezugnahme aufgenommen worden ist: De Blasi, "Computer
Architecture", ISBN 0-201-41603-4 (Addison-Wesley, 1990),
S. 273-291; Stone, "High Performance Computer
Architecture", ISBN 0-201-51377-3 (Addison-Wesley, 2.
Ausgabe 1990), S. 29-39; Tabak, "Advanced Microprocessors",
ISBN 0-07-062807-6 (McGraw-Hill 1991), S. 244-248).
Beim direkten Abbilden, wenn eine Zeile angefordert wird,
weist nur eine Zeile im Cache übereinstimmende Indexbits
auf. Daher können die Daten unmittelbar abgerufen und auf
einen Datenbus getrieben werden, bevor das System bestimmt,
ob der Rest der Adresse übereinstimmt. Die Daten können
oder können nicht gültig sein, jedoch im Normalfall, wo sie
gültig sind, sind die Datenbits auf einem Bus verfügbar,
bevor das System die Gültigkeit der Daten bestätigt.
Bei satzassoziativen Caches ist nicht bekannt, welche Zeile
einer Adresse entspricht, bis die Indexadresse berechnet
und die Etikettadresse gelesen und verglichen worden ist.
Das heißt, bei satzassoziativen Caches wird das Ergebnis
eines Etikettenvergleichs verwendet, um auszuwählen, welche
Zeile von Datenbits in einem Satz von Zeilen dem Prozessor
präsentiert wird.
Ein Cache soll angeblich vollassoziativ sein, wenn ein
Cache eine ganze Zeilenadresse zusammen mit den Daten
speichert und eine beliebige Zeile an einer beliebigen
Stelle im Cache plaziert werden kann. Für einen großen
Cache, bei dem eine beliebige Zeile an einer beliebigen
Stelle plaziert werden kann, ist jedoch eine umfangreiche
Hardware erforderlich, um schnell zu bestimmen, ob und wo
sich ein Eintrag im Cache befindet. Für große Caches umfaßt
eine schnellere, platzsparende Alternative die Verwendung
eines Teilsatzes einer Adresse (die als Index bezeichnet
wird), um eine Zeilenposition im Cache zu benennen und
anschließend den verbleibenden Satz von höherwertigen Bits
von jeder physischen Adresse (die als Etikett bezeichnet
wird) zusammen mit den Daten zu speichern. Bei einem Cache
mit Indexierung kann ein Teil mit einer speziellen Adresse
nur innerhalb eines Satzes von Cache-Zeilen, die durch den
Index bezeichnet sind, plaziert werden. Wenn der Cache so
angeordnet ist, daß der Index für eine gegebene Adresse
genau auf eine Zeile im Teilsatz abgebildet wird, gilt der
Cache als direkt abgebildet. Wenn der Index auf mehr als
eine Zeile im Teilsatz abgebildet wird, gilt der Cache als
satzassoziativ. Die gesamte oder ein Teil einer Adresse
werden einer Hash-Aktion unterzogen, um einen Satzindex zu
liefern, der den Adressenraum in Sätze partitioniert.
Bei allen drei Typen von Caches wird eine Eingangsadresse
an eine Vergleichslogik angelegt. Typischerweise wird ein
Teilsatz der Adresse, der als Etikettenbits bezeichnet
wird, aus der Eingangsadresse extrahiert und mit den
Etikettenbits von jedem Cache-Eintrag verglichen. Wenn die
Etikettenbits übereinstimmen, werden die entsprechenden
Daten aus dem Cache extrahiert.
Im allgemeinen liefern direktabgebildete Caches einen
schnelleren Zugriff, jedoch beanspruchen sie die meiste
Zeit zum Vergleichen der Etikettenbits. Vollassoziative
Caches weisen eine größere Zugriffszeit auf, konsumieren
jedoch mehr Leistung und erfordern einen komplexeren
Schaltungsaufbau.
Wenn mehrere Prozessoren mit ihren eigenen Caches in einem
System enthalten sind, werden Cache-Kohärenzprotokolle
verwendet, um die Kohärenz zwischen und unter den Caches
beizubehalten. Es gibt zwei Klassen von Cache-
Kohärenzprotokollen:
- 1. Verzeichnisbasierte: Die Informationen über einen Block des physischen Speichers werden an einem einzigen gemeinsamen Platz erhalten. Diese Informationen umfassen normalerweise, welcher Cache/s eine Kopie des Blocks aufweist/en und ob diese Kopie ausschließlich für eine zukünftige Modifizierung markiert ist. Bei einem Zugriff auf einen speziellen Block wird zuerst das Verzeichnis abgefragt, um zu sehen, ob die Speicherdaten verfallen sind und die echten Daten (wenn überhaupt) in irgendeinem anderen Cache residieren. Ist dies der Fall, dann wird der Cache, der den modifizierten Block enthält, dazu gebracht, seine Daten an den Speicher zurückzusenden. Dann leitet der Speicher die Daten an den neuen Anfordernden (Requester), wobei das Verzeichnis mit dem neuen Platz dieses Blocks aktualisiert wird. Dieses Protokoll minimiert eine Interbusmodul- (oder Intercache-) Störung, leidet jedoch typischerweise an einer hohen Latenz und ist aufgrund der erforderlichen großen Verzeichnisgröße teuer zu bauen.
- 2. Schnüffeln: Jeder Cache, der eine Kopie der Daten aus einem Block des physischen Speichers aufweist, weist auch eine Kopie der Informationen über den Datenblock auf. Jeder Cache befindet sich typischerweise auf einem gemeinsamen Speicherbus, und alle Cache- Controller überwachen oder schnüffeln an dem Bus, um zu bestimmen, ob sie eine Kopie des gemeinsamen Blocks aufweisen oder nicht.
Schnüffel-Protokolle sind für eine Multiprozessor-
Systemarchitektur sehr gut geeignet, die Caches und einen
gemeinsamen Speicher verwendet, weil sie im Kontext der
bereits bestehenden, physischen Verbindung arbeiten, die
normalerweise zwischen dem Bus und dem Speicher vorgesehen
ist. Das Schnüffeln wird gegenüber den
Verzeichnisprotokollen häufig bevorzugt, weil sich der
Betrag an Kohärenzinformationen proportional zur Anzahl von
Blöcken in einem Cache und nicht zur Anzahl von Blöcken im
Hauptspeicher verhält.
Das Kohärenzproblem entsteht in einer
Multiprozessorarchitektur, wenn ein Prozessor einen
exklusiven Zugriff haben muß, um einen Block des Speichers
oder Objekts zu schreiben, und/oder die neueste Kopie haben
muß, wenn ein Objekt gelesen wird. Ein Schnüffel-Protokoll
muß alle Caches, die das Objekt, das geschrieben werden
soll, teilen, lokalisieren. Die Konsequenzen einer
Schreibe-Aktion an gemeinsame Daten umfassen entweder ein
Invalidieren aller anderen Kopien der Daten oder ein
Aussenden der Schreibe-Aktion an alle der gemeinsamen
Kopien. Aufgrund der Verwendung der Zurückschreibe-Caches
müssen die Kohärenzprotokolle ebenfalls Prüfungen an allen
Caches während der Speicherleseaktionen bewirken, um zu
bestimmen, welcher Prozessor die aktuellste Kopie der
Informationen aufweist.
Daten bezüglich der Informationen, die zwischen den
Prozessoren geteilt werden, werden den Statusbits
hinzugefügt, die in einem Cache-Block bereitgestellt sind,
um die Schnüffel-Protokolle zu implementieren. Diese
Informationen werden beim Überwachen von Busaktivitäten
verwendet. Bei einem Leseaktions-Fehlschlag überprüfen alle
Caches, ob sie eine Kopie des angeforderten Blocks von
Informationen haben und ergreifen die entsprechende
Maßnahme, wie z. B. Zuführen der Informationen zum Cache,
bei dem sich der Fehlschlag ereignete. In ähnlicher Weise
überprüfen alle Caches bei einer Schreibe-Aktion, ob sie
eine Kopie der Daten besitzen und handeln dann, indem sie
beispielsweise ihre Kopie der Daten invalidieren oder ihre
Kopie der Daten verändern, um den jüngsten Wert zu
reflektieren.
Die Schnüffel-Protokolle umfassen zwei Typen:
Schreiben-Invalidieren: Der Schreibprozessor bewirkt, daß
alle Kopien in anderen Caches invalidiert werden, bevor er
seine lokale Kopie verändert. Dem Prozessor steht dann
frei, die Daten zu aktualisieren, bis zu dem Zeitpunkt, wo
ein weiterer Prozessor nach den Daten fragt. Der
Schreibprozessor gibt ein Invalidierungssignal über den Bus
aus, und alle Caches prüfen, ob sie eine Kopie der Daten
besitzen. Ist dies der Fall, müssen sie den Block, der die
Daten enthält, invalidieren. Dieses Schema erlaubt mehrere
Leser, jedoch nur einen einzigen Schreiber.
Schreiben-Aussenden: Der Schreibprozessor sendet die neuen
Daten über den Bus aus und invalidiert nicht jeden Block,
der geteilt wird. Alle Kopien werden dann mit dem neuen
Wert aktualisiert. Dieses Schema sendet kontinuierlich
Schreibe-Aktionen an gemeinsame Daten aus, während das
Schreiben-Invalidieren-Schema, das vorstehend erörtert
wurde, alle anderen Kopien löscht, so daß es nur eine
lokale Kopie für die anschließenden Schreibe-Aktionen gibt.
Die Schreiben-Aussenden-Protokolle ermöglichen
normalerweise, daß Daten als gemeinsam (ausgesendet)
etikettiert werden, oder die Daten können als privat
(lokal) etikettiert werden. Für weitere Informationen über
die Kohärenz siehe J. Hennessy, D. Patterson, Computer
Architecture: A Quantitative Approach, Morgan Kaufmann
Publishers, Inc., (1990), deren Offenbarung hiermit durch
Bezugnahme aufgenommen worden ist.
Bei einer Schnüffel-Kohärenz-Multiprozessor-Systemarchi
tektur wird jede kohärente Transaktion auf dem Systembus zu
jedem Cache-Teilsystem des Prozessors weitergeleitet, um
eine Kohärenzprüfung auszuführen. Diese Überprüfung stört
normalerweise die Pipeline des Prozessors, weil auf den
Cache nicht durch den Prozessor zugegriffen werden kann,
während die Kohärenzprüfung stattfindet.
Bei einem traditionellen Einzelport-Cache ohne doppelte
Cache-Etiketten wird die Prozessor-Pipeline bei Cache-
Zugriffsanweisungen blockiert, wenn der Cache-Controller
damit beschäftigt ist, Cache-Kohärenzprüfungen für andere
Prozessoren zu verarbeiten. Für jede Schnüffel-Aktion muß
der Cache-Controller zuerst die Cache-Etiketten für die
Schnüffel-Adresse prüfen und dann den Cache-Zustand
modifizieren, wenn sich ein Treffer ereignet hat. Das
Zuteilen der Cache-Bandbreite für eine atomische
(untrennbare) Etiketten-Lese- und Schreibe-Aktion (für eine
mögliche Modifizierung) verriegelt den Cache von dem
Prozessor länger als notwendig, wenn die Schnüffel-Aktion
keine Etiketten-Schreibe-Aktion erfordert. Zum Beispiel
sind 80 bis 90% der Cache-Abfragen Fehlschläge, d. h. eine
Etiketten-Schreibeaktion ist nicht erforderlich. Bei einer
Mehrebenen-Cache-Hierarchie können viele dieser Fehlschläge
gefiltert werden, wenn eine Inklusionseigenschaft beachtet
wird. Eine Inklusionseigenschaft ermöglicht, daß
Informationen auf der höchsten Ebene des Caches bezüglich
der Inhalte der unteren Cache-Ebenen gespeichert werden.
Die Geschwindigkeit, mit der Computer Informationen für
viele Anwendungen verarbeiten, kann durch Erweitern der
Größe der Caches, speziell des Primär-Caches, erhöht
werden. Während die Größe des Primär-Caches zunimmt, werden
die Hauptspeicherzugriffe verringert und die
Gesamtverarbeitungsgeschwindigkeit nimmt zu. In ähnlicher
Weise, da die Größe des Sekundär-Caches zunimmt, werden die
Hauptspeicherzugriffe verringert und die
Gesamtverarbeitungsgeschwindigkeit erhöht, obwohl dies
nicht so wirksam ist wie das Erweitern der Größe des
Primär-Caches.
Typischerweise werden bei Computersystemen Primär-Caches,
Sekundär-Caches und Tertiär-Caches unter Verwendung eines
statischen Direktzugriffsspeichers (SRAM; SRAM = Static
Random Access Memory) implementiert. Die Verwendung des
SRAM ermöglicht eine verringerte Zugriffszeit, was die
Geschwindigkeit erhöht, mit der die Informationen
verarbeitet werden können. Ein dynamischer
Direktzugriffsspeicher (DRAM; DRAM = Dynamic Random Access
Memory) wird typischerweise für den Hauptspeicher
verwendet, da er weniger kostspielig ist, weniger Leistung
erfordert und größere Speicherdichten liefert.
Typischerweise schränkten Computersysteme des Stands der
Technik auch auf die Anzahl von ausstehenden Transaktionen
an den Cache zu einem bestimmten Zeitpunkt ein. Wenn mehr
als eine Transaktion durch einen Cache empfangen werden
sollte, verarbeitete der Cache die Anforderungen seriell.
Wenn z. B. zwei Transaktionen durch einen Cache empfangen
werden sollten, wurde die erste Transaktionsanforderung
zuerst verarbeitet, wobei die zweite Transaktion
zurückgehalten wurde, bis die erste Transaktion beendet
war. Sobald die erste Transaktion vollendet war,
verarbeitete der Cache die zweite Transaktionsanforderung.
Es existieren zahlreiche Protokolle, die die Cache-Kohärenz
über mehrere Caches und den Hauptspeicher beibehalten. Ein
solches Protokoll wird MESI genannt. Das MESI-Protokoll ist
bei M. Papamarcos und J. Patel, "A Low Overhead Coherent
Solution for Multiprocessors with Private Cache Memories",
im Sitzungsprotokoll des 11. International Symposium on
Computer Architecture, IEEE, New York (1984), S. 348-354,
ausführlich beschrieben, und in seiner Gesamtheit hierin
durch Bezugnahme aufgenommen. MESI steht für Modified,
Exclusive, Shared, Invalid (Modifiziert, Exklusiv, Geteilt,
Ungültig.) Nach dem MESI-Protokoll wird eine Cache-Zeile
gemäß ihrer Verwendung kategorisiert. Eine modifizierte
Cache-Zeile zeigt an, daß die spezielle Zeile durch den
Cache, der der momentane Besitzer der Zeile ist,
beschrieben worden ist. Eine exklusive Cache-Zeile zeigt
an, daß ein Cache die exklusive Eigentümerschaft der Cache-
Zeile aufweist, was dem Cachecontroller ermöglicht, die
Cache-Zeile zu modifizieren. Eine gemeinsame Cache-Zeile
zeigt an, daß ein oder mehrere Caches die Eigentümerschaft
der Zeile aufweisen. Eine gemeinsame Cache-Zeile gilt als
Nur-Lese-Zeile, und jede Vorrichtung unter dem Cache kann
die Zeile lesen, darf jedoch nicht an den Cache schreiben.
Einen ungültige Cache-Zeile oder eine Cache-Zeile ohne
Eigentümer identifiziert eine Cache-Zeile, deren Daten
nicht gültig sein können, da der Cache die Cache-Zeile
nicht mehr besitzt.
Es ist die Aufgabe der vorliegenden Erfindung, eine
Vorrichtung zum Zuweisen eines Speichers und ein Verfahren
zum Steuern eines Zugriffs auf einen Cache-Speicher zu
schaffen.
Diese Aufgabe wird durch eine Vorrichtung gemäß Anspruch 1
und 13 und ein Verfahren gemäß Anspruch 15 gelöst.
Die Erfindung umfaßt ein System und Verfahren zum
Prioritäten setzen, Identifizieren und Erzeugen von
Abhängigkeiten zwischen ausstehenden
Transaktionsanforderungen, die sich auf einen Sekundär-
Gache beziehen. Die ausstehenden Anforderungen in den Lese-
Warteschlangen haben im allgemeinen gegenüber Schreib-
Anforderungen Priorität, wobei die Kohärenz-Warteschlange
die höchste Priorität aufweist. Zusätzlich, wenn mehr als
eine Transaktionsanforderung den gleichen Speicherplatz
betrifft, wird eine Abhängigkeit identifiziert und erzeugt,
um sicherzustellen, daß die erste angeforderte Transaktion,
die den Speicherplatz betraf, zuerst verarbeitet wird.
Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung
werden nachfolgend Bezug nehmend auf die beiliegenden
Zeichnungen näher erläutert. Es zeigen:
Fig. 1 eine Sekundär-Cachestruktur, die zwei
Warteschlangen, eine Lesewarteschlange und eine
Schreibwarteschlange umfaßt;
Fig. 2 ein zweidimensionales Array, das den
satzassoziativen Cache, der im DRAM enthalten
ist, darstellt;
Fig. 3 eine Sekundär-Cachestruktur, die eine
Lesewarteschlange, eine Schreibwarteschlange,
eine Kohärenzwarteschlange und eine
Räumungswarteschlange umfaßt, die jeweils
verwendet werden, um Cache-Zeilen aus dem DRAM zu
lesen;
Fig. 4 die Struktur der Adressen für die verschiedenen
Warteschlangen von Fig. 3;
Fig. 5 die Struktur der Adressen, wenn die Transaktionen
in der Kohärenzwarteschlange und der
Lesewarteschlange anstehen;
Fig. 6 die Struktur der Adressen, wenn die Transaktionen
in der Lesewarteschlange, der
Räumungswarteschlange und der
Schreibwarteschlange anstehen;
Fig. 7A die Struktur der Adressen, wenn die Transaktionen
in der Lesewarteschlange und der
Schreibwarteschlange anstehen und derselbe
Speicherabschnitt des DRAMs betroffen ist;
Fig. 7B ein Beispiel einer Abhängigkeitsauswahl, wenn
mehrere Adreßabhängigkeiten existieren;
Fig. 7C ein Beispiel der Umbruchbeschaffenheit der
Warteschlangen; und
Fig. 8 eine Tabelle, die die Abhängigkeiten zwischen den
verschiedenen Warteschlangen darstellt.
Im allgemeinen umfaßt eine Speicherhierarchie verschiedene
Komponenten, die mit verschiedenen Geschwindigkeiten
arbeiten. Diese Geschwindigkeiten können sich von der
Geschwindigkeit der zentralen Verarbeitungseinheit (CPU)
unterscheiden. Typischerweise nimmt die Geschwindigkeit der
Komponente ab, während die Entfernung von der CPU zunimmt.
Diese Geschwindigkeits-Versätze können durch
Warteschlangenbildung, oder Speichern, der verzögerten
Operationen gelöst werden. Zum Beispiel wird ein statischer
Direktzugriffsspeicher (SRAM) bei Cache-Operationen
verwendet, und die Technik des dynamischen
Direktzugriffsspeichers (DRAM) ist im allgemeinen nicht für
Caches verwendet worden, weil sie, bezüglich der
Zugriffszeit, relativ zum Hauptspeicher einen geringen
Nutzen bietet. Die DRAM-Technik ist jedoch pro Bit Speicher
näherungsweise viermal weniger teuer als der SRAM und
ermöglicht aufgrund seiner höheren Dichte, daß ein viel
größerer Cache für einen bestimmten Bereich implementiert
wird. Wenn eine nutzbare Fläche "auf dem Gehäuse" von
Bedeutung ist, erlangt der Dichtevorteil des DRAMs
gegenüber dem SRAM ebenfalls Bedeutung.
Während die Größe des SRAM-implementierten Primär-Caches
zunimmt, nimmt die Größe des Speichers, der für den
Sekundär- oder Tertiär-Cache erforderlich ist, ebenfalls
zu. Typischerweise, wenn eine Cache-Hierarchie
implementiert wird, wird die Größe des Speichers auf jeder
nachfolgenden Ebene um einen Faktor von vier oder acht
erhöht. Daher ist für einen Primär-Cache von einem Megabyte
ein Sekundär-Cache von vier bis acht Megabyte
wünschenswert. Da die Größe des Sekundär-Caches zunähme,
würde die Verwendung des SRAMs aufgrund seiner
eingeschränkten Dichte untragbar werden. Durch Verwendung
der DRAM-Technologie sind Sekundär-Caches von 32 Megabyte
oder mehr möglich. Während die Zeit für einen Zugriff auf
Informationen, die im DRAM-Sekundär-Cache gespeichert sind,
zunimmt, wird die Gesamtbeeinträchtigung durch die geringe
Primär-Cache-Fehlschlagsrate, die dem größeren Primär-Cache
zugeordnet ist, versetzt. In anderen Worten könnte der
Sekundär-Cache eine längere Latenz umfassen, während die
Größe des Primär-Caches zunimmt.
Um die Latenz, die dem Sekundär-Cache zugeordnet ist,
weiter zu verringern, kann der DRAM-Speicher konzipiert
sein, um eine schnellere Zugriffszeit aufzuweisen. Diese
schnellere Zugriffszeit wird durch die Verwendung kleinerer
DRAM-Chips als im Hauptspeicher erreicht, wodurch die
Anzahl von Pins, die zum Übertragen von Daten zu und aus
dem DRAM verwendet werden, erhöht wird und die Frequenz,
bei der der DRAM-Chip arbeitet, erhöht wird. Die DRAM-Chips
können konfiguriert sein, um zu ermöglichen, daß eine
Cache-Zeile in der Größenordnung von 15 Nanosekunden
übertragen wird.
Sowohl die erweiterte Größe des Sekundär-Caches und seine
längere Latenzzeit (im Vergleich zum Primär-Cache)
erfordern eine Methodik, um mehrere unerfüllte
Anforderungen für Daten aus dem Sekundär-Cache zu
bewältigen. Die Anforderungen können sogar alle zwei
Nanosekunden empfangen werden, und wenn 15 Nanosekunden für
eine Anforderung benötigt werden, um bedient zu werden,
können mehrere zusätzliche Anforderungen empfangen werden.
Obgleich die Systeme des Stands der Technik zahlreiche
Anforderungen an den SRAM-Sekundär-Cache sequentiell
gehandhabt haben, erfordert die Verwendung von größeren
DRAM-Sekundär-Cache-Strukturen einen solideren
Lösungsansatz.
Fig. 1 zeigt eine Sekundär-Cachestruktur 100, die zwei
Warteschlangen, eine Lese-Warteschlange (ReadQ) 101 und
eine Schreibe-Warteschlange (WriteQ) 102, umfaßt. Für den
Zweck der vorliegenden Darstellung kann ReadQ 101 acht
Adressen 103 und zwei Datenzeilen 104 halten, während
WriteQ 102 acht Adressen 105 und acht Datenzeilen 106
halten kann. Eine Adresse 103 und eine Adresse 105 sind
gepufferte Kopien der Adresse der Cache-Zeile, die im DRAM
113 gespeichert wird, nicht die Cache-Zeile an sich. Wenn
eine Leseanforderung durch den Sekundär-Cache empfangen
wird, wird diese durch die Etiketten-Pipeline 107
verarbeitet, die den Platz der Cache-Zeile im DRAM 113
bestimmt. Die Leseanforderung wird an einem der Adreßplätze
gespeichert, und während die Lese-Aktion stattfindet,
können zusätzliche Leseanforderungen durch ReadQ 101
empfangen werden. Gleichzeitig können Schreibanforderungen
empfangen werden, die durch die Etiketten-Pipeline 107
verarbeitet und durch WriteQ 102 gespeichert werden. Die
Speicherung von mehreren Anforderungen ermöglicht den
Caches, als nichtblockierende Caches zu arbeiten, die dem
System ermöglichen, weiterhin mit einer oder mehreren
unerfüllten, anstehenden Transaktionen zu arbeiten. Eine
Speicherentscheidungsvorrichtung, die nachstehend
beschrieben wird, wird verwendet, um die Sequenzierung von
mehreren anstehenden Anforderungen zu bestimmen.
Die Etiketten-Pipeline 107 und der Etiketten-RAM 108 werden
verwendet, um zu bestimmen, ob die angeforderte Cache-Zeile
im Sekundär-Cache resident ist. Die Etiketten-Pipeline 107
ist ebenfalls wirksam, um für eine neue Cache-Zeile, die in
den Sekundär-Cache geschrieben werden soll, Platz zu
machen. Wenn die Cache-Zeile im Sekundär-Cache resident
ist, wird die Anforderung durch die Etiketten-Pipeline 107
an die ReadQ 101 gesendet, die dann auf die Anforderung hin
agiert. Die ReadQ 101 liefert dann die Cache-Zeile zur CPU.
Wenn die Cache-Zeile nicht resident ist, wird die
Anforderung durch die Etiketten-Pipeline 107 an den
Hauptspeicher über einen Multiplexer 109 gesendet. Die
Cache-Zeilen, die vom Hauptspeicher zurückkehren, gelangen
durch den Busrückgabepuffer 110 und werden über den
Multiplexer 111 zum Prozessor 112 gesendet. Diese Cache-
Zeilen, die vom Hauptspeicher zurückkehren, können
ebenfalls im Sekundär-Cache gespeichert werden, um die
Zugriffszeit für anschließende Abfragen der gleichen Cache-
Zeile zu verringern. Die Etiketten-Pipeline 107 und der
Etiketten-RAM 108 behandeln Operationen aus der CPU
atomisch und sequentiell. Dies verdeckt das
Warteschlangenverhalten, das zum Liefern der Daten
notwendig ist.
Die WriteQ 102 ist für das Schreiben von neuen Cache-Zeilen
in den DRAM des Sekundär-Caches verantwortlich. Diese
Cache-Zeilen werden vom Prozessor oder dem Hauptspeicher
erhalten. Der Prozessor kann die Cache-Zeile zurück zum
Sekundär-Cache senden, wenn er die Informationen, die in
der Cache-Zeile enthalten sind, aktualisiert hat, oder die
Cache-Zeile kann zum Sekundär-Cache gesendet werden, um die
Daten aus dem Primär-Cache zu entfernen. Die Cache-Zeilen,
die aus dem Primär-Cache kommen, befinden sich
typischerweise im modifizierten oder "schmutzigen" Zustand.
Das Speichern der modifizierten Cache-Zeile im Sekundär-
Cache und nicht im Hauptspeicher ermöglicht eine
schnellere, anschließende Wiedergewinnung der Cache-Zeile.
Die Cache-Zeilen, die aus dem Hauptspeicher kommen,
gelangen durch den Busrückgabepuffer 110 zur WriteQ 102 und
werden im DRAM 113 gespeichert.
Die Größe des DRAMs 113 beträgt bei einem bevorzugten
Ausführungsbeispiel 32 Megabyte. Der DRAM 113 kann daher
262.144 Cache-Zeilen speichern, wenn die Größe von jeder
Cache-Zeile 128 Byte beträgt. Bei einem bevorzugten
Ausführungsbeispiel verwendet der DRAM 113 einen
satzassoziativen Vier-Wege-Cache, der 65.536 Reihen
enthält. Der satzassoziative Vier-Wege-(0, 1, 2, 3)Cache
ermöglicht daher die Speicherung von 262.144 Cache-Zeilen.
Der satzassoziative Cache kann als ein zweidimensionales
Array dargestellt werden.
Ein Fachmann mit Durchschnittsqualifikation würde
verstehen, daß, obwohl die vorliegende Beschreibung einen
einzelnen Prozessor, der eine Cache-Zeile anfordert,
erörtert, die Erfindung auf eine Anzahl von Prozessoren,
die den Sekundär-Cache teilen, gleichermaßen anwendbar
wäre.
Fig. 2 zeigt ein zweidimensionales Array, das den
satzassoziativen Cache, der im DRAM 113 enthalten ist,
darstellt. Das zweidimensionale Array enthält 65.536
Indizes oder Reihen und vier Wege (0, 1, 2, 3). Wenn eine
Cache-Zeile an den Sekundär-Cache gesendet wird, legt die
Etiketten-Pipeline 107 eine Funktion an die Adresse an, um
zu bestimmen, wo im DRAM 113 die Cache-Zeile gespeichert
werden soll. Die Funktion bestimmt zuerst, in welchem Index
die Cache-Zeile gespeichert werden könnte. Sechzehn Bit der
Cache-Zeilenadresse werden verwendet, um den Index zu
bestimmen. Anschließend wird der Cache-Zeilenweg unter
Verwendung der nächsten zwei Bits der Funktion bestimmt.
Zum Beispiel würde eine Cache-Zeile mit dem Ausgangssignal
der Funktion auf der Adresse 000000000000000110 im Index 1
(0000000000000001) und Weg 2 (10) gespeichert werden. Die
Cache-Zeile würde im Platz 201 der Fig. 2 gespeichert
werden. Vierundvierzig Bit werden im Hauptspeicher
verwendet, um einzelne Bytes zu adressieren, wo die oberen
zweiunddreißig Bits verwendet werden, um die Cache-Zeilen
zu differenzieren. Da nur achtzehn Bit der Cache-
Zeilenadresse verwendet werden, um zu bestimmen, wo im DRAM
113 die Cache-Zeile gespeichert wird, kann mehr als eine
Cache-Zeile im gleichen Abschnitt des DRAMs 113 gespeichert
werden, jedoch vorzugsweise nicht gleichzeitig.
Der Etiketten-RAM 108 (Fig. 1) enthält ebenfalls 65.536
Reihen (Indizes) und vier Spalten (Wege) und wird
verwendet, um die Position einer Cache-Zeile im DRAM 113 zu
bestimmen. Wenn vom Primär-Cache eine Anforderung empfangen
wird, berechnet die Etiketten-Pipeline 107 einen Index, der
für den Zugriff auf den Etiketten-RAM 108 verwendet wird.
Bei einem bevorzugten Ausführungsbeispiel werden 44 Bit (0
bis 43) verwendet, um den Hauptspeicher zu adressieren,
wobei 0 das höchstwertige Bit und 43 das niederwertigste
Bit ist. Da die Cache-Zeilen 128 Byte enthalten, werden die
unteren sieben Bit (37 bis 43) nicht verwendet und können
fallengelassen werden. Sechzehn der verbleibenden Bits (21
bis 36) werden durch die Etiketten-Pipeline 107 verwendet,
um den Index für sowohl den Etiketten-RAM 108 als auch den
DRAM 113 zu berechnen. Die verbleibenden Bits, die Bits 0
bis 20, die als das "Etikett" bezeichnet werden, werden im
entsprechenden Abschnitt des Etiketten-RAMs 108
gespeichert. Die im Etiketten-RAM 108 gespeicherten Bits
sowie die Position, wo die Bits gespeichert sind, werden
durch die Etiketten-Pipeline 107 verwendet, um zu
bestimmen, ob die gewünschte Cache-Zeile im Sekundär-Cache
vorhanden ist. Bei diesem Ausführungsbeispiel wird jeder
der vier Wege überprüft, um zu bestimmen, ob die Cache-
Zeile im Sekundär-Cache vorhanden ist.
Fig. 3 ist eine Sekundär-Cache-Struktur, die die ReadQ 101,
die WriteQ 102, die Kohärenz-Warteschlange (CohQ) 301 und
die Räumungswarteschlange (EvictQ) 302 umfaßt. Die ReadQ
101, die CohQ 301 und die EvictQ 302 werden jeweils
verwendet, um Cache-Zeilen aus dem DRAM zu lesen. In Fig. 3
wird die ReadQ 101 verwendet, um die Cache-Zeile aus dem
DRAM zu lesen und die Cache-Zeile zum Prozessor
zurückzusenden. Eine Kopie der Cache-Zeile kann im
Sekundär-Cache zurückgehalten werden.
Die CohQ 301 wird verwendet, um den DRAM zu lesen und die
Daten an einen anderen Prozessor über den externen
Speicherbus zu senden. Die CohQ 301 wird verwendet, um ein
Schnüffeln von einem anderen Prozessor zu erfüllen. Das
Schnüffeln nimmt die Cache-Zeile aus dem Sekundär-Cache und
gibt die Cache-Zeile an einen zweiten Prozessor ansprechend
auf das Schnüffeln frei. Die CohQ 301 ähnelt einer Fern-
Lesewarteschlange von einem zweiten Prozessor.
Die EvictQ 302 löscht eine Cache-Zeile aus dem DRAM.
Abhängig vom Status der Cache-Zeile kann die EvictQ 302 die
Daten (für gemeinsame oder private Leerdaten) aussortieren,
oder die EvictQ 302 sendet eine verschmutzte, private
Cache-Zeile zum Hauptspeicher oder einem anfragenden
Prozessor zurück. In beiden Fällen macht die EvictQ 302 im
Sekundär-Cache Platz für nachfolgende Daten. Typischerweise
kooperiert die EvictQ 302 mit der Etiketten-Pipeline 107
und dem Etiketten-RAM 108, um die älteste Cache-Zeile aus
dem Sekundär-Cache zu spülen.
Das System von Fig. 3 umfaßt drei separate, spezialisierte
Lesewarteschlangen in Form der ReadQ 101, CohQ 301 und
EvictQ 302, weil das Gesamtverhalten des Systems direkt an
die Zeit gebunden ist, die erforderlich ist, um die Lese-
Aktionen von einem Prozessor zu bedienen. Sowohl die ReadQ
101 als auch die CohQ 301 können, wenn die Lese-Aktionen
nicht umgehend ausgeführt werden, bewirken, daß ein
Prozessor seine Gesamtbetriebsgeschwindigkeit verringert.
Die EvictQ 302 wird verwendet, um alte Cache-Zeilen, die
nicht mehr benötigt werden, zurück zum Hauptspeicher zu
schieben, um die Speicherung von zusätzlichen Cache-Zeilen
zu ermöglichen. Indem jeder der Lese-Aktionen eine separate
Warteschlange gewidmet wird, wird das Gesamtsystemverhalten
verbessert.
Die CohQ 301 von Fig. 3 kann zwei Adressen und zwei
Datenleitungen beinhalten, während die EvictQ 302 vier
Adressen und vier Datenleitungen beinhalten kann. Die
Anzahl von Adressen und die Anzahl von Datenleitungen sind
vom Verhalten, das von der Sekundär-Cache-Struktur
gewünscht ist, abhängig. Während die Anzahl von Adressen
und die Anzahl von Datenleitungen, die gespeichert sind,
erhöht wird, erhöht sich das Gesamtverhalten des Systems.
Die Warteschlangenarchitektur, die in Fig. 3 gezeigt ist,
ermöglicht der eingehenden Transaktionsrate, vorübergehend
die Rate zu übertreffen, mit der die eingehenden
Transaktionen verarbeitet werden können. In anderen Worten
können zu einem bestimmten Zeitpunkt mehrere Anforderungen
ausstehen. Diese ausstehenden Anforderungen werden in den
Adreßwarteschlangen von ReadQ 101, CohQ 301, EvictQ 302 und
WriteQ 102 gespeichert. Die separaten, unterscheidbaren
Warteschlangen werden für die verschiedenen Transaktionen
verwendet, um kritischeren Transaktionen eine höhere
Priorität einzuräumen. Wenn mehrere ausstehende
Anforderungen innerhalb einer bestimmten Warteschlange
vorhanden sind, werden sie in der Reihenfolge, in der sie
empfangen wurden, bedient. Die ausstehenden Anforderungen
innerhalb einer bestimmten Warteschlange können jedoch
nicht sequentiell bedient werden, da die Abhängigkeiten
zwischen den Warteschlangen eine ausstehende Transaktion in
einer weiteren Warteschlange erfordern können, um gegenüber
der Bedienung der nächsten ausstehenden Anforderungen in
der vorhandenen Warteschlange Priorität zu erlangen. Die
Abhängigkeiten werden in einer Abhängigkeitslogik
gesammelt.
Fig. 4 zeigt die Struktur der Adressen für die
verschiedenen Warteschlangen von Fig. 3. Die in den
Adressen der verschiedenen Warteschlangen gespeicherten
Adressen sind im Hinblick auf den DRAM 113 und nicht auf
die Cache-Zeilen-Adresse aus dem Hauptspeicher. Wie in Fig.
2 beschrieben ist, wird eine Speicheradresse im DRAM 113
durch einen Index und einen Weg identifiziert, wobei der
Index von 0 bis 65.536 und der Weg von 0 bis 3 variiert.
Für den Zweck von Fig. 4 bis 7 wird die Speicheradresse des
DRAMs 113 durch geordnete Paare der Form (x, y)
identifiziert, wobei x den Indexwert und y den Wegewert
darstellt. Zum Beispiel würde (5, 3) eine Cache-Zeile
darstellen, die bei einem Indexwert von 5 und einem Weg 3
gespeichert ist. Wie zuvor erörtert wurde, werden mehrere
ausstehende Anforderungen, die in einer spezifischen
Warteschlange vorhanden sind, in der Reihenfolge
verarbeitet, in der sie empfangen wurden. Wenn eine Lese-
Aktion für (10, 1) zuerst empfangen werden würde, der eine
Lese-Aktion für (11, 2) folgte, der eine Lese-Aktion für
(3, 0) folgte, und jede dieser Anforderungen ausstehend
wäre, würde die ReadQ-Adresse 103 erscheinen, wie in Fig. 4
dargestellt ist. Ohne die Transaktionen, die in den anderen
Warteschlangen anstehen, würde die Lese-Aktion 401 zuerst
bedient werden, die Lese-Aktion 402 als nächstes bedient
werden und schließlich die Lese-Aktion 403 als letztes
verarbeitet werden.
Fig. 5 zeigt die Struktur der Adressen, wenn die
Transaktionen in der CohQ und der ReadQ anstehen. Die
Bezeichnung "T" zeigt die Zeitsequenz an, mit der die
Anforderungen durch die Etiketten-Pipeline 107 empfangen
und verarbeitet wurden. In Fig. 5 wurde zum Zeitpunkt T1
eine Lese-Aktion (10, 1) empfangen, der eine Kohärenz (5,
1) zum Zeitpunkt T2 folgte, der eine Lese-Aktion (11, 2)
zum Zeitpunkt T3 folgte, dem eine Kohärenz (7, 2) zum
Zeitpunkt T4 folgte, der eine Lese-Aktion (3, 0) zum
Zeitpunkt T5 folgte. Vorzugsweise erlangt eine ausstehende
Kohärenzanforderung gegenüber einer ausstehenden
Anforderung in einer beliebigen der anderen drei
Warteschlangen (ReadQ, EvictQ oder WriteQ) Priorität. Wenn
jede der Transaktionen, die in Fig. 5 identifiziert sind,
ausstünde und nicht begonnen hätte, würde die Kohärenz (5,
1) 501 vor der Lese-Aktion (10, 1) 502 zuerst bedient
werden, selbst wenn die Lese-Aktion (10, 1) 502 zuerst
empfangen wurde. Zusätzlich, da die ausstehenden
Transaktionen in der Kohärenzwarteschlange gegenüber den
ausstehenden Transaktionen in den anderen Warteschlangen
Priorität besitzen, würden ausstehende
Kohärenztransaktionen (7, 2) 503 ebenfalls vor der Lese-
Aktion (10, 1) 502 bedient werden. Sobald jede der
ausstehenden Kohärenztransaktionen bedient wurde, würden
die drei ausstehenden Leseanforderungen der Reihe nach
ausgeführt werden.
Fig. 6 zeigt die Struktur der Adressen, wenn die
Transaktionen in der ReadQ, EvictQ und WriteQ anstehen. In
Fig. 6 wurde zum Zeitpunkt T1 eine Lese-Aktion (10, 1)
empfangen, der eine Räum-Aktion (13, 0) zum Zeitpunkt T2
folgte, der eine Schreib-Aktion (5, 1) zum Zeitpunkt T3
folgte, der eine Schreib-Aktion (7, 2) zum Zeitpunkt T4
folgte, der eine Schreib-Aktion (8, 0) zum Zeitpunkt T5
folge, der eine Lese-Aktion (11, 2) zum Zeitpunkt T6
folgte.
Vorzugsweise erlangt, abgesehen von einer Aktion auf dem
identischen Abschnitt des DRAMs 113, eine Lese-Aktion
gegenüber einer Schreib-Aktion Priorität. Wenn jede der
Transaktionen, die in Fig. 6 identifiziert sind, ausstehend
wäre, würde die Lese-Aktion (10, 1) zuerst auftreten,
gefolgt von der Lese-Aktion (11, 2). Da die Räum-Aktion ein
spezifischer Typ von Lese-Aktion ist, träte die Räum-Aktion
(13, 0) an dritter Stelle auf, der die drei
Schreibanforderungen der Reihe nach folgten.
Fig. 7A zeigt die Struktur der Adressen, wenn die
Transaktionen in der ReadQ und der WriteQ anstehen und
derselbe Speicherabschnitt des DRAMs 113 betroffen ist. In
Fig. 7A wurde zum Zeitpunkt T1 eine Lese-Aktion (5, 0)
empfangen, der eine Schreib-Aktion (6, 1) zum Zeitpunkt T2
folgte, der eine Schreib-Aktion (9, 0) zum Zeitpunkt T3
folgte, der eine Lese-Aktion (7, 1) zum Zeitpunkt T4
folgte, der eine Schreib-Aktion (10, 0) zum Zeitpunkt T5
folgte, der eine Lese-Aktion (9, 0) zum Zeitpunkt T6
folgte, der eine Lese-Aktion (11, 2) zum Zeitpunkt T7
folgte, der eine Lese-Aktion (15, 0) zum Zeitpunkt T8
folgte. Wie im Hinblick auf Fig. 5 beschrieben ist,
geschehen Lese-Aktionen vorzugsweise vor Schreib-Aktionen,
solange kein Konflikt besteht, d. h. solange die
Operationen nicht in dieselbe Speicherstelle des DRAMs 113
involvieren. Wenn jedoch dieselbe Speicherstelle des DRAMs
113 betroffen ist, muß die Operation, die an dieser
Speicherstelle zuerst angefordert wurde, geschehen, bevor
die Operation, die als zweites angefordert wurde, an dieser
Speicherstelle ausgeführt wird. In anderen Worten muß, im
Hinblick auf Fig. 7A, die Schreib-Aktion (9, 0), die zum
Zeitpunkt T3 geschah, geschehen, bevor die Lese-Aktion (9,
0), die zum Zeitpunkt T5 geschah, stattfindet. Diese
Sequenzierung wird durch Überprüfen möglicher
Abhängigkeiten erreicht, wenn eine Transaktion angefordert
wird, und, wenn eine Abhängigkeit identifiziert wird,
wodurch sichergestellt wird, daß die abhängige Transaktion
vor der Transaktion erreicht wird, die die Abhängigkeit
bewirkte.
Zum Zeitpunkt T1, als die Lese-Aktion (5, 0) empfangen
wurde, gab es keine ausstehenden Transaktionen in keiner
der Warteschlangen, so daß keine Abhängigkeit identifiziert
wurde. Zum Zeitpunkt T2, als die Schreib-Aktion (6, 1)
empfangen wurde, gab es keine weiteren Transaktionen, die
den Speicherplatz (6, 1) des DRAMs 113 betrafen, so daß
daher keine Abhängigkeiten identifiziert wurden. In
ähnlicher Weise wurde zum Zeitpunkt T3, als die Schreib-
Aktion (9, 0) empfangen wurde, jede ausstehende Transaktion
überprüft und es wurden keine Abhängigkeiten identifiziert,
weil keine ausstehende Transaktion den Speicherplatz (9, 0)
des DRAM 113 betraf. Zum Zeitpunkt T4 wurde die Lese-Aktion
(7, 1) empfangen, und es wurde erneut keine Abhängigkeit
identifiziert. Zum Zeitpunkt T5 wird die Schreib-Aktion
(10, 0) angefordert, die erneut mit keiner der ausstehenden
Transaktionen in Konflikt steht. Zum Zeitpunkt T6, wenn
jedoch die Anforderung von der Etiketten-Pipeline 107 nach
Abhängigkeiten überprüft wird, wird die Schreib-Aktion (9,
0) identifiziert und eine Abhängigkeit wird eingerichtet,
die erfordern wird, daß der jüngste Eintrag in die WriteQ,
die die Abhängigkeit involviert, beendet werden muß, bevor
die Lese-Aktion (9, 0) bedient wird. Bei diesem Beispiel
wird die Lese-Aktion (5, 0) zuerst bedient, der eine Lese-
Aktion (7, 1) folgt, der eine Schreib-Aktion (6, 1) folgt,
der eine Schreib-Aktion (9, 0) folgt, der eine Schreib-
Aktion (10, 0) folgt, der eine Lese-Aktion (9, 0) folgt,
der eine Lese-Aktion (11, 2) folgt, der eine Lese-Aktion
(15, 0) folgt. Durch Bedienen der Schreib-Aktion (9, 0) vor
der Lese-Aktion (9, 0) stellt das System sicher, daß die
letzte Cache-Zeile für (9, 0) durch die Lese-(9, 0)-
Transaktion empfangen wird.
Fig. 7B zeigt ein Beispiel der Abhängigkeitsauswahl, wenn
mehrere Adreßabhängigkeiten existieren. Bei diesem Beispiel
wird davon ausgegangen, daß die Transaktionen T1, T2, T3,
T4 und T5 in der ReadQ anstehen, wenn zum Zeitpunkt T6 eine
Schreib-Aktion von (10, 0) in die WriteQ eingebracht wird.
Wenn die (10, 0) Schreib-Aktion 701 in den WriteQ-Schlitz
101 eingebracht wird, wird seine Adresse mit allen gültigen
Einträgen in die ReadQ verglichen. Die Schlitze 3 702 und 5
703 stimmen beide überein, so daß die Abhängigkeiten
dahingehend existieren, daß der ReadQ-Schlitz 3 702 vor dem
WriteQ-Schlitz 1 701 ausgeführt werden muß und der ReadQ-
Schlitz 5 703 vor dem WriteQ-Schlitz 1 701 ausgeführt
werden muß. Das System muß diese beiden Abhängigkeiten
jedoch nicht verfolgen. Es ist ausreichend, nur die
Abhängigkeit bezüglich der "jüngsten" Lese-Aktion, die in
die Abhängigkeit involviert ist, aufzuzeichnen, da
innerhalb der ReadQ eine implizite Priorität besteht, stets
die älteste Transaktion zuerst zu verarbeiten. Der ReadQ-
Schlitz 3 702 muß vor dem ReadQ-Schlitz 5 703 ausgeführt
werden. Wenn der WriteQ-Schlitz 1 701 nur eine Abhängigkeit
bezüglich des ReadQ-Schlitzs 5 703 aufzeichnet, wird daher
die Abhängigkeit vom ReadQ-Schlitz 3 702 implizit erfüllt.
Fig. 7C zeigt ein Beispiel, das konzipiert ist, um die
rotierende oder Umbruchbeschaffenheit der Q-Strukturen
hervorzuheben und zu zeigen, wie die Abhängigkeitsprüfung
beeinträchtigt wird. Für dieses Beispiel geht man davon
aus, daß die Transaktionen zu den Zeitpunkten T1, T2, T3,
T4, T5, T6, T7 und T8 alle zusammen Lese-Aktionen waren und
jeweils in den ReadQ-Schlitzen 1 bis 8 gehalten wurden.
Dann werden die Transaktionen, die in den ReadQ-Schlitzen 1
bis 4 zurückgehalten wurden, beendet und aus der ReadQ
entfernt. Die nächste Lese-Transaktion wird in den ReadQ-
Schlitz 1 704 plaziert, die als (14, 0) T9 gezeigt ist. Es
ist zu beachten, daß die Transaktion T9 im Schlitz 1 immer
noch "jünger" ist als die Transaktionen in den Schlitzen 5
bis 8. Zusätzliche Leseanforderungen T10 und T11 werden
dann in die ReadQ-Schlitze 2 und 3 gesetzt. Der Schlitz, wo
eine neue Transaktion plaziert ist, wird durch den ReadQ-
Einbringungszeiger gesteuert. Dabei handelt es sich um
einen rotierenden Zeiger in dem Sinne, daß nach dem
Einbringen einer Transaktion in den Schlitz 8 sich der
Zeiger herumwickelt und auf den Schlitz 1 für die nächste
Einbringung zeigt. Infolgedessen hängt die Priorität oder
das "Alter" einer Transaktion sowohl von ihrer
Schlitzanzahl als auch vom Wert des ReadQ-
Einbringungszeigers ab.
Unter Fortsetzung des Beispiels kommt eine Schreib-Aktion
an (10, 0) 705 zum Zeitpunkt T12 an. Wenn die Schreib-
Aktion (10, 2) T12 in den WriteQ-Schlitz 1 705 eingegeben
wird, wird seine Adresse mit der Adresse der ReadQ-Einträge
verglichen, um Abhängigkeiten herauszufinden. In diesem
Fall weisen der Schlitz 3 706 und der Schlitz 5 707
Adreßübereinstimmungen auf, so daß eine Abhängigkeit
zwischen dem ReadQ-Schlitz 3 706 und dem WriteQ-Schlitz 1
705 besteht und eine Abhängigkeit zwischen dem ReadQ-
Schlitz 5 707 und dem WriteQ-Schlitz 1 705 existiert. Man
beachte, daß dies gleichen Abhängigkeiten sind, die in Fig.
7B existierten, jedoch ist nun der Eintrag in den Schlitz 3
706 der jüngste aufgrund der rotierenden Eigenart der
ReadQ. Daher markiert sich der Eintrag in den WriteQ-
Schlitz 1 705 selbst als vom ReadQ-Schlitz 3 706 abhängig.
Die Abhängigkeit vom ReadQ-Schlitz 5 707 wird durch die
Tatsache, daß die ReadQ ihren Schlitz 5 707 vor dem Schlitz
3 706 ausführen muß, implizit gehandhabt. Ein Fachmann mit
Durchschnittsqualifikation würde verstehen, daß die
Erfindung andere Kombinationen von Adreßschlitzen und
Numerierungsschemata umfaßt.
Fig. 8 ist eine Tabelle, die die
Abhängigkeitslogikprioritäten zwischen den verschiedenen
Warteschlangen darstellt. Eine Spalte 801 identifiziert
eine Warteschlange, die die erste ausstehende Anforderung
empfängt. Eine Reihe 802 identifiziert die Warteschlange,
die die zweite ausstehende Anforderung für eine Operation
oder Transaktion auf der gleichen Speicheradresse empfängt.
Der Inhalt der Tabelle zeigt die resultierenden
Abhängigkeiten an. Diagonale Zellen 803, 804, 805 und 806
beschreiben zwei ausstehende Transaktionen in der gleichen
Warteschlange. Wie zuvor beschrieben wurde, wenn zwei
ausstehende Anforderungen in der gleichen Warteschlange
enthalten sind, werden die angeforderten Transaktionen in
der Reihenfolge, in der sie empfangen werden, ausgeführt.
Die Zellen 807, 808, 809, 810, 811 und 812 sind
Situationen, in denen eine erste anstehende Transaktion
eine Lese-Aktion und eine zweite anstehende Transaktion
eine Schreib-Aktion involviert. Da die Lese-Aktionen nicht
destruktiv sind, sind diese Zellen als Gleichgültige (DC;
DC = don't care) etikettiert, d. h. die Transaktionen
können in einer beliebigen Reihenfolge durchgeführt werden.
Wie jedoch zuvor beschrieben wurde, wird eine ausstehende
Transaktion in einer Kohärenzwarteschlange immer zuerst
durch eine Priorität bedient, und daher ist keine
Abhängigkeit notwendig.
Wie in Fig. 8 dargestellt ist, beschreibt die Zelle 813 die
Abhängigkeit, die erforderlich ist, wenn eine Schreib-
Aktion an einen spezifischen Speicherplatz des DRAMs 113
vor einer Lese-Aktion an denselben Speicherplatz des DRAMs
113 auftritt. In diesem Fall sollte die Schreib-Aktion vor
der Lese-Aktion geschehen. Die Abhängigkeit wird
gehandhabt, indem sichergestellt wird, daß die jüngste,
übereinstimmende, ausstehende Transaktion in der
Schreibwarteschlange (als die Leseanforderung empfangen
wurde) vor der Bedienung eines ausstehenden Eintrags in die
Lesewarteschlange bedient wird. Weitere
Abhängigkeitsalgorithmen können in ähnlicher Weise
implementiert werden.
Die Zelle 814 von Fig. 8 zeigt die umgekehrte Situation.
Darin wird eine übereinstimmende Transaktion zum Lesen
einer speziellen Speicheradresse des DRAMs 113 vor einer
ausstehenden Transaktion zum Schreiben an die
Speicheradresse desselben spezifischen DRAMs 113 empfangen.
In diesem Fall wird eine Abhängigkeit eingerichtet, die
sicherstellt, daß die Lese-Aktion vor der Schreib-Aktion
geschieht. Vorzugsweise wird die Abhängigkeit gehandhabt,
indem sichergestellt wird, daß die jüngste,
übereinstimmende, ausstehende Transaktion in der
Lesewarteschlange (als die Schreibanforderung empfangen
wurde) vor dem Bedienen des ausstehenden Eintrags in die
Schreibwarteschlange bedient wird.
Eine Zelle 815 von Fig. 8 beschreibt die Abhängigkeit, die
erforderlich ist, wenn eine Schreib-Aktion an einen
spezifischen Speicherplatz des DRAMs 113 vor einer
Kohärenzanforderung an denselben spezifischen Speicherplatz
des DRAMs 113 geschieht. In diesem Fall sollte die Schreib-
Aktion vor der Kohärenz geschehen. Vorzugsweise wird die
Abhängigkeit gehandhabt, indem sichergestellt wird, daß die
jüngste, übereinstimmende, ausstehende Transaktion in der
Schreibwarteschlange (als die Kohärenzanforderung empfangen
wurde) vor der Bedienung des ausstehenden Eintrags in die
Kohärenzwarteschlange bedient wird.
Eine Zelle 816 von Fig. 8 zeigt die umgekehrte Situation.
In der Zelle 816 wird eine ausstehende Kohärenztransaktion
für eine spezifische Speicheradresse des DRAMs 113 vor
einer ausstehenden Transaktion zum Schreiben derselben
spezifischen Speicheradresse des DRAMs 113 empfangen. In
diesem Fall stellt die Priorität, die sicherstellt, daß die
Kohärenztransaktion vor der Schreibtransaktion geschieht,
die richtige Sequenzierung der Transaktionen sicher.
Eine Zelle 817 von Fig. 8 beschreibt die Abhängigkeit, die
erforderlich ist, wenn eine Schreib-Aktion an einen
spezifischen Speicherplatz des DRAMs 113 vor einer EvictQ-
Anforderung an den gleichen spezifischen Speicherplatz des
DRAMs 113 geschieht. In diesem Fall sollte die Schreib-
Aktion vor der Räum-Aktion geschehen. Vorzugsweise wird die
Abhängigkeit gehandhabt, indem sichergestellt wird, daß die
jüngste, übereinstimmende, ausstehende Transaktion in der
Schreibwarteschlange (als die Räumungsanforderung empfangen
wurde) vor dem Bedienen des ausstehenden Eintrags in die
Räumungswarteschlange bedient wird.
Eine Zelle 818 von Fig. 8 zeigt die umgekehrte Situation.
In der Zelle 818 wird eine ausstehende Räumungstransaktion
für eine spezifische Speicheradresse des DRAMs 113 vor
einer ausstehenden Transaktion zum Schreiben derselben
spezifischen Speicheradresse des DRAMs 113 empfangen. In
diesem Fall sollte die Räumungstransaktion vor der
Schreibtransaktion geschehen, um sicherzustellen, daß die
Cache-Zeile, die sich momentan am Platz des DRAMs 113
befindet, nicht durch die Schreibtransaktion überschrieben
wird. Die Abhängigkeit wird gehandhabt, indem
sichergestellt wird, daß die jüngste, übereinstimmende,
ausstehende Transaktionen in der Räumungswarteschlange (als
die Schreibwarteschlange empfangen wurde) vor dem Bedienen
des ausstehenden Eintrags auf die Schreibwarteschlange
bedient wird.
Claims (18)
1. Speicherentscheidungsvorrichtung, die folgende
Merkmale aufweist:
eine Lese-Warteschlange (101), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Lese-Anforderungen zu speichern;
eine Schreib-Warteschlange (102), die ein Register für jeden Eintrag umfaßt, um Adressen von anstehenden Schreibe-Anforderungen zu speichern; und
eine Abhängigkeitslogik zum Einrichten von Prioritäten von Operationen zwischen der anstehenden Lese-Warteschlange (101) und der anstehenden Schreib-Warteschlange (102).
eine Lese-Warteschlange (101), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Lese-Anforderungen zu speichern;
eine Schreib-Warteschlange (102), die ein Register für jeden Eintrag umfaßt, um Adressen von anstehenden Schreibe-Anforderungen zu speichern; und
eine Abhängigkeitslogik zum Einrichten von Prioritäten von Operationen zwischen der anstehenden Lese-Warteschlange (101) und der anstehenden Schreib-Warteschlange (102).
2. Speicherentscheidungsvorrichtung gemäß Anspruch 1, bei
der:
die Abhängigkeitslogik die anstehenden Lese-
Anforderungen gegenüber den anstehenden Schreibe-
Anforderungen priorisiert.
3. Speicherentscheidungsvorrichtung gemäß Anspruch 1 oder
2, bei der:
die Abhängigkeitslogik anstehende Lese-Anforderungen
und anstehende Schreib-Anforderungen identifiziert,
die einen gemeinsamen Speicherplatz (113) betreffen,
und bei der die Abhängigkeitslogik eine
Abhängigkeitsbeziehung, die zum Sequenzieren der
anstehenden Anforderungen, die den gemeinsamen
Speicherplatz (113) betreffen, verwendet wird,
einrichtet.
4. Speicherentscheidungsvorrichtung gemäß Anspruch 3, bei
der der Speicherplatz (113) ein Speicherplatz eines
DRAMs ist.
5. Speicherentscheidungsvorrichtung gemäß Anspruch 3, bei
der der Speicherplatz (113) ein Speicherplatz eines
SRAMs ist.
6. Speicherentscheidungsvorrichtung gemäß einem der
Ansprüche 3 bis 5, bei der die Abhängigkeit eine älteste,
anstehende Anforderung favorisiert.
7. Speicherentscheidungsvorrichtung gemäß einem der
Ansprüche 1 bis 6, die ferner konfiguriert ist, um
Operationen eines Cache-Speichers zu unterstützen, der
folgende Merkmale aufweist:
eine Kohärenz-Warteschlange (301), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Kohärenz-Anforderungen (301) zu speichern; und
eine Räumungs-Warteschlange (302), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Räumungs-Anforderungen (302) zu speichern;
wobei die Abhängigkeitslogik Prioritäten zwischen den anstehenden Lese-Anforderungen, den anstehenden Schreib-Anforderungen, den anstehenden Kohärenz- Anforderungen und den anstehenden Räumungs- Anforderungen einrichtet.
eine Kohärenz-Warteschlange (301), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Kohärenz-Anforderungen (301) zu speichern; und
eine Räumungs-Warteschlange (302), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Räumungs-Anforderungen (302) zu speichern;
wobei die Abhängigkeitslogik Prioritäten zwischen den anstehenden Lese-Anforderungen, den anstehenden Schreib-Anforderungen, den anstehenden Kohärenz- Anforderungen und den anstehenden Räumungs- Anforderungen einrichtet.
8. Speicherentscheidungsvorrichtung gemäß Anspruch 7, bei
der:
die Abhängigkeitslogik die anstehenden Lese-
Anforderungen gegenüber den anstehenden Schreib-
Anforderungen priorisiert.
9. Speicherentscheidungsvorrichtung gemäß Anspruch 7, bei
der:
die Abhängigkeitslogik anstehende Lese-Anforderungen
und anstehende Schreib-Anforderungen, die einen
gemeinsamen Speicherplatz (113) betreffen,
identifiziert und bei der die Abhängigkeitslogik eine
Abhängigkeit einrichtet, die die anstehenden
Anforderungen, die den gemeinsamen Speicherplatz (113)
betreffen, sequenziert.
10. Speicherentscheidungsvorrichtung gemäß Anspruch 9, bei
der der Speicherplatz (113) ein Speicherplatz eines
DRAMs ist.
11. Speicherentscheidungsvorrichtung gemäß Anspruch 9, bei
der der Speicherplatz (113) ein Speicherplatz eines
SRAMs ist.
12. Speicherentscheidungsvorrichtung gemäß Anspruch 9, bei
der die Abhängigkeit eine anstehende Anforderung
favorisiert.
13. Speicherentscheidungsvorrichtung, die folgende
Merkmale aufweist:
eine Lese-Warteschlange (101), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Lese-Anforderungen zu speichern;
eine Schreib-Warteschlange (102), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Schreib-Anforderungen zu speichern;
eine Kohärenz-Warteschlange (301), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Kohärenz-Anforderungen zu speichern;
eine Räumungs-Warteschlange (302), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Räumungs-Anforderungen zu speichern; und
eine Abhängigkeitslogik, die konfiguriert ist, um Betriebsprioritäten zwischen den anstehenden Lese-, Schreib-, Kohärenz- und Räumungs-Anforderungen einzurichten.
eine Lese-Warteschlange (101), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Lese-Anforderungen zu speichern;
eine Schreib-Warteschlange (102), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Schreib-Anforderungen zu speichern;
eine Kohärenz-Warteschlange (301), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Kohärenz-Anforderungen zu speichern;
eine Räumungs-Warteschlange (302), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Räumungs-Anforderungen zu speichern; und
eine Abhängigkeitslogik, die konfiguriert ist, um Betriebsprioritäten zwischen den anstehenden Lese-, Schreib-, Kohärenz- und Räumungs-Anforderungen einzurichten.
14. Speicherentscheidungsvorrichtung gemäß Anspruch 13,
bei der die Abhängigkeitslogik Abhängigkeiten zwischen
anstehenden Lese-, Schreib-, Kohärenz- und
Räumungsanforderungen einrichtet.
15. Verfahren zum Steuern eines Zugriffs auf einen Cache,
wobei das Verfahren folgende Schritte aufweist:
Warteschlangenbildung von anstehenden Lese- Anforderungen;
Warteschlangenbildung von anstehenden Schreibe- Anforderungen; und
Priorisieren einer Reihenfolge der anstehenden Lese- Anforderungen und der anstehenden Schreib- Anforderungen.
Warteschlangenbildung von anstehenden Lese- Anforderungen;
Warteschlangenbildung von anstehenden Schreibe- Anforderungen; und
Priorisieren einer Reihenfolge der anstehenden Lese- Anforderungen und der anstehenden Schreib- Anforderungen.
16. Verfahren gemäß Anspruch 15, bei dem der Schritt des
Priorisierens die Lese-Anforderung gegenüber den
Schreib-Anforderungen priorisiert.
17. Verfahren gemäß Anspruch 15 oder 16, das ferner
folgenden Schritt aufweist:
Erzeugen von Abhängigkeiten für anstehende
Anforderungen, die einen gemeinsamen Speicherplatz
(113) betreffen.
18. Verfahren gemäß einem der Ansprüche 15 bis 17, bei dem
der Schritt des Erzeugens von Abhängigkeiten die erste
angeforderte Transaktion gegenüber einer später
angeforderten Transaktion priorisiert.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/853,951 US20020169935A1 (en) | 2001-05-10 | 2001-05-10 | System of and method for memory arbitration using multiple queues |
Publications (1)
Publication Number | Publication Date |
---|---|
DE10219623A1 true DE10219623A1 (de) | 2002-11-21 |
Family
ID=25317322
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE10219623A Ceased DE10219623A1 (de) | 2001-05-10 | 2002-05-02 | System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen |
Country Status (2)
Country | Link |
---|---|
US (1) | US20020169935A1 (de) |
DE (1) | DE10219623A1 (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10078592B2 (en) | 2004-09-09 | 2018-09-18 | Intel Corporation | Resolving multi-core shared cache access conflicts |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7127559B2 (en) * | 2001-07-10 | 2006-10-24 | Micron Technology, Inc. | Caching of dynamic arrays |
US7062761B2 (en) | 2001-07-10 | 2006-06-13 | Micron Technology, Inc. | Dynamic arrays and overlays with bounds policies |
US20030088744A1 (en) * | 2001-11-06 | 2003-05-08 | Infineon Technologies Aktiengesellschaft | Architecture with shared memory |
US20050071574A1 (en) * | 2001-11-06 | 2005-03-31 | Rudi Frenzel | Architecture with shared memory |
US7032077B2 (en) * | 2002-12-23 | 2006-04-18 | Hewlett-Packard Development Company, L.P. | Multiple cache coherency |
US7149829B2 (en) | 2003-04-18 | 2006-12-12 | Sonics, Inc. | Various methods and apparatuses for arbitration among blocks of functionality |
US7296105B2 (en) * | 2003-10-03 | 2007-11-13 | Sonics, Inc. | Method and apparatus for configuring an interconnect to implement arbitration |
US7739436B2 (en) * | 2004-11-01 | 2010-06-15 | Sonics, Inc. | Method and apparatus for round robin resource arbitration with a fast request to grant response |
US20060129764A1 (en) * | 2004-12-09 | 2006-06-15 | International Business Machines Corporation | Methods and apparatus for storing a command |
US7418543B2 (en) * | 2004-12-21 | 2008-08-26 | Intel Corporation | Processor having content addressable memory with command ordering |
US7870545B2 (en) * | 2005-12-16 | 2011-01-11 | Intel Corporation | Protecting shared variables in a software transactional memory system |
US20080082755A1 (en) * | 2006-09-29 | 2008-04-03 | Kornegay Marcus L | Administering An Access Conflict In A Computer Memory Cache |
US20080201531A1 (en) * | 2006-09-29 | 2008-08-21 | Kornegay Marcus L | Structure for administering an access conflict in a computer memory cache |
US20080282050A1 (en) * | 2007-05-07 | 2008-11-13 | On Demand Microelectronics | Methods and arrangements for controlling memory operations |
US8583865B1 (en) * | 2007-12-21 | 2013-11-12 | Emc Corporation | Caching with flash-based memory |
US8549209B2 (en) * | 2008-11-04 | 2013-10-01 | Mosaid Technologies Incorporated | Bridging device having a configurable virtual page size |
US8904115B2 (en) * | 2010-09-28 | 2014-12-02 | Texas Instruments Incorporated | Cache with multiple access pipelines |
US9632947B2 (en) * | 2013-08-19 | 2017-04-25 | Intel Corporation | Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early |
US9665468B2 (en) | 2013-08-19 | 2017-05-30 | Intel Corporation | Systems and methods for invasive debug of a processor without processor execution of instructions |
CN105980978B (zh) * | 2014-12-13 | 2019-02-19 | 上海兆芯集成电路有限公司 | 用于检测暂停的逻辑分析器 |
EP3047380B1 (de) * | 2014-12-13 | 2019-04-24 | VIA Alliance Semiconductor Co., Ltd. | Musterdetektor zur erkennung von ausfällen |
WO2016092345A1 (en) | 2014-12-13 | 2016-06-16 | Via Alliance Semiconductor Co., Ltd. | Logic analyzer for detecting hangs |
US9697121B2 (en) | 2015-09-29 | 2017-07-04 | International Business Machines Corporation | Dynamic releasing of cache lines |
US11461127B2 (en) * | 2019-05-24 | 2022-10-04 | Texas Instruments Incorporated | Pipeline arbitration |
-
2001
- 2001-05-10 US US09/853,951 patent/US20020169935A1/en not_active Abandoned
-
2002
- 2002-05-02 DE DE10219623A patent/DE10219623A1/de not_active Ceased
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10078592B2 (en) | 2004-09-09 | 2018-09-18 | Intel Corporation | Resolving multi-core shared cache access conflicts |
Also Published As
Publication number | Publication date |
---|---|
US20020169935A1 (en) | 2002-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE10219623A1 (de) | System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen | |
DE69721643T2 (de) | Multiprozessorsystem ausgestaltet zur effizienten Ausführung von Schreiboperationen | |
DE69722079T2 (de) | Ein Mehrrechnersystem mit Anordnung zum Durchführen von Blockkopieroperationen | |
DE69722512T2 (de) | Mehrrechnersystem mit einem die Anzahl der Antworten enthaltenden Kohärenzprotokoll | |
DE102009023898B4 (de) | Optimierung von gleichzeitigen Zugriffen in einem verzeichnisbasierten Kohärenzprotokoll | |
DE69724354T2 (de) | Ein Mehrprozessorrechnersystem mit lokalen und globalen Adressräumen und mehreren Zugriffsmoden | |
DE69721640T2 (de) | Multiprozessor-Rechnersystem und Verfahren zur Steuerung des Verkehrsflusses | |
DE10262164B4 (de) | Computersystem mit einer hierarchischen Cacheanordnung | |
DE60222402T2 (de) | Verfahren und system zur spekulativen ungültigkeitserklärung von zeilen in einem cachespeicher | |
DE102009022151B4 (de) | Verringern von Invalidierungstransaktionen aus einem Snoop-Filter | |
DE69233655T2 (de) | Mikroprozessorarchitektur mit der Möglichkeit zur Unterstützung mehrerer verschiedenartiger Prozessoren | |
DE102007052853B4 (de) | Zeilentauschschema zur Verringerung von Rückinvalidierungen in einem Snoopfilter | |
DE69724353T2 (de) | Mehrrechnersystem mit einem Drei-Sprung-Kommunikationsprotokoll | |
DE69733374T2 (de) | Speichersteuerungsvorrichtung und -system | |
DE102007048507B4 (de) | Cache-Speichersystem und Verfahren zum Bereitstellen eines Transaktionsspeichers | |
DE112005002180T5 (de) | Lösen von Cachekonflikten | |
DE3621321A1 (de) | Cache-speicher- bzw. multiprozessor-system und betriebsverfahren | |
DE102008062044B4 (de) | 1Speicherinterne, seiteninterne Verzeichnis-Chache-Kohärenz-Konfiguration | |
DE10219621A1 (de) | Schnelle Prioritätsbestimmungsschaltung mit rotierender Priorität | |
DE19516937A1 (de) | Hierarchisches Cachesystem für einen Computer | |
DE3102150A1 (de) | "schaltungsanordnung mit einem cachespeicher fuer eine zentraleinheit einer datenverarbeitungsanlage | |
DE2841041A1 (de) | Datenverarbeitungsanlage mit mindestens zwei mit einem schnellen arbeitsspeicher ausgeruesteten prozessoren | |
DE102007030116A1 (de) | Snoop-Filter mit ausschließlicher Inhaberschaft | |
DE69937611T2 (de) | Intelligenter Puffer-Speicher | |
DE102006030879A1 (de) | System zum Reduzieren der Latenzzeit von exklusiven Leseanforderungen in einem symmetrischen Multiprozessorsystem |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
8131 | Rejection |