DE69132201T2 - Speicher-Anordnung und Verfahren mit Vorausholungspuffer - Google Patents

Speicher-Anordnung und Verfahren mit Vorausholungspuffer

Info

Publication number
DE69132201T2
DE69132201T2 DE69132201T DE69132201T DE69132201T2 DE 69132201 T2 DE69132201 T2 DE 69132201T2 DE 69132201 T DE69132201 T DE 69132201T DE 69132201 T DE69132201 T DE 69132201T DE 69132201 T2 DE69132201 T2 DE 69132201T2
Authority
DE
Germany
Prior art keywords
memory
cache
data
information
address
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 - Lifetime
Application number
DE69132201T
Other languages
English (en)
Other versions
DE69132201D1 (de
Inventor
Alan Eustace
Norman P. Jouppi
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.)
Compaq Computer Corp
Original Assignee
Compaq Computer Corp
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
Priority claimed from US07/499,958 external-priority patent/US5261066A/en
Application filed by Compaq Computer Corp filed Critical Compaq Computer Corp
Publication of DE69132201D1 publication Critical patent/DE69132201D1/de
Application granted granted Critical
Publication of DE69132201T2 publication Critical patent/DE69132201T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime 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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • FMECHANICAL ENGINEERING; LIGHTING; HEATING; WEAPONS; BLASTING
    • F02COMBUSTION ENGINES; HOT-GAS OR COMBUSTION-PRODUCT ENGINE PLANTS
    • F02BINTERNAL-COMBUSTION PISTON ENGINES; COMBUSTION ENGINES IN GENERAL
    • F02B75/00Other engines
    • F02B75/02Engines characterised by their cycles, e.g. six-stroke
    • F02B2075/022Engines characterised by their cycles, e.g. six-stroke having less than six strokes per cycle
    • F02B2075/027Engines characterised by their cycles, e.g. six-stroke having less than six strokes per cycle four
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6022Using a prefetch buffer or dedicated prefetch cache

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)

Description

    HINTERGRUND DER ERFINDUNG 1. Gebiet der Erfindung:
  • Die vorliegende Erfindung bezieht sich im allgemeinen auf ein System und ein Verfahren zum Verbessern der Performanz einer Speicherhierarchie bei der Datenverarbeitung. Insbesondere bezieht sich die Erfindung auf solch ein System und ein Verfahren, das die Systemperformanz eines Cache-Speichers verbessert. Genauer gesagt bezieht sich die Erfindung auf solch ein System und ein Verfahren, das Fehltreffer- bzw. Miss-Penalen für Cache-Speicherzugriffe wesentlich verringert.
  • 2. Beschreibung des Standes der Technik:
  • Cache-Performanz gewinnt immer mehr an Bedeutung, da es eine dramatische Wirkung auf die Performanz von fortgeschrittenen Prozessoren aufweist. Tabelle 1 listet einige Cache-Miss- Zeiten und die Wirkung eines Miss auf die Maschinenperformanz auf. Während der letzten Dekade hat sich die Zykluszeit viel schneller als die Hauptspeicherzugriffszeit verringert. Die durchschnittliche Anzahl von Maschinenzyklen pro Anweisung hat sich ebenfalls dramatisch verringert, insbesondere wenn der Übergang von Rechnermaschinen mit komplexem Befehlssatz (CISC = complex instruction set computer) auf Rechnermaschinen mit reduziertem Befehlssatz (RISC = reduced instruction set computer) berücksichtigt wird. Diese beiden Wirkungen sind multiplikativ und führen zu enormen Erhöhungen bei den Miss-Kosten. Beispielsweise kostet ein Cache-Miss auf einem Digital Equipment Corporation VAX 11/780 nur 60% der durchschnittlichen Befehlsausführung. Das heißt, das sogar wenn jeder Befehl einen Cache-Miss auswies, sich die Maschinenperformanz nur um 60% verlangsamen würde. Wenn eine Risk-Maschine, wie beispielsweise die Digital Equipment Corporation WRL Titan, einen Miss aufweist, sind die Kosten fast zehn Befehlszeiten. Außerdem scheint es, daß sich diese Trends, insbesondere das sich erhöhende Verhältnis von Speicherzugriffszeit zu Maschinenzykluszeit, fortsetzen. In der Zukunft wird ein Cache-Miss bis hinunter zum Hauptspeicher einer Superskalar-Maschine, die zwei Befehle pro Zyklus ausführt, beträchtlich über 100 Befehlszeiten kosten. Sogar mit einer sorgfältigen Anwendung bekannter Cache-Design-Techniken, können Maschinen mit Hauptspeicherlatenzzeiten von über 100 Befehlszeiten ohne weiteres mehr als die Hälfte ihrer potentiellen Performanz bei der Speicherhierarchie verlieren. Dies macht sowohl Hardware- als auch Softwareforschung an fortgeschrittenen Speicherhierarchien immer bedeutender. TABELLE 1
  • GB-2193356A beschreibt ein Cache-Speichersystem gemäß dem Oberbegriff des beiliegenden Anspruchs 1, wobei ein Prefetch (Vorauslesen) getriggered wird, wenn eine aktuelle Anforderung an den Cache ein Lesen eines im Cache enthaltenen "four word cacheable read" ist, die nächste sequentielle Zeile oder Line nicht in dem Cache ist, und die nächste sequentielle Line in dem gleichen Adressenblock (von vier Lines) wie die aktuell angeforderte Line ist. Die Line, die vorausgelesen (prefetched) wird, ist die nächste sequentielle Line, die in einen Puffer gebracht wird.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die Erfindung liefert ein Speichersystem und ein Speicherzugriffsverfahren gemäß der Ansprüche 1 und 16.
  • Die Vorteile und Merkmale der Erfindung werden Fachleute nach Durchsicht der folgenden detaillierteren Beschreibung der Ausführungsform der Erfindung zusammen mit den Zeichnungen offensichtlicher sein:
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Fig. 1 ein Blockdiagramm eines Ausgangssystems (baseline system) ist, bei dem die Erfindung beinhaltet sein kann.
  • Fig. 2 ist eine graphische Darstellung, die die Performanz des Systems von Fig. 1 zeigt.
  • Fig. 3 ist eine graphische Darstellung, die einen weiteren Aspekt der Performanz des Systems von Fig. 1 zeigt.
  • Fig. 4 ist ein Blockdiagramm eines Teils des in Fig. 1 gezeigten Systems.
  • Fig. 5 und 6 sind graphische Darstellungen, die Aspekte der Performanz eines Systems einschließlich des Teils von Fig. 4 zeigen.
  • Fig. 7 ist ein Blockdiagramm eines Systemteils, das dem von Fig. 4 entspricht.
  • Fig. 8-11 sind graphische Darstellungen, die Aspekte der Performanz eines Systems einschließlich des Teils von Fig. 7 zeigen.
  • Fig. 12 ist eine graphische Darstellung, die einen weiteren Aspekt der Performanz des Systems von Fig. 1 zeigt.
  • Fig. 13 ist ein Blockdiagramm eines Teils eines Systems, das die Erfindung beinhaltet.
  • Fig. 14-15 sind graphische Darstellungen, die Aspekte der Performanz eines Systems einschließlich des Teils von Fig. 13 zeigen.
  • Fig. 16 ist ein Blockdiagramm eines Systemteils, der dem von Fig. 13 entspricht.
  • Fig. 17-18 sind graphische Darstellungen, die Aspekte der Performanz eines Systems einschließlich des Teils von Fig. 13 zeigen.
  • Fig. 19 ist ein Schlüssel, der die Anordnung von Fig. 19A und 19B zeigt.
  • Fig. 19A und 19B sind ein Blockdiagramm eines Systemteils, das im allgemeinen einer Kombinierung der Systemteile von Fig. 7, 13 und 16 entspricht.
  • Fig. 20 ist eine graphische Darstellung, die Aspekte der Performanz des Systems von Fig. 19A und 19B zeigt.
  • AUSFÜHRLICHE BESCHREIBUNG DER ERFINDUNG
  • Fig. 1 zeigt ein Ausgangssystem (baseline system), bei dem die Erfindung beinhaltet sein kann. Eine CPU 12, eine Gleit- oder Fließkomma-Einheit 14, eine Speichermanagementeinheit 16 (z. B. Adressenumsetzpuffer, TLB = translation look-aside buffer) und First-Level-Befehls- und Daten-Caches 18 und 20 befinden sich auf dem gleichen Chip 22 oder auf einem einzigen Hochgeschwindigkeitsmodul, das mit einer fortgeschrittenen Packungstechnik gebaut ist. (Wir werden die Zentraleinheit 24 als einen einzigen Chip in dem Rest der Beschreibung bezeichnen, wobei jedoch Chip oder Modul impliziert ist). Die Zykluszeit von diesem Chip 22 ist drei bis acht mal länger als die Befehlserteilungsrate (d. h. 3 bis 8 Befehle können in einem Off-Chip-Taktzyklus erteilt werden). Dies wird entweder durch eine sehr schnelle On-Chip- Taktgeber (z. B. superpipelining), durch Erteilen vieler Befehle pro Zyklus (z. B. superskalares oder sehr langes Befehlswort, VLIW = very long instruction word) und/oder durch Verwenden von Technologien mit höherer Geschwindigkeit für den Prozessorchip 22 als für den Rest des Systems (z. B. GaAs versus BiCMOS) erreicht.
  • Die erwartete Größe der On-Chip-Caches 18 und 20 ändern sich mit der Implementierungstechnologie für den Prozessor 24, wobei jedoch Technologien mit höherer Geschwindigkeit im allgemeinen zu kleineren On-Chip-Caches führen.
  • Beispielsweise sollten ziemlich große On-Chip-Caches 18 und 20 in CMOS machbar sein, wobei jedoch nur kleine Caches 18 oder 20 in der nahen Zukunft für GaAS oder bipolare Prozessoren machbar sind. Obgleich "GaAs" und "Bipolar" schneller sind, tendiert die höhere Miss-Rate von ihren kleineren Caches dazu, das tatsächliche System-Performanz- Verhältnis zwischen GaAs- oder bipolaren Maschinen und dichten CMOS-Maschinen auf weniger als das Verhältnis zwischen ihren Gate-Geschwindigkeiten zu verringern. Bei allen Fällen wird angenommen, daß die First-Level-Caches 18 und 20 direkt abgebildet sind, da dies zu der schnellsten wirksamen Zugriffszeit führt. Zeilen- oder Line-Größen in den On-Chip-Caches 18 und 20 sind am wahrscheinlichsten in dem Bereich von 16B bis 32B. Der Daten-Cache 20 kann entweder "write-through" oder "write-back" sein, wobei diese Beschreibung jedoch diese Kompromisse nicht untersucht.
  • Es sei angenommen, daß ein Second-Level-Cache 26 von 512 KB bis 16MB reicht und aus Höchstgeschwindigkeits-statischen RAMs aufzubauen ist. Es sei angenommen, daß er aus den gleichen Gründen wie die First-Level-Caches 18 und 20 direkt abgebildet ist. Für die Caches 26 dieser Größe sind Zugriffszeiten von 16 bis 30 ns wahrscheinlich. Dies ergibt eine Zugriffszeit für den Cache von 4 bis 30 Befehlszeiten. Die relative Geschwindigkeit des Prozessors 24 verglichen mit der Zugriffszeit des Cache 26 impliziert, daß das Second- Level-Cache im Pipeline-System arbeiten muß, damit er eine ausreichende Bandbreite liefern kann. Es sei beispielsweise der Fall betrachtet, bei dem die First-Level-Caches 18 und 20 "write-through" Caches sind. Da Speicherung typischerweise mit einer durchschnittlichen Rate von 1 alle 6 oder 7 Befehlen auftritt, würde ein externer Cache 26, der nicht im Pipeline-System arbeitet, sogar nicht genug Bandbreite aufweisen, um den Speicherverkehr für Zugriffszeiten zu handhaben, die größer als 7 Befehlszeiten sind. Caches arbeiten im Pipeline-System in Mainframes für eine Anzahl von Jahren, wobei dies jedoch eine neue Entwicklung für Workstations ist. Neuerdings sind Cache-Chips mit ECL E/A's (ECL I/O) und Registern oder Latches 28 an ihren Eingängen und Ausgängen aufgetreten; diese sind für Caches, die im Pipeline-System arbeiten, ideal. Die Anzahl von Pipeline- Stufen bei einem Second-Level-Cache-Zugriff können 2 bis 3 sein, abhängig davon, ob die Pipestufe 28, die von dem Prozessorchip 22 zu den Cache-Chips geht, und die Pipestufe 30, die von den Cache-Chips zu dem Prozessor 24 zurückkehrt, Voll- oder Halb-Pipestufen sind.
  • Um einen ausreichenden Speicher für einen Prozessor 24 dieser Geschwindigkeit vorzusehen (z. B. mehrere Megabyte pro MIP), sollte der Hauptspeicher 34 im Bereich von 512 MB bis 4GB sein. Dies bedeutet, daß, sogar wenn 16Mb DRAMs verwendet werden, er grob eintausend DRAMs enthalten wird. Das Hauptspeichersystem 34 wird wahrscheinlich etwa 10 mal länger für einen Zugriff benötigen als das Second-Level-Cache 26. Die Zugriffszeit für den Hauptspeicher 34 kann von der Zeit dominiert werden, die erforderlich ist, um Adressen- und Datensignale unter eintausend DRAMs zu verteilen, die über viele Karten verteilt sind. Somit kann sogar mit dem Erscheinen schnellerer DRAMs die Zugriffszeit für Hauptspeicher grob dieselbe bleiben. Die relativ große Zugriffszeit für Hauptspeicher erfordert ihrerseits, daß Second-Level-Cache-Line-Größen von 128 oder 256B benötigt werden. Es sei beispielsweise der Fall betrachtet, bei dem nur 16B nach 320 ns zurückgegeben werden. Dies ist eine Busbandbreite von 50 MB/s. Da ein 10 MIP-Prozessor mit dieser Busbandbreite beim Kopieren von einem Speicherort zu einem anderen Busbandbreiten-begrenzt sein würde, würde wenig zusätzliche Performanz durch die Verwendung eines 100 bis 1000 MIP-Prozessors erhalten werden. Dies ist von bedeutendem Belang bei der System-Performanz eines Prozessors.
  • Mehrere Beobachtungen sind bei dem Ausgangssystem 10 angebracht. Zuerst ist die Speicherhierarchie des Systems tatsächlich demjenigen einer Maschine, wie beispielsweise einer VAX 11/780 ähnlich, wobei jedoch jeder Level in der Hierarchie einen Level aufwärts hinzu der CPU 12 bewegt wurde. Beispielsweise ist das 8KB Board-Level-Cache in der 780 nun On-Chip. Aus dem 512 KB bis 16MB Hauptspeicher auf früheren VAX-Modellen wurde der Board-Level-Cache 26. Wie bei dem Hauptspeicher der 780iger ist die ankommende Transfergröße groß (128-256B in diesem Fall versus 512B Seiten in der VAX). Der Hauptspeicher 34 bei diesem System ist von ähnlicher Größe wie die Platten-Untersysteme früherer 780iger und führt ähnliche Funktionen, wie beispielsweise Paging und Datei-System-Caching, durch.
  • Die Speicherhierarchie-Performanz eines Systems 10 mit Parametern in diesem Bereich wird in Fig. 2 angegeben. Die für das System tatsächlich angenommenen Parameter sind 1000 MIPS Befehlserteilungsrate, 4KB First-Level-Befehls- und 4KB Daten-Caches mit 16B Lines und 1MB Second-Level-Cache mit 128B Lines. Es sei angenommen, daß 24 Befehlszeiten für den ersten Level und 320 Befehlszeiten für den zweiten Level Miss-Penalen seien. Die Merkmale der Testprogramme werden in Tabelle 2 angegeben. Diese Bewertungsmaßstäbe oder Benchmarks sind verglichen mit den meisten, heute betriebenen Ablaufverfolgungen verhältnismäßig lang, wobei jedoch die Wirkungen eines Multiprocessing in dieser Arbeit nicht modelliert wurden.
  • Wie aus Fig. 2 ersichtlich ist, verlieren die meisten Benchmarks mehr als die Hälfte ihrer potentiellen Performanz in First-Level-Cache-Misses. Nur relativ kleine Mengen der Performanz gehen für Second-Level-Cache-Misses verloren. Dies ist primär auf die große Cache-Größe des Second-Level verglichen mit der Größe der ausgeführten Programme zurückzuführen. Längere Ablaufverfolgungen größerer Programmen weisen eine erhebliche Anzahl von Second-Level- Cache-Misses auf. Da die bei dieser Beschreibung verwendete Prüfreihe für ein bedeutende Second-Level-Cache-Aktivität zu klein ist, werden Second-Level-Cache-Misses nicht ausführlich untersucht. TABELLE 2
  • Da sich die angenommenen Parameter an dem extremen Ende der Bereiche befinden (maximaler Performanz-Prozessor mit Caches minimaler Größe) würden die anderen Konfigurationen proportional weniger Performanz in ihrer Speicherhierarchie verlieren. Nichtsdestoweniger wird jede Konfiguration in dem untersuchten Bereich ein bedeutendes Verhältnis Ihrer potentiellen Performanz in der Speicherhierarchie verlieren. Dies bedeutet, daß die größte Hebelwirkung auf System- Dies bedeutet, daß die größte Hebelwirkung auf System- Performanz durch Verbessern der Speicherhierarchie-Performanz erhalten wird, und nicht durch Versuchen, die Performanz der CPU weiter zu erhöhen (z. B. durch aggressiveres paralleles Erteilen von Befehlen). Techniken zum Verbessern der Performanz der Ausgangs-Speicherhierarchie mit niedrigen Kosten sind das Thema des Rests dieser Beschreibung.
  • Schließlich sollte, um ein Gefährden der Performanz des CPU- Kerns (der die CPU 12, FPU 14, MMU 16 und First-Level-Caches 18 und 20 umfaßt) zu vermeiden, jede von der zu untersuchenden Techniken erforderliche zusätzliche Hardware außerhalb des CPU-Kerns residieren (z. B. unterhalb der First- Level-Caches 18 und 20). In dem dies getan wird, wird die zusätzliche Hardware nur während Cache-Misses involviert sein, und sich daher nicht in dem kritischen Weg für eine normale Befehlsausführung befinden.
  • Misses in Caches können in vier Kategorien klassifiziert werden: Konflikt, Obligatorisch, Kapazität und Kohärenz. Konflikt-Misses sind Misses, die nicht auftreten würden, wenn der Cache vollassoziativ wäre und zuletzt einen (LRU)- Austausch benutzt hätte. Obligatorische Misses sind Misses, die in jeder Cache-Organisation erforderlich sind, da sie die ersten Referenzen auf ein Datenstück sind. Kapazitäts-Misses treten auf, wenn die Cachegröße nicht ausreichend ist, um Daten zwischen Referenzen zu halten. Kohärenz-Misses sind Misses, die sonst nicht auftreten würden, ausgenommen bei einer Invalidierung, um eine Multiprozessor-Cache-Konsistenz zu bewahren.
  • Obgleich Direktabbildungs-Caches mehr Konflikt-Misses in Folge ihres Fehlens von Assoziativität aufweisen, ist ihre Performanz immer noch besser als Satz-assoziative Caches, wenn ihre Zugriffszeitkosten für Hits (Treffer) betrachtet werden. Tatsächlich ist der Direktabbildungs-Cache die einzige Cache-Konfiguration, bei der der kritische Weg nur die erforderliche Zeit ist, um auf ein RAM zuzugreifen.
  • Konflikt-Misses machen typischerweise 20% und 40% aller Direktabbildungs-Cache-Misses aus. Fig. 3 beschreibt den Prozentsatz von Misses in Folge von Konflikts für unser Prüfreihe ausführlich. Im Mittel sind 30% der First-Level- Daten-Cache-Misses auf Konflikte und 20% der First-Level- Befehls-Cache-Misses auf Konflikte zurückzuführen. Da dies erhebliche Prozentsätze sind, würde es schön sein, "unseren Kuchen zu haben und ihn auch zu essen", indem irgendwie eine zusätzliche Assoziativität vorgesehen wird, ohne den kritischen Zugriffsweg für einen Direktabbildungs-Cache zu erweitern.
  • Wir können Assoziativität zu dem Direktabbildungs-Cache 20 durch Anbringen eines kleinen Miss-Cache 42 On-Chip zwischen einem First-Level-Cache 20 und dem Zugriffsport zu dem Second-Level-Cache hinzufügen, wie in dem Miss-Cache-System 40 von Fig. 4 gezeigt ist. Der Miss-Cache 42 ist ein kleiner, Vollassoziativ-Cache, der von der Größenordnung von 2 bis 8 Cache-Lines 44 an Daten enthält. Wenn ein Miss auftritt, werden Daten nicht nur dem Direktabbildungs-Cache 20 sondern auch dem Miss-Cache 42 darunter zurückgegeben, wobei es das zuletzt verwendete Element ersetzt. Jedes mal, wenn der obere Cache 20 geprüft wird, wird der Miss-Cache 42 ebenfalls geprüft. Wenn ein Miss in dem oberen Cache 20 auftritt, aber die Adresse in dem Miss-Cache 42 auftrifft, dann kann der Direktabbildungs-Cache 20 in den nächsten Zyklus aus dem Miss-Cache 42 neu geladen werden. Dies ersetzt eine lange Off-Chip-Miss-Penale durch einen kurzen Einzyklus- On-Chip-Miss. Diese Anordnung erfüllt die Anforderung, daß der kritische Weg nicht verschlechtert wird, da sich der Miss-Cache 42 selber nicht in dem normalen kritischen Weg der Prozessorausführung befindet.
  • Der Erfolg unterschiedlicher Miss-Cache-Organisationen beim Entfernen von Konflikt-Misses ist in Fig. 5 gezeigt. Die erste durchzuführende Beobachtung besteht darin, daß viele weitere Daten-Konflikt-Misses durch den Miss-Cache 42 als Befehls-Konflikt-Misses entfernt werden. Dies kann wie folgt erklärt werden. Befehlskonflikte neigen dazu, weit beabstandet zu sein, da die Befehle innerhalb einer Prozedur nicht miteinander in Konflikt kommen, solange die Prozedurgröße geringer als die Cache-Größe ist, was fast immer der Fall ist. Befehls-Konflikt-Misses sind am wahrscheinlichsten, wenn eine weitere Prozedur aufgerufen wird. Die Target-Prozedur kann sich irgendwo bezüglich der aufrufenden Prozedur abbilden, was möglicherweise zu einer großen Überlappung führt. Unter der Annahme, daß mindestens 60 unterschiedliche Befehle in jeder Prozedur ausgeführt werden, würden die Konflikt-Misses durch mehr als den 15 Lines in dem getesteten Miss-Cache 42 mit maximaler Größe getrennt sein. Mit anderen Worten könnte ein kleiner Miss- Cache 42 nicht die gesamten Überlappung enthalten, und würde so wiederholt neu geladen werden, bevor er verwendet werden könnte. Diese Art von Referenzmuster weist die schlechteste Miss-Cache-Performanz auf.
  • Andererseits können Datenkonflikte ziemlich dicht beabstandet sein. Es sei der Fall betrachtet, in dem zwei Zeichenketten verglichen werden. Wenn es passiert, daß die Vergleichspunkte der beiden Ketten auf die gleiche Line abgebildet sind, werden abwechselnde Bezugnahmen auf unterschiedliche Ketten immer ein Miss in dem Cache bilden. In diesem Fall würde ein Miss-Cache 42 von nur zwei Einträgen (entries) alle Konflikt- Misses entfernen. Dies ist offensichtlich ein weiteres Performanz-Extrem, und die Ergebnisse in Fig. 5 zeigen einen Performanz-Bereich basierend auf dem beteiligten Programm. Nichtsdestoweniger kann ein Miss-Cache 42 von nur zwei Einträgen 44 für 4KB Daten-Caches im Mittel 25% der Daten- Cache-Konflikt-Misses oder 13% der Gesamtdaten-Cache-Misses entfernen (Fig. 6). Wenn der Miss-Cache 42 auf 4 Einträge 44 erhöht wird, können 36% der Konflikt-Misses oder 18% der Gesamtdaten-Cache-Misses entfernt werden. Nach 4 Einträgen 44 ist die Verbesserung von zusätzlichen Miss-Cache-Einträgen gering, die sich nur auf eine 25%-ige Gesamtverringerung in Daten-Cache-Misses erhöht, wenn 15 Einträge 44 vorgesehen werden.
  • Da ein Verdoppeln der Größe des Daten-Cache 20 zu einer 32%- igen Verringerung in Misses führt (über diesen Satz von Benchmarks, wenn die Daten-Cache-Größe von 4K auf 8K erhöht wird), verringert jede zusätzliche Line in dem First-Level- Cache 20 die Anzahl von Misses um etwa 0,13%. Obgleich der Miss-Cache 42 mehr Platz pro Speicherbit als Lines in dem Daten-Cache 20 erfordert, bewirkt jede Line in einem Zwei- Line-Miss-Cache 42 eine 50 mal größere Marginal-Verbesserung in der Miss-Rate, so daß dies mehr als irgendwelche Differenzen in der Layout-Größe abdecken sollte.
  • Bei einem Vergleich von Fig. 5 und Fig. 3 ist ersichtlich, daß, je höher der Prozentsatz von Misses in Folge von Konflikten ist, desto wirksamer ist der Miss-Cache 42 bei ihrer Eliminierung. Beispielsweise weist in Fig. 3 "met" bei weitem das höchste Verhältnis von Konflikt-Misses zu Gesamt- Misses des Daten-Cache 20 auf. Ebenso haben "grr" und "yacc" größere Prozentsätze von Konflikt-Misses als durchschnittliche, und der Miss-Cache 42 hilft diesen Programmen ebenso bedeutend. "linpack" und "ccom" weisen den niedrigsten Prozentsatz von Konflikt-Misses auf, und der Miss-Cache 42 entfernt den geringsten Prozentsatz dieser Misses von allen Programmen. Dies impliziert, daß, wenn ein Programm einen großen Prozentsatz von Daten-Konflikt-Misses aufweist, sie dann bis zu einem gewissen Grad aufgrund ihrer Gesamtdichte gebündelt werden müssen. Dies hindert nicht Programme mit einer geringen Anzahl von Konflikt-Misses, wie beispielsweise "liver", einen Nutzen aus einem Miss-Cache zu ziehen. Es erscheint aber, daß, wenn der Prozentsatz von Konflikt-Misses ansteigt, der Prozentsatz dieser durch einen Miss-Cache entfernbarer Misses ansteigt.
  • Es sei ein System mit einem Direktabbildungs-Cache und einem Miss-Cache betrachtet. Wenn ein Miss auftritt, werden Daten in sowohl den Miss-Cache als auch den Direktabbildungs-Cache geladen. Auf eine Weise verschwendet diese Duplizierung von Daten Speicherplatz in dem Miss-Cache. Die Anzahl duplizierter Elemente in dem Miss-Cache kann von eins (in dem Fall, in dem alle Elemente in dem Miss-Cache auf die gleiche Line in dem Direktabbildungs-Cache abbilden) bis zu allen Einträge reichen (in dem Fall, in dem eine Reihe von Misses auftreten, die nicht den Miss-Cache treffen).
  • Um einen besseren Gebrauch des Miss-Cache 42 zu machen, können wir einen unterschiedlichen Ersatzalgorithmus für einen kleinen Vollassoziativ-Cache 52 verwenden, wie in dem Cache-System 50 von Fig. 7 gezeigt ist. Anstelle eines Ladens der angeforderten Daten in den Miss-Cache 42 bei einem Miss, können wir den Vollassoziativ-Cache 52 mit der Opfer- Line (victim line) von dem Direktabbildungs-Cache 20 laden, wie es mit 54 gezeigt ist. Wir nennen dies "Opfer-Caching". Mit Opfer-Caching erscheinen keine Daten-Lines sowohl in den Direktabbildungs-Cache 20 als auch dem Opfer-Cache 52. Dies folgt aus der Tatsache, daß der Opfer-Cache 52 nur mit aus dem Direktabbildungs-Cache 20 hinausgeworfenen Elementen geladen wird. In dem Fall eines Miss in dem Direktabbildungs- Cache 20, das in dem Opfer-Cache 52 trifft, werden der Inhalt der Direktabbildungs-Cache-Line und der übereinstimmenden Opfer-Cache-Line 52 vertauscht.
  • Abhängig von dem Referenzstrom kann Opfer-Caching entweder eine kleine oder eine bedeutende Verbesserung gegenüber Miss- Caching sein. Die Größe dieses Nutzens hängt von der Menge der Duplizierung in dem Miss-Cache ab. Ein Opfer-Caching ist immer eine Verbesserung gegenüber einem Miss-Caching.
  • Es sei beispielsweise ein Befehlsreferenzstrom betrachtet, der eine kleine Prozedur in seiner inneren Schleife aufruft, die mit seiner Aufrufstelle in Konflikt ist. Diese Programmausführung kann eine Weglänge um die Konfliktschleife aufweisen, die größer als die Anzahl von Stellen in dem Miss- Cache 42 ist. In diesem Fall würde der Miss-Cache 42 von keinem Wert sein, da er fortwährend mit Duplikaten von Elementen in dem Cache gefüllt würde. Wenn anstelle dessen ein Opfer-Cache 52 verwendet wird, wird jedoch die Weglänge, die erfaßt werden kann, grob verdoppelt. Dies liegt daran, daß ein Satz von in Konflikt stehenden Befehlen in dem Direktabbildungs-Cache 20 lebt, während der andere in dem Opfer-Cache 52 lebt. Während sich die Ausführung um die Schleife fortsetzt, tauschen diese Elemente ihre Plätze.
  • Der Prozentsatz der durch Opfer-Caching entfernten Konflikt- Misses ist in Fig. 8 angegeben. Es sei bemerkt, daß auch aus einer einzigen Line 56 bestehende Opfer-Caches 52 nützlich sind, im Gegensatz zu Miss-Caches 42, die zwei Lines 44 aufweisen müssen. Verglichen mit Miss-Caches 42 haben sich alle Benchmarks verbessert, wobei sich jedoch die Performanz des Befehls-Cache 18 und die Performanz des Daten-Cache 20 hinsichtlich Benchmarks, die lange sequentielle Referenzströme aufweisen (z. B. "ccom" und "linpack"), am meisten verbessern.
  • Fig. 9 zeigt die mit Opfer-Caching mögliche Gesamtverringerung in der Miss-Rate. Wie bei einem Vergleich von Fig. 6 und Fig. 9 ersichtlich ist, ist die Performanz des Opfer-Cache 52 in einigen Fällen besser als ein Miss- Cache 42 mit der zweifachen Anzahl von Einträgen. Es sei beispielsweise die "yacc"-Performanz des Daten-Cache 20 mit einem Ein-Eintrag-Opfer-Cache 52 und einem Miss-Cache 42 mit zwei Einträgen betrachtet. Da der Opfer-Cache 52 das Opfer nicht wegwirft, kann bei einigen Situationen ein Opfer- Caching zu weniger Misses als bei einem Miss-Cache mit der zweifachen Anzahl von Einträgen führen. Es sei beispielsweise angenommen, daß viele Cache-Misses beim Zugreifen auf neue Daten auftreten (d. h. obligatorische Misses), die sowohl ein Miss-Cache 42 als auch ein Opfer-Cache 52 wirksam entleeren. Als nächstes sei angenommen, daß auf eine weitere neue Line Bezug genommen wird, was sowohl bei einem System 40 mit einem Miss-Cache 42 als auch bei einem System 50 mit einem Opfer- Cache 52 zu einem Miss führt. Wenn auf den alten Inhalt der Line als nächstes Bezug genommen wird, wird der Miss-Cache 42 nicht die Elemente enthalten, aber ein Opfer-Cache 52 würde diese enthalten. Somit würde das System 40 mit einem Miss- Cache 42 zwei Misses auf dem nächsten Level in der Speicherhierarchie aufweisen, wohingegen das System 50 mit einem Opfer-Cache 52 nur einen aufweisen würde.
  • Fig. 10 zeigt die Performanz von Opfer-Caches mit 1, 2, 4 und 15 Einträgen, wenn Direktabbildungs-Daten-Caches 20 von unterschiedlichen Größen gesichert werden. Im allgemeinen ziehen kleinere Direktabbildungs-Caches 20 den größten Nutzen aus dem Hinzufügen eines Opfer-Cache 52. Als Referenz ist ebenfalls die Gesamtprozentsatz von Konflikt-Misses für jede Cache-Größe gezeigt. Es gibt zwei Faktoren für die Performanz des Opfer-Cache 52 als Funktion der Größe des Direktabbildungs-Cache 20. Wenn sich die Größe des Direktabbildungs-Cache 20 erhöht, wird zuerst die relative Größe des Opfer-Cache 52 kleiner. Da der Direktabbildungs- Cache größer wird, wobei er jedoch die gleiche Line-Größe (16B) beibehält, verringert sich die Wahrscheinlichkeit eines leicht durch Opfer-Caching zu entfernenden, engen Abbildungskonflikts. Zweitens verringert sich der Prozentsatz von Konflikt-Misses geringfügig von 1 KB auf 32 KB. Wie es vorher ersichtlich war, verringert sich der Prozentsatz dieser von dem Opfer-Cache 52 entfernten Misses, wenn sich der Prozentsatz von Konflikt-Misses verringert. Der erste Effekt dominiert jedoch, da sich, wenn sich der Prozentsatz von Konflikt-Misses mit sehr großen Caches erhöht, die Performanz des Opfer-Cache 52 nur leicht verbessert.
  • Fig. 11 zeigt die Performanz von Opfer-Caches 52 für 4 KB Direktabbildungs-Daten-Caches 20 von unterschiedlichen Line- Größen. Wie es zu erwarten ist, erhöht sich die Anzahl von Konflikt-Misses, wenn sich die Line-Größe auf diesem Level erhöht. Der sich erhöhende Prozentsatz von-Konflikt-Misses führt dazu, daß ein erhöhter Prozentsatz dieser Misses durch das Opfer-Cache 52 entfernt wird. Systeme 50 mit Opfer-Caches 52 können von längeren Line-Größen größeren Nutzen ziehen als Systeme ohne Opfer-Caches, da die Opfer-Caches 52 helfen, durch Konflikte verursachte Misses zu entfernen, die aus längeren Cache-Lines entstehen. Es sei bemerkt, daß sogar dann, wenn der für eine Datenspeicherung in dem Opfer-Cache 52 verwendete Bereich konstant gehalten wir (d. h. die Anzahl von Einträgen halbiert wird, wenn sich die Line-Größe verdoppelt), sich die Performanz des Opfer-Cache 52 immer noch verbessert oder wenigstens ohne Verlust abschneidet, wenn sich die Line-Größe erhöht.
  • Wenn sich die Größe eines Cache erhöht, ist ein größerer Prozentsatz seiner Misses auf Konflikt und obligatorische Misses und weniger auf Kapazitäts-Misses zurückzuführen. (Es sei denn, daß der Cache größer als das gesamte Programm ist, wobei in diesem Fall nur obligatorische Misses übrigbleiben). Somit kann erwartet werden, daß Opfer-Caches 52 auch für Second-Level-Caches 26 nützlich sind. Da sich die Anzahl von Konflikt-Misses mit ansteigender Line-Größe erhöht, würde die größere Line-Größe von Second-Level-Caches 26 ebenfalls dazu tendieren, die potenzielle Nützlichkeit von Opfer-Caches 52 zu erhöhen. Wie es bei First-Level-Caches 20 der Fall ist, ist, je größer der Prozentsatz von Konflikt-Misses in einem Second-Level-Cache 26 ist, der Prozentsatz von Konflikt- Misses um so größer, die durch den Opfer-Cache 52 entfernt werden können.
  • Ein interessanter Aspekt von Opfer-Caches ist, daß sie Inklusionseigenschaften (inclusion properties) in Cache- Hierarchien verletzen. Dies beeinflußt nicht nur Algorithmen, die für Multiprozessor-Cache-Konsistenz verwendet werden, sondern auch solche, die für eine Cache-Simulierung verwendet werden. Beispielsweise ist die Anzahl von Misses für ein Second-Level-Cache 26 an einem gegebenen CPU-Referenzstrom von der Größe (aber nicht der Line-Größe) des darauf befindlichen First-Level-Cache 20 unabhängig. Ein Opfer-Cache 52 kann jedoch viele Lines enthalten, die nicht nur am First- Level sondern auch am Second-Level in Konflikt sind. Ein Verwenden eines First-Level-Opfer-Cache 52 kann somit ebenfalls die Anzahl von Konflikt-Misses an dem Second-Level verringern. Beim Untersuchen von Opfer-Caches 52 für Second- Level-Caches 26, müssen beide Konfigurationen, mit und ohne First-Level-Opfer-Caches 52, betrachtet werden.
  • Eine gründliche Untersuchung von Opfer-Caches 52 für Megabyte-Second-Level-Caches 26 erfordert ein Verfolgen von Milliarden von Befehlen. Zu diesem Zeitpunkt haben wir nur eine Opfer-Cache-Performanz für unsere kleinere Testreihe, und die Arbeit zum Erhalten der Performanz eines Opfer-Cache 52 für Multi-Megabyte-Second-Level-Caches 26 ist unterwegs.
  • Eine weitere wichtige Verwendung für Miss-Caches 42, insbesondere On-Chip für den First-Level, ist bei der Ertragsverbesserung. Wenn die Parität bei allen Bytes des Befehls- und Daten-Caches 18 und 20 erhalten bleibt und der Daten-Cache 20 "write-through" ist, dann können Cache- Paritätsfehler als Misses behandelt werden. Wenn der Nachfüllweg den Cache umgeht, dann kann es dieses Schema möglich machen, daß Chips mit Hardware-bedingten Fehlern verwendet werden können. (Tatsächlich könnten bei Byteparität bis zu 1/9 aller Bits in dem Cache fehlerhaft sein, solange es höchstens ein schlechtes Bit pro Byte gibt). Ohne Miss- Caches 42 kann jedoch unglücklicherweise, wenn die innere Schleife des linpack (d. h. saxpy) auf einer Line mit einem Defekt landet, oder wenn eine oft verwendete Strukturvariable sich auf einer fehlerhaften Line befindet, die Performanz des Systems erheblich verschlechtert sein (z. B. um mehr als einen Faktor vier bei einigen Codesegmenten). Außerdem würde sich die Performanzverschlechterung von Chip-zu-Chip abhängig von der Defektposition scheinbar zufällig verändern. Dies würde die potentielle Verbesserung in der Ausbeute bei der Ingenieur-Entwicklungsphase eines Projekts begrenzen. Mit dem Hinzufügen von Miss-Caches 42 beträgt die Penale für einen Defektinduzierten Paritäts-Miss nur einen Zyklus, was eine viel geringere Auswirkung auf die Maschinenperformanz als ein Off-Chip-Miss haben würde. Somit können, solange wie die Anzahl von Defekten klein genug ist, um durch den Miss-Cache 42 gehandhabt zu werden, Chips mit Hardware-bedingten Defekten in Produktionssystemen verwendet werden. Wenn Miss- Caches 42 verwendet werden, um die System-Performanz in der Anwesenheit von Herstellungsdefekten zu verbessern, dann würden Befehls-Miss-Caches und sogar Miss-Caches mit nur einem Eintrag nützlich sein.
  • Wie bereits beschrieben, würden Opfer-Caches 52 für ein Korrigieren von Misses in Folge von Paritätsfehlern nicht nützlich sein. Dies liegt daran, daß das Opfer durch den Paritätsfehler verfälscht wird, und es nicht Wert ist, gespeichert zu werden. Mit der folgenden Änderung können jedoch Opfer-Caches 52 ebenfalls für eine Fehlerkorrektur verwendet werden. Wenn ein Cache-Miss durch einen Paritätsfehler hervorgerufen wird, wird der Opfer-Cache 52 mit den ankommenden (Miss)Daten und nicht mit dem Opfer geladen. Somit agiert er wie ein Opfer-Cache 52 für normale Misses und wie ein Miss-Cache 42 für Paritätsmisses. Mit dieser geringen Modifikation können die Vorteile von Miss- Caches 52 zur Fehlerwiederherstellung und der besseren Performanz eines Opfer-Caching kombiniert werden.
  • Obligatorische Misses sind Misses, die in jeder Cache- Organisation erforderlich sind, da sie die ersten Zugriffe auf ein Datenstück sind. Kapazitäts-Misses treten auf, wenn die Cache-Größe nicht ausreichend ist, um Daten zwischen Zugriffen zu halten. Eine Art und Weise, die Anzahl von Kapazitäts- und obligatorischen Misses zu verringern, besteht darin, Prefetch(Vorauslese)-Techniken, wie beispielsweise längere Cache-Line-Größen oder Vorausleseverfahren, zu verwenden. Die Line-Größen können jedoch nicht beliebig groß gemacht werden, ohne daß die Miss-Rate erhöht wird und die zu transferierenden Datenmenge stark ansteigt. In diesem Abschnitt untersuchen wir Techniken, um Kapazitäts- und obligatorische Misses zu verringern, während herkömmliche Probleme mit langen Lines und übermäßigen Vorauslesen abgemildert werden.
  • Längere Line-Größen leiden unter dem Nachteil eines Vorsehens einer festen Transfergröße für unterschiedliche Programme und Zugriffsmuster. Vorauslese-Techniken sind interessant, da sie mehr auf die tatsächlichen Zugriffsmuster des Programms angepaßt werden können. Dies ist insbesondere für die Verbesserung der Performanz an langen quasi sequentiellen Zugriffsmustern, wie beispielsweise Befehlsströmen oder Unit- Stride-Array-Zugriffen, wichtig.
  • Eine ausführliche Analyse von drei Vorauslese-Algorithmen erschien in Smith, Alan J., "Cache Memories", Computincr Survevs, September 1982, Seiten 473-520. Ein Vorauslesen liest immer nach jedem Zugriff oder Bezug voraus. Dies ist in unserem Ausgangssystem 10 selbstredend nicht praktisch, da viele Level-Eins-Cache-Zugriffe in der Zeit stattfinden können, die erforderlich ist, um eine einzige Level-Zwei- Cache-Referenz zu initiieren. Dies trifft insbesondere bei Maschinen zu, die viele Befehle pro Zyklus von einem Befehls- Cache 18 vorauslesen und gleichzeitig ein Laden oder Speichern pro Zyklus an einem Daten-Cache 20 durchführen können. "prefetch on miss" und "tagged prefetch" sind vielversprechendere Techniken. Bei einem Miss liest "prefetch on miss" die nächste Line ebenfalls aus. Dies kann die Anzahl von Misses für ein rein sequentiellen Referenzstrom halbieren. "tagged prefetch" kann dies sogar übertreffen. Bei dieser Technik weist jeder Block ein ihm zugeordnetes Tag-Bit auf. Wenn ein Block vorausgelesen wird, wird sein Tag-Bit auf Null gesetzt. Jedes Mal, wenn ein Block verwendet wird, wird sein Tag-Bit auf Eins gesetzt. Wenn ein Block einen Nullauf- Eins-Übergang unterzogen wird, wird sein Nachfolgeblock vorausgelesen. Dies kann die Anzahl von Misses in einem rein sequentiellen Referenzstrom auf Null reduzieren, wenn das Vorauslesen schnell genug ist. Unglücklicherweise können die großen Latenzzeiten in dem Ausgangssystem 10 dies unmöglich machen. Es sei Fig. 12 betrachtet, die die Zeitmenge (in erteilten Befehlen) angibt, die während der Ausführung des C- Compiler-Benchmarks erforderlich ist, bis eine Line vorausgelesen ist. Da die Line-Größe vier Befehle ist, überraschend es nicht, daß vorausgelesene Lines innerhalb von vier Befehlszeiten empfangen werden müssen, um mit der Maschine hinsichtlich eines nicht-gecachten Straight-Line- Code mitzuhalten. Da das Ausgangssystem des Second-Level- Cache 26 viele Zyklen benötigt, um auf dasselbe zuzugreifen, und die Maschine tatsächlich viele Befehle pro Zyklus erteilen kann, kann ein "tagged prefetch" nur ein "one-cycleout-of-many"-Vorsprung beim Liefern der erforderlichen Befehle aufweisen.
  • Was wir wirklich tun müssen, ist das Vorauslesen zu starten, bevor ein Tag-Übergang stattfinden kann. Wir können diese mit einem Mechanismus, als Strompuffer 62 bezeichnet, durchführen, wie es in dem System 60 von Fig. 13 gezeigt ist, das einen Teil eines Systems veranschaulicht, das die vorliegende Erfindung beinhaltet. Ein Strompuffer 62 besteht aus einer Reihe von Einträgen 64, die jeweils aus einem Tag 66, einem verfügbaren Bit 68 und einer Daten-Line 70 besteht.
  • Der Cache 20 und der Strompuffer 62 werden gleichzeitig adressiert. Wenn ein Miss in dem Cache 20 auftritt, beginnt der Strompuffer 62 ein Vorauslesen aufeinanderfolgender Lines beginnend beim Miss-Target. Beim Aussenden jeder Vorauslese- Anforderung wird das Tag 66 für die Adresse in dem Strompuffer 61 eingetragen und das verfügbare Bit 68 wird auf "falsch" gesetzt. Wenn die Vorlesedaten 70 zurückkehren, werden sie in den Eintrag 64 mit ihrem Tag 66 plaziert und das verfügbare Bit wird auf "wahr" gesetzt. Es sei bemerkt, daß Lines nach der an dem Miss angeforderten Line in dem Puffer 62 und nicht in dem Cache 20 plaziert werden. Dies verhindert ein Verunreinigen des Cache 20 mit Daten, die möglicherweise niemals benötigt werden.
  • Nachfolgende Zugriffe auf den Cache vergleichen ebenfalls ihre Adresse mit dem ersten in dem Puffer 62 gespeicherten Element. Wenn eine Referenz den Cache 20 verfehlt aber in dem Puffer 62 trifft, kann der Cache 20 in einem einzigen Zyklus von dem Strompuffer 62 erneut geladen werden. Dies ist viel schneller als die Off-Chip-Miss-Penale. Die in diesem Abschnitt betrachteten Strompuffer 62 sind einfache FIFO- Warteschlangen, wobei nur der Kopf der Warteschlange einen Tag-Komparator 72 aufweist, und von dem Puffer 62 entfernte Elemente streng sequentiell ohne ein Überspringen irgendwelcher Lines entfernt werden müssen. Bei diesem einfachen Modell werden nicht-sequentielle Line-Misses bewirken, daß der Strompuffer 62 entleert wird und an der Miss-Adresse neu gestartet wird, sogar wenn die angeforderte Line bereits weiter unten in der Warteschlange vorhanden ist. Kompliziertere Strompuffer, die bereits vorausgelesene Lines aus der Sequenz holen können, werden in den folgenden Abschnitten erläutert.
  • Wenn eine Line 64 aus einem Strompuffer 62 in den Cache 20 bewegt wird, können die Einträge in dem Strompuffer 62 um eins nach oben verschoben werden, und eine neue aufeinanderfolgende Adresse wird vorausgelesen. Die nächste aufeinanderfolgende Adresse wird mit dem Inkrementierer 74 erzeugt. Die Pipelined-Schnittstelle zu dem Second-Level- Cache 26 ermöglicht es dem Puffer 62 mit der maximalen Bandbreite des Second-Level-Cache 26 gefüllt zu werden, und viele Cache-Lines können im Prozeß eines gleichzeitigen Vorauslesens sein. Es sei beispielsweise angenommen, daß die Latenzzeit, um eine 16B Line an einem Miss im Befehls-Cache 18 zu füllen, 12 Zyklen beträgt. Es sei eine Speicherschnittstelle betrachtet, die im Pipeline-System arbeitet und eine neue Line-Anforderung alle 4 Zyklen akzeptieren kann. Ein Vier-Eintrag-Strompuffer 62 kann 4B Befehle mit einer Rate von einem pro Zyklus bereitstellen, indem drei Anforderungen bei allen Zeiten unerledigt sind. Somit werden während einer sequentiellen Befehlsausführung lange Latenz-Cache-Misses nicht auftreten. Dies ist im Gegensatz zu der Performanz des "tagged prefetch" an rein sequentiellen Referenzströmen, bei denen nur eine Linie auf einmal vorausgelesen wird. Hier werden sequentielle Befehle nur mit einer Bandbreite geliefert, die gleich einem Befehl aller drei Zyklen ist (z. B. 12 Zyklus-Latenzzeit/4 Befehle pro Line).
  • Fig. 14 zeigt die Performanz eines Vier-Eintrag-Befehls- Strompuffers 62, der ein 4KB Befehls-Cache 18 sichert und ein Datenstrompuffer 62, der ein 4KB Daten-Cache 20 sichert, jeder mit 16-Byte-Lines. Die graphische Darstellung gibt die kumulative Anzahl von entfernten Misses basierend auf der Anzahl von Lines, die der Puffer vorauszulesen kann, beginnend mit dem ursprünglichen Miss an. Die meisten Befehlsreferenzen brechen das rein sequentielle Zugriffsmuster zum Zeitpunkt, in dem die sechste aufeinanderfolgende Line vorausgelesen wird, während viele Datenreferenzmuster sogar früher enden. Ausnahmen dazu scheinen Befehlsreferenzen für "liver" und Datenreferenzen für "linpack" zu sein. "liver" ist wahrscheinlich eine Anormalität, da die 14 Schleifen des Programms sequentiell ausgeführt werden, und die ersten 14 Schleifen im allgemeinen nicht andere Prozeduren aufrufen oder ein übermäßiges Branching durchführen, das dazu führen könnte, daß das sequentielle Miss-Pattern aufbricht. Das Datenreferenzmuster von "linpack" kann wie folgt verstanden werden. Es sei daran erinnert, daß der Strompuffer 62 für das Liefern von Lines verantwortlich ist, die der Cache 18 oder 20 verfehlt. Die innere Schleife von "linpack" (d. h. saxpy) führt ein inneres Produkt zwischen einer Reihe und den andere Reihen einer Matrix durch. Die erste Verwendung der einen Reihe lädt es in den Cache. Danach bestehen nachfolgende Misses in dem Cache (ausgenommen für Abbildungskonflikte mit der ersten Reihe) aus nachfolgenden Lines der Matrix. Da die Matrix zu groß ist, um auf den On-Chip-Cache zu passen, wird die gesamte Matrix bei jeder Iteration durch den Cache geführt. Der Strompuffer 62 kann dies mit der maximalen, von dem Second- Level-Cache 26 bereitgestellten Bandbreite durchführen. Eine Voraussetzung für dies ist natürlich, daß der Referenzstrom einen einheitlichen Schritt oder einen "unit-stride" hat oder höchstens jedes zweite oder jedes dritte Wort überspringt. Auf ein Array in der Nicht-"unit-stride"-Richtung zugegriffen wird (und die anderen Dimensionen nicht triviale Ausmaße aufweisen), dann wird ein Strompuffer 62 wie hier dargestellt, von geringem Nutzen sein.
  • Fig. 15 gibt die Bandbreitenanforderungen in drei typischen Strompuffer-Anwendungen. I-Strom-Referenzen für "ccom" sind ziemlich regelmäßig (in Befehlen gemessen). Im Mittel muß eine neue 16B Line alle 4,2 Befehle vorausgelesen werden. Die Beabstandung zwischen Zugriffen oder Referenzen auf den Strompuffer 62 erhöht sich, wenn das Programm in kurze Schleifen eintritt, und verringert sich, wenn das Programm kleine Vorwärtssprünge unternimmt, so wie beispielsweise, wenn eine Sonst-Anweisung übersprungen wird.
  • Nichtsdestoweniger ist die Abruf(Fetch)-Frequenz ziemlich regelmäßig. Diese Daten sind für eine Maschine mit kurzen Funktionseinheits-Warte- oder Latenzzeiten, wie beispielsweise für die Digital Equipment Corporation MultiTitan CPU oder die MIPS R2000, so daß die Zyklen pro Befehl (CPI = cyles per instruction) ziemlich nahe an 1 ohne Cache-Misses sind.
  • Datenstrompuffer-Referenz-Timings für "linpack" und "ccom" werden ebenfalls in Fig. 15 gegeben. Die Referenzrate für neue 16D-Lines für "linpack" beträgt durchschnittlich einen alle 27 Befehle. Da diese Version von "linpack" von doppelter Genauigkeit ist, führt dies zu einer neuen Iteration der inneren Schleife aller 13,5 Befehle. Dies ist größer als man hoffen könnte. Diese Version von "linpack" ist ziemlich "lose", da sie eine ganzzahlige Multiplikation zum Adressieren von Rechnungen für jedes Array-Element durchführt, und die Schleife nicht aufgerollt wird. Wenn die Schleife aufgerollt wurde und übermäßige Optimierungen durchgeführt wurden, würde die Rate von Referenzen ansteigen, wobei jedoch die Rate immer noch geringer sein würde, als die des Befehlsstroms in Folge des Speicherverkehrs auf der Datenseite, die nicht auf der Befehlsseite vorhanden ist. "Ccom" weist eine interessante dreistufige Performanz auf. Wenn die nächste aufeinanderfolgende Line als nächstes nach einem Miss verwendet wird, wird sie im Mittel nur fünf Zyklen nach dem Miss angefordert. Für die nächsten beiden Lines nach einem Miss sind aufeinanderfolgende Daten-Lines (16B) im Mittel alle zehn Befehle erforderlich. Die ersten drei Lines liefern den meisten (82%) des Nutzens des Strompuffers 62. Danach werden aufeinanderfolgende Lines mit einer Rate angefordert, die näher an derjenigen von "linpack" ist, im Mittel alle 24 Befehle.
  • Wenn das Sicherungsspeichern Daten bei jedem Zyklus mit einer durchschnittlichen Bandbreite eines neuen Worts (4B) erzeugen kann, dann wird im allgemeinen der Strompuffer 62 mit aufeinanderfolgenden Referenzen Schritt halten können. Dies sollte für Befehlsströme sowie auch für Blockkopien, die stark aufgerollt werden und Laden und Speichen mit doppelter Position verwenden, ausreichend sein. Wenn diese Bandbreite nicht verfügbar ist, der Nutzen von Befehlsstrompuffern verringert, und Blockkopien und weitere ähnliche Vorgänge werden ebenfalls negativ beeinflußt. Bandbreiten, die einem neuen Wort alle 1,5 bis 2 Zyklen entsprechen, werden jedoch immer noch für viele der Datenreferenzen ausreichen. Es sei bemerkt, daß diese Werte für Bandbreiten sind, die viel leichter zu erreichen sind als die Gesamtlatenzzeiten, wie beispielsweise solche, die durch die Prefetch-Schemas in Fig. 12 erforderlich sind.
  • Insgesamt könnten die in dem vorhergehenden Abschnitt vorgestellten Strompuffer 62 72% der Misses des Befehls-Cache 18 aber nur 25% der Misses des Daten-Cache entfernen. Ein Grund dafür besteht darin, daß Daten-Referenzen dazu tendieren, aus verschachtelten Datenströmen unterschiedlicher Quellen zu bestehen. Um zu versuchen, die Performanz von Strompuffern 62 für Datenreferenzen zu verbessern, wurde ein System 80 eines Vielweg-Strompuffers 62 simuliert (Fig. 16). Es besteht aus vier parallelen Strompuffern 62. Wenn ein Miss in dem Daten-Cache 20 auftritt, der nicht in irgendeinem Strompuffer 62 auftritt, wird der zuletzt getroffene Strompuffer 62 gelöscht (d. h. LRU-Austausch), und er startet ein Vorauslesen an der Miss-Adresse.
  • Fig. 17 zeigt die Performanz des Vielweg-Strompuffer-Systems 80 an unserem Benchmark-Satz. Wie erwartet, bleibt die Performanz an dem Befehlsstrom praktisch unverändert. Dies bedeutet, daß das einfache einzelne Strompuffer-System 60 immer für Befehlsströme ausreicht. Das Vielweg-Strompuffer- System 80 verbessert nicht die Performanz auf der Datenseite erheblich, jedoch kann insgesamt das Vielweg-Strompuffer- System 80 43% der Misses für die sechs Programme entfernen, d. h. fast die doppelte Performanz des einzelnen Strompuffer- Systems 60. Obgleich die Matrix-Operationen von "liver" die größte Verbesserung erfahren (sie verändern sich von 7% auf 70% Verringerung) haben alle Programme bis zu einem gewissen Grad einen Nutzen. Es sei ferner bemerkt, daß "liver" "unitstride"-Zugriffe auf ihre Datenstrukturen macht.
  • In dem vorhergehenden Abschnitt wurde nur ein Adressen- Komparator für den Strompuffer 62 vorgesehen. Dies bedeutet, daß sogar dann, wenn die angeforderte Line in dem Strompuffer 62 jedoch nicht in der ersten Stelle mit dem Komparator 72 war, der Strompuffer 62 die Referenz verfehlen wird, und sein Inhalt entleert wird. Eine offensichtliche Verbesserung zu diesem Schema besteht darin, einen Komparator bei jeder Stelle in dem Strompuffer 62 anzubringen. Dann wird, wenn eine Cache-Line in einem quasi sequentiellen Referenzmuster übersprungen wird, der Strompuffer 62 immer noch in der Lage sein, die Cache-Line zu liefern, wenn sie bereits vorausgelesen wurde.
  • Fig. 18 zeigt die Performanz eines Strompuffers mit drei Komparatoren. Der Quasi-Strompuffer ist fähig, 76% der Befehls-Cache-Misses zu entfernen, eine Verbesserung von 4% gegenüber einem rein sequentiellen Strompuffer, das zu einer 14%-igen Verringerung in der Anzahl von verbleibenden Misses führt. Dies ist wahrscheinlich auf die Fähigkeit des Quasi- Strompuffers zurückzuführen, ein nützliches Vorauslesen fortzusetzen, wenn der Code übersprungen wird, beispielsweise wenn "dann"- oder "sonst"-Befehle in "wenn"-Anweisungen übersprungen werden. Die simulierte Version umfaßte drei Komparatoren, so daß sie höchstens 2 Cache-Lines plus bis 3/4 einer Cache-Line an jeder Seite abhängig von der Ausrichtung überspringen konnte, für eine maximale Gesamtzahl von 16 bis 22 Befehlen. Dies vergleicht sich mit nur 0 bis 6 Befehlen, die in einem sequentiellen Strompuffer übersprungen werden können (abhängig von der Zweigausrichtung), ohne zu veranlassen, daß der Strompuffer entleert wird.
  • Die zusätzlichen Komparatoren eines Quasi-Strompuffers verbessern ebenfalls die Performanz eines Vier-Weg- Datenstrompuffers. Insgesamt kann der Vier-Weg-Quasi- Strompuffer 47% aller Misses entfernen, was 4% mehr als der rein sequentielle Vier-Weg-Strompuffer ist.
  • Da die für ein paar zusätzliche Komparatoren an einem einzigen Strompuffer erforderliche Hardwaremenge klein ist, erscheint es, als ob Quasi-Strompuffer eine nützliche Verallgemeinerung der sequentiellen Strompuffer für Befehlsströme seien. Dies liegt daran, daß nur zwei zusätzliche Komparatoren erforderlich sein würden, um einen sequentiellen Strompuffer in einen Quasi-Strompuffer umzuwandeln. Jedoch kann es sich für Vielweg-Daten-Quasi- Strompuffern nicht lohnen, da die Anzahl von zusätzlich erforderlichen Komparatoren viele Male so groß sein würde. Ein interessanter Bereich für Softwareforschung ist die Fähigkeit von Compilern, Code und Daten-Layouts neu zu organisieren sowie die Verwendung von Strompuffern zu maximieren. Wenn Techniken, um die Sequentialität von Referenzen zu optimieren, erfolgreich sind, dann wird der Bedarf für zusätzliche Komparatoren an Strompuffern abnehmen.
  • Um die Performanz von Strompuffern 62 in die richtige Perspektive zu rücken, werden wir in diesem Abschnitt die Performanz von Strompuffern mit einigen vorher in der Literatur untersuchten Prefetch-Techniken vergleichen. Die Performanz eines "prefetch of miss", "tagged prefetch" und "always prefetch" auf unseren sechs Benchmarks wird in Tabelle 3 dargestellt. Diese Daten zeigen die Verringerung in Misses unter der Annahme der Verwendung dieser Prefetch- Techniken mit einer Second-Level-Cache-Latenzzeit von einer Befehlsausgabe. Es sei bemerkt, daß dies ziemlich unrealistisch ist, da eine Ein-Befehlserteilungs-Latenzzeit kleiner als ein Maschinenzyklus sein kann, und Second-Level- Caches typischerweise eine Latenzzeit von vielen CPU-Zyklen aufweisen. Nichtsdestoweniger geben diese Zahlen eine obere Grenze für die Performanz dieser Prefetch-Techniken. Die Performanz dieser Prefetch-Algorithmen in dieser Untersuchung stimmt mit früher in der Literatur vorgestellten Daten überein. In dem oben zitierten Artikel von Smith wurde herausgefunden, daß Verringerungen in der Miss-Rate für eine PDP-11 Verfolgung TRACE an einem 8KB gemischten Cache (es wurden nur gemischte Cache untersucht) mit 16B Lines und 8- Weg-Satz-Assoziativität) 27,8% für "prefetch on miss", 50,2% für "tagged prefetch" und 51,8% für "prefetch always" betrug.
  • Tabelle 4 vergleicht die Prefetch-Performanz von Tabelle 3 mit den früher dargestellten Strompuffer Performanz. Auf der Befehlsseite übertrifft ein einfacher einziger Strompuffer 62 "prefetch on miss" mit großem Abstand. Dies überrascht nicht, da für einen rein sequentiellen Referenzstrom "prefetch on miss" die Anzahl von Misses nur um einen Faktor 2 verringern wird. Sowohl das einfache einzelne Strompuffer-System 60 und das Quasi-Strompuffer-System 80 arbeiten fast genauso gut wie "tagged prefetch". Soweit es den Verkehr betrifft, wird der Strompuffer 62 mehr nach einem Miss als "tagged prefetch" abrufen, wobei er jedoch Abrufen nicht an einem Tag-Übergang starten wird, so daß ein Vergleich von Verkehrsverhältnissen eine interessante zukünftige Forschung sein wird. Die Performanz des Strompuffers 62 an dem Befehlsstrom ist geringfügig kleiner als "prefetch always". Dies überrascht nicht, da die Performanz von "always prefetch" den Prozentsatz von Befehlen approximiert, die keine Zweige nehmen, und eine obere Grenze für die Verringerung von Befehls-Cache-Misses durch sequentielles Vorauslesen ist. Das Verkehrsverhältnis der Verfahren der Strompuffer 62 sollte jedoch viel näher an dem von "prefetch und miss" oder "tagged prefetch" als von "prefetch always" sein. TABELLE 3 TABELLE 4
  • Tabelle 4 vergleicht ferner die Performanz von Strompuffern 62 mit Prefetch-Techniken für Daten-Referenzen. Hier übertreffen alle Arten von Vier-Weg-Strompuffer-System 80 die Prefetch-Strategien. Dies liegt primär daran, daß die Prefetch-Strategien das vorausgelesene Element immer in den Cache bringen, sogar dann, wenn es nicht notwendig ist. Die Verfahren des Strompuffer 62 bewegen nur ein Element in dem Cache 20, wenn es angefordert wird, was zu weniger Verunreinigung führt, als wenn immer die vorausgelesenen Daten in den Cache 20 plaziert werden. Dies ist besonders wichtig für Daten-Referenzen, da die räumliche Positionierung (spatial locality) von Daten-Referenzen geringer als diejenige von Befehlsreferenzen ist, und ist, daß vorausgelesene Daten wahrscheinlicher verunreinigt werden als vorausgelesene Befehle.
  • Unabhängig von der relativen Performanz der Strompuffer 62 und idealer Vorauslese-Techniken, ist die Implementierung von Puffer-Verfahren viel leichter durchzuführen. Dies liegt daran, da sie Nutzen aus Pipeline-Speichersystemen ziehen können (im Gegensatz zu "prefetch and miss" oder "tagged niedrigere Latenzzeitanforderungen an vorausgelesenen Daten als die Vorauslese-Techniken auf, da sie mit einem Abrufen eines Blocks beginnen können, bevor der vorhergehende Block verwendet wird. Schließlich ist, zumindestens für Befehlsstrompuffer 62, die von einem Strompuffer 62 benötigte zusätzliche Hardware oft mit der durch "tagged prefetch" zusätzlich erforderlichen Tag-Speicherung vergleichbar.
  • Es wurde gezeigt, daß kleine Miss-Caches 42 (z. B. 2 bis 8 Einträge) beim Verringern von Daten-Cache-Konflikt-Misses für Direktabbildungs-Cache 20 im Bereich von 1K bis 8K Bytes wirksam sind. Die Entfernen wirksam enge Konflikte, wobei Misses zwischen zwei bis vier Lines alternieren, die sich auf die gleichen Lines in dem Cache abbilden.
  • Opfer-Caches 52 sind eine Verbesserung gegenüber Miss- Caching, die das Opfer des Cache-Miss in einem kleinen Assoziativ-Cache 52 anstelle des Target speichern. Opfer- Caches 52 sind sogar wirksamer beim Entfernen von Konflikt- Misses als Miss-Caches 42. Opfer-Caches 52 werden immer nützlicher, da sich Line-Größen und der Prozentsatz von Konflikt-Misses erhöhen. Es erscheint im allgemeinen, daß, so wie sich der Prozentsatz von Konflikt-Misses erhöht, sich der Prozentsatz dieser durch einen Opfer-Cache 52 entfernbarer Misses ebenfalls erhöht, was zu einer noch steileren Steigung für die mögliche Performanz-Verbesserung unter Verwendung von Opfer-Caches 52 führt.
  • Strompuffer 62 lesen Cache-Lines nach einer verfehlten Cache- Line voraus. Sie speichern die Line, bis sie durch ein Cache- Miss angefordert wird (falls überhaupt), um eine unnötige Verunreinigung des Cache zu verhindern. Sie sind besonders nützlich beim Verringern der Anzahl von Kapazitäts- und obligatorischen Misses. Sie können aus der in Pipeline- Speichersystemen für sequentielle Referenzen verfügbaren Speicherbandbreite, im Gegensatz zu vorher erläuterten Prefetch-Techniken, wie z. B. "tagged prefetch" oder "prefetch on miss", vollen Nutzen ziehen. Die Strompuffer 62 können ebenfalls längere Speichersystem-Latenzzeiten tolerieren, da sie Daten weit vor anderen Prefetch-Techniken vorauslesen (sogar vor "prefetch always"). Die Strompuffer 62 können ferner Befehls-Konflikt-Misses kompensieren, da diese dazu tendieren, von Natur aus ebenfalls relativ sequentiell zu sein.
  • Viel-Weg-Strompuffer-Systeme 80 sind ein Satz von Strompuffern 62, die gleichzeitig mehrere Ströme hinunter vorauslesen können. Bei einer bevorzugten Ausführungsform wird die startende Prefetch-Adresse über alle Strompuffer 62 in der LRU-Reihenfolge ersetzt. Die Vielweg-Strompuffer 62 sind für Daten-Referenzen brauchbar, die verschachtelte Zugriffe auf einige unterschiedliche Datenstrukturen enthalten, wie beispielsweise bei Array-Operationen. Da das Vorauslesen jedoch aus sequentiellen Lines besteht, ziehen nur "unit-stride"(2 oder 3)-Zugriffsmuster nutzen.
  • Die Performanz-Verbesserungen aufgrund von Opfer-Caches 52 und Strompuffer 62 sind relativ orthogonal für Daten- Referenzen. Opfer-Caches 52 arbeiten dort gut, wo Referenzen zwischen zwei Orten alternieren, die sich auf die gleiche Line in dem Cache abbilden. Sie lesen keine Daten voraus, sondern führen nur ein besseres Behalten von zur Verwendung verfügbaren vorausgelesenen Daten vor. Die Strompuffer 62 erreichen jedoch Performanz-Verbesserungen durch Vorauslesen von Daten. Sie Entfernen keine Konflikt-Misses, es sei denn, daß die Konflikte zeitlich weit beabstandet sind, und der Cache-Miss-Referenzstrom besteht aus vielen sequentiellen Zugriffen. Dies sind genau die Konflikt-Misses, die von einem Opfer-Cache 52 aufgrund seiner relativen kleinen Kapazität nicht gut gehandhabt werden. Über den Satz von sechs Benchmarks treffen nur durchschnittlich 2,5% von 4KB Direktabbildungs-Daten-cache-Misses, die in einem Vier- Eintrags-Opfer-cache treffen, ebenfalls in einem Vier-Weg- Strompuffer für ccom, met, yacc, grr und livermore. Im Gegensatz dazu sind bei livermore in Folge seines sequentiellen Datenzugriffsmusters 50% der Treffer in dem Opfer-Cache ebenfalls Treffer in dem Vier-Weg-Strompuffer. Es treffen jedoch 4% der linpack-Cache-Misses in dem Opfer- Cache. Er zieht am wenigsten Nutzen aus den Opfer-Caches unter den sechs Benchmarks, so daß dies immer noch keine bedeutende Menge von Überlappung zwischen Strompuffern und Opfer-Caching ist.
  • Fig. 20 zeigt die Performanz des Ausgangssystems 10 mit der Hinzufügung eines Vier-Eintrags-Daten-Opfer-Caches 52, einem Befehlsstrompuffer 62 und einem Untersystem eines Vierweg- Daten-Strompuffers 62, wie im System 100 von Fig. 19A und 19B gezeigt ist. (Das Ausgangssystem weist nur 4KB-On-Chip- Befehls- und 4KB Daten-Caches mit 24 Zyklus-Miss-Penalen und 16 Byte-Lines zu einem Dreistufen-Second-Level-1MB-Cache mit 128 Byte Lines und einer 320 Zyklus Miss-Penale auf). Die untere durchgezogene Linie in Fig. 20 gibt die Performanz des ursprünglichen Ausgangssystems ohne die Opfer-Caches oder Puffer an, wenn die obere durchgezogene Linie die Performanz mit Puffern und Opfer-Caches angibt. Die Kombination dieser Techniken verringert die First-Level-Miss-Rate auf weniger als die Hälfte derjenigen des Ausgangssystems 10 ohne diese Merkmale, was im Mittel zu einer 143%-igen Verbesserung bei der Systemperformanz über die sechs Benchmarks führt. Diese Ergebnisse zeigen, daß das Hinzufügen einer geringen Menge von Hardware Cache-Miss-Raten dramatisch verringern und Systemperformanz verbessern kann.

Claims (21)

1. Speichersystem (10), das einen ersten Cache-Speicher (18, 20), einen zweiten Speicher (26), Mittel einschließlich eines zwischen dem ersten Cache-Speicher und dem zweiten Speicher geschalteten Puffers (62),
und Mittel (16), die mit dem ersten Cache-Speicher, dem zweiten Speicher und dem Puffer zum Adressieren von Information und zum Steuern der Informationszufuhr von dem zweiten Speicher an den ersten Cache-Speicher, wenn ein Fehltreffer (miss) in dem ersten Cache-Speicher für adressierte Information an einer spezifizierten Adresse auftritt, verbunden sind, umfaßt, dadurch gekennzeichnet, daß
der Puffer ein Strompuffer (62) ist, der Prefetch-Mittel bzw. Vorauslese-Mittel zum Auslesen aus dem zweiten Speicher sowohl der verfehlten Information zur Lieferung an den ersten Cache-Speicher als auch mindestens eines weiteren Informationseintrags in mindestens einer auf die spezifizierte Adresse folgenden Adresse, und zum Speichern des oder jedes weiteren Informationseintrags in dem Strompuffer, aufweist;
wobei der Strompuffer Mittel zum Speichern von Adressenetiketten (address tags) (66), die jeweils einem in dem Strompuffer gespeicherten individuellen Informationseintrag entsprechen, zum Vergleichen (72) der spezifizierten Adresse mit den Adressenetiketten der individuellen Informationseinträge, wenn in dem ersten Cache- Speicher (18, 20) ein Fehltreffer (miss) auftritt, und, wenn die spezifizierte Adresse mit dem Adressenetikett (66) übereinstimmt, zum Liefern des in dem Strompuffer (62) gespeicherten entsprechenden Informationseintrags an den ersten Cache-Speicher (18, 20), aufweist.
2. Speichersystem gemäß Anspruch 1, bei dem der erste Cache-Speicher einen Befehls-Cache (18) aufweist.
3. Speichersystem gemäß Anspruch 2, bei dem der erste Cache-Speicher zusätzlich einen Daten-Cache (20) aufweist.
4. Speichersystem gemäß Anspruch 1, wobei die verfehlte Information sowohl an den ersten Cache-Speicher (18, 20) als auch an den Strompuffer (62) geliefert wird.
5. Speichersystem gemäß einem der Ansprüche 1 bis 3, bei dem das Mittel zum Adressieren von Information und zum Liefern von Information Mittel zum Liefern von Informationsadressen gleichzeitig an den ersten Cache- Speicher und den Strompuffer aufweist.
6. Speichersystem gemäß Anspruch 5, wobei als Reaktion auf einen Informationsadressen-Fehltreffer (miss) in dem ersten Cache-Speicher (18, 20) und einem Informationsadressen- Treffer (hit) in dem Strompuffer (62), die verfehlte Information von dem Strompuffer geliefert wird, und bei dem Information von dem zweiten Speicher (26) sowohl an den ersten Cache-Speicher als auch an den Strompuffer in Reaktion auf einen Informationsadressen-Fehltreffer (miss) in sowohl dem ersten Cache-Speicher als auch dem Strompuffer geliefert wird.
7. Speichersystem gemäß einem der Ansprüche 1 bis 6, bei dem, nachdem ein Informationseintrag an den ersten Cache- Speicher von dem Strompuffer geliefert wurde, weitere Informationseinträge in dem Strompuffer innerhalb des Strompuffers verschoben werden.
8. Speichersystem gemäß Anspruch 7, bei dem nach dem Verschieben von Informationseinträgen ein weiterer Informationseintrag an der nächsten folgenden Adresse vorausgelesen wird.
9. Speichersystem gemäß einem der Ansprüche 1 bis 8, bei dem das System eine zusätzliche Mehrzahl von Strompuffern aufweist, die parallel zwischen dem ersten Cache-Speicher und dem zweiten Speicher geschaltet sind, und das Mittel zum Adressieren von Information und zum Liefern von Information Mittel zum Liefern verfehlter Dateneinträge an den ersten Cache-Speicher und zum Liefern unterschiedlicher weiterer Dateneinträge in mindestens einer Adresse, die einer Adresse für die verfehlten Daten folgt, zu jeweiligen der zusätzlichen Mehrzahl von Strompuffern, aufweist.
10. Speichersystem gemäß Anspruch 9, bei dem als Reaktion auf eine in einem Fehltreffer (miss) resultierende spezifizierte Adresse, der sowohl in dem ersten Cache- Speicher als auch in der Mehrzahl von Strompuffern auftritt, der zuletzt getroffene Strompuffer gelöscht wird und ein Vorauslesen von Daten aus dem zweiten Speicher an der verfehlten Adresse initiiert.
11. Speichersystem gemäß einem der Ansprüche 1 bis 10, bei dem das Mittel zum Adressieren von Information und zum Liefern von Information Mittel zum Liefern verfehlter Information von einem der Strompuffer und dem zweiten Speicher aufweist.
12. Speichersystem gemäß einem der Ansprüche 1 bis 10, bei dem der erste Cache-Speicher ein Direct-Mapped-Cache-Speicher ist.
13. Speichersystem gemäß Anspruch 1, bei dem der erste Cache-Speicher (18, 20) einen Befehls-Cache-Speicher (18) und einen Daten-Cache-Speicher (20) umfaßt, wobei der zweite Speicher ein Befehls- und Datenspeicher ist;
wobei die verfehlte Information und der mindestens eine weitere Informationseintrag ein verfehlter Befehl bzw. mindestens ein weiterer Befehlseintrag sind;
das Speichersystem (10) ferner eine Mehrzahl von weiteren Strompuffern, die parallel zwischen dem Daten-Cache- Speicher (20) und dem zweiten Speicher (26) geschaltet sind, zum Liefern von Daten von dem zweiten Speicher an den Daten- Cache-Speicher, wenn ein Fehltreffer (miss) in dem Daten- Cache-Speicher für adressierte Daten an einer spezifizierten Adresse auftritt, wobei jeder der weiteren Strompuffer Vorauslese-Mittel zum Auslesen aus dem zweiten Speicher, zusätzlich zu Daten zum Liefern an den Daten-Cache-Speicher, von mindestens einem zusätzlichen unterschiedlichen Dateneintrag an einer Adresse oder Adressen, die der spezifizierten Adresse folgen, und zum Speichern der oder jeder der zusätzlichen Dateneinträge in den weiteren Strompuffern, aufweist.
14. Speichersystem gemäß Anspruch 13, bei dem als Reaktion auf eine spezifizierte Adresse, die in einem sowohl in dem Daten-Cache-Speicher als auch den weiteren Strompuffern auftretenden Fehltreffer resultiert, der weitere, zuletzt getroffene Strompuffer gelöscht und ein Vorauslesen von Daten aus dem zweiten Speicher an der Fehltreffer-Adresse initiiert wird.
15. Speichersystem gemäß Anspruch 13 oder Anspruch 14, bei dem der zweite Speicher durch einen Second-Level-Cache- Speicher (26) bereitgestellt wird.
16. Speicherzugriffsverfahren, das ein Bestimmen, wenn ein Fehltreffer (miss) in einem ersten Cache-Speicher (18, 20) in Reaktion auf ein Adressieren des ersten Cache-Speichers an einer spezifizierten Adresse auftritt, und ein Liefern der verfehlten Information aus einem zweiten Speicher (26) an den ersten Cache-Speicher, wenn ein Fehltreffer in dem ersten Cache-Speicher auftritt, umfaßt; gekennzeichnet durch:
Auslesen aus dem zweiten Speicher, zusätzlich zu der verfehlten Information zum Liefern an den ersten Cache- Speicher, von weiterer Information an mindestens einer Adresse, die der spezifizierten Adresse folgt, und zum Speichern der weiteren Information als einen Eintrag oder als mehrere Einträge in einen Strompuffer (62), der zwischen den ersten Cache-Speicher und den zweiten Speicher geschaltet ist, einschließlich eines Speicherns von Adressenetiketten (address tags) (66), die jedem der Einträge in dem Strompuffer entsprechen;
Vergleichen der spezifizierten Adresse mit den Adressenetiketten der Einträge, wenn ein Fehltreffer in dem ersten Cache-Speicher auftritt, und, wenn die spezifizierte Adresse mit dem Adressenetikett übereinstimmt, Liefern des in dem Strompuffer gespeicherten entsprechenden Eintrags an den ersten Cache-Speicher.
17. Speicherzugriffsverfahren gemäß Anspruch 16, bei dem Informationsadressen sowohl an den ersten Cache-Speicher als auch den Strompuffer geliefert werden.
18. Speicherzugriffsverfahren gemäß Anspruch 16 oder Anspruch 17, bei dem das Verfahren die Schritte eines Lieferns von in dem ersten Cache-Speicher verfehlter Information an den ersten Cache-Speicher und eines Lieferns der verfehlten Information und der weiteren Information an den Strompuffer aufweist.
19. Speicherzugriffsverfahren gemäß einem der Ansprüche 16 bis 18, bei dem der erste Cache-Speicher ein Befehls-Cache- Speicher (18) ist und die verfehlte Information und die weitere Information Befehle umfaßt.
20. Speicherzugriffsverfahren gemäß Anspruch 18, das zusätzlich oder alternativ die Schritte eines Bestimmens, wenn ein Fehltreffer in einem ersten Daten-Cache-Speicher (20) in Reaktion auf ein Adressieren des ersten Daten-Cache- Speichers an einer spezifizierten Datenadresse auftritt, und eines Lieferns von verfehlten Daten aus einem zweiten Speicher (26) an den ersten Daten-Cache-Speicher, wenn ein Fehltreffer in dem ersten Daten-Cache-Speicher auftritt;
eines Auslesens aus dem zweiten Speicher, zusätzlich zu den verfehlten Daten zum Liefern an den ersten Daten-Cache- Speicher, von weiteren Daten in mindestens einer der spezifizierten Datenadresse folgenden Adresse, und eines Speicherns der weiteren Daten als einen Eintrag oder als mehrere Einträge in einer Mehrzahl von Strompuffern (62), die parallel zwischen den ersten Daten-Cache-Speicher und den zweiten Speicher (26) geschaltet sind, einschließlich eines Speicherns von Adressenetiketten (66), die jedem der Einträge entsprechen, in der Mehrzahl von Strompuffern; eines Vergleichens der spezifizierten Datenadresse mit den Adressenetiketten der Einträge, wenn ein Fehltreffer in dem ersten Daten-Cache-Speicher auftritt, und, wenn die spezifizierte Datenadresse mit dem Adressenetikett übereinstimmt, eines Lieferns des in der Mehrzahl der Strompuffer gespeicherten entsprechenden Eintrags an den ersten Daten-Cache-Speicher, umfaßt.
21. Speicherzugriffsverfahren gemäß Anspruch 16 oder Anspruch 17, das zusätzlich ein Adressieren des Strompuffers (62), wenn ein Fehltreffer in dem ersten Cache-Speicher (18, 20) auftritt, und ein Liefern von Information aus dem Strompuffer (62) in Reaktion auf das Adressieren bei Abwesenheit eines Fehltreffers in dem Strompuffer umfaßt, und bei dem Information aus dem zweiten Speicher (26) an den ersten Cache-Speicher und den Strompuffer geliefert wird, wenn ein Fehltreffer in dem ersten Cache-Speicher und in dem Strompuffer auftritt.
DE69132201T 1990-03-27 1991-03-25 Speicher-Anordnung und Verfahren mit Vorausholungspuffer Expired - Lifetime DE69132201T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US50006290A 1990-03-27 1990-03-27
US07/499,958 US5261066A (en) 1990-03-27 1990-03-27 Data processing system and method with small fully-associative cache and prefetch buffers

Publications (2)

Publication Number Publication Date
DE69132201D1 DE69132201D1 (de) 2000-06-21
DE69132201T2 true DE69132201T2 (de) 2000-12-28

Family

ID=27053366

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69132201T Expired - Lifetime DE69132201T2 (de) 1990-03-27 1991-03-25 Speicher-Anordnung und Verfahren mit Vorausholungspuffer

Country Status (4)

Country Link
EP (1) EP0449540B1 (de)
JP (1) JPH04270431A (de)
KR (1) KR930011345B1 (de)
DE (1) DE69132201T2 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102004007614A1 (de) * 2004-02-17 2005-09-01 Giesecke & Devrient Gmbh Datenträger mit Ablaufdiagnosespeicher

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07506921A (ja) * 1992-03-06 1995-07-27 ランバス・インコーポレーテッド コンピュータ・システムにおける主記憶装置のアクセス時間とキャッシュ・メモリのサイズを最小限にするためのキャッシュへの先取り
JPH06110781A (ja) * 1992-09-30 1994-04-22 Nec Corp キャッシュメモリ装置
JPH06222990A (ja) * 1992-10-16 1994-08-12 Fujitsu Ltd データ処理装置
US5848432A (en) 1993-08-05 1998-12-08 Hitachi, Ltd. Data processor with variable types of cache memories
TW228580B (en) * 1993-10-01 1994-08-21 Ibm Information processing system and method of operation
US5603004A (en) * 1994-02-14 1997-02-11 Hewlett-Packard Company Method for decreasing time penalty resulting from a cache miss in a multi-level cache system
KR0146059B1 (ko) 1995-04-11 1998-09-15 문정환 미참조 선인출 캐쉬를 이용한 명령어 선인출 방법 및 그 회로
JP3068469B2 (ja) 1996-08-28 2000-07-24 新潟日本電気株式会社 2次レベルキャッシュメモリシステム
US6085292A (en) * 1997-06-05 2000-07-04 Digital Equipment Corporation Apparatus and method for providing non-blocking pipelined cache
GB2348024B (en) * 1999-03-16 2003-06-25 Ibm Cache memory systems
WO2001004760A1 (fr) * 1999-07-07 2001-01-18 Hitachi, Ltd. Controleur de memoire
US6901500B1 (en) * 2000-07-28 2005-05-31 Silicon Graphics, Inc. Method and apparatus for prefetching information and storing the information in a stream buffer
JP2009230374A (ja) * 2008-03-21 2009-10-08 Fujitsu Ltd 情報処理装置,プログラム,及び命令列生成方法
JP5348146B2 (ja) 2009-01-28 2013-11-20 日本電気株式会社 キャッシュメモリおよびその制御方法
GB2493192A (en) * 2011-07-28 2013-01-30 St Microelectronics Res & Dev An exclusive cache arrangement
JP5724981B2 (ja) * 2012-09-26 2015-05-27 日本電気株式会社 メモリアクセス制御装置、メモリアクセス制御システム、及び、メモリアクセス制御方法
US9037835B1 (en) * 2013-10-24 2015-05-19 Arm Limited Data processing method and apparatus for prefetching

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS53134335A (en) * 1977-04-28 1978-11-22 Fujitsu Ltd Memory control system
JPS629436A (ja) * 1985-07-05 1987-01-17 Nec Corp マイクロプログラム制御装置
JPS6267649A (ja) * 1985-09-19 1987-03-27 Nec Corp キヤツシユメモリ制御装置におけるストア処理方式
US4853846A (en) * 1986-07-29 1989-08-01 Intel Corporation Bus expander with logic for virtualizing single cache control into dual channels with separate directories and prefetch for different processors
GB2200483B (en) * 1987-01-22 1991-10-16 Nat Semiconductor Corp Memory referencing in a high performance microprocessor
EP0375864A3 (de) * 1988-12-29 1991-03-20 International Business Machines Corporation Cache-Speicherumgehung

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102004007614A1 (de) * 2004-02-17 2005-09-01 Giesecke & Devrient Gmbh Datenträger mit Ablaufdiagnosespeicher

Also Published As

Publication number Publication date
KR930011345B1 (ko) 1993-11-30
EP0449540A2 (de) 1991-10-02
KR910017286A (ko) 1991-11-05
DE69132201D1 (de) 2000-06-21
EP0449540A3 (en) 1992-09-09
JPH04270431A (ja) 1992-09-25
EP0449540B1 (de) 2000-05-17

Similar Documents

Publication Publication Date Title
DE69132201T2 (de) Speicher-Anordnung und Verfahren mit Vorausholungspuffer
DE69518676T2 (de) Cache-Speicheranordnung für einen Speicher
DE69331039T2 (de) Rechnersystem mit einem Vorausholungscachespeicher
DE69514165T2 (de) Mehrstufige Cache-Speicheranordnung
DE69616465T2 (de) Cachespeicher mit Datenvorausladung
DE69130086T2 (de) Mehrstufeneinschluss in mehrstufigen Cache-Speicherhierarchien
DE69031978T2 (de) Einrichtung und Verfahren zum Vermindern von Störungen in zweistufigen Cache-Speichern
DE69434728T2 (de) Synchronisationssystem und verfahren in einem datencachesystem mit aufgeteiltem pegel
DE68924306T2 (de) Mehrprozessorrechneranordnungen mit gemeinsamem Speicher und privaten Cache-Speichern.
DE68924206T2 (de) Verfahren und Einrichtung zum Filtern von Ungültigkeitserklärungsanforderungen.
DE69132186T2 (de) Cache-Speicherverwaltungsanordnung
DE69637294T2 (de) Mikro-tlb mit parallelem zugriff zum beschleunigen der adressübersetzung
DE69327387T2 (de) An einen paketvermittelten Bus gekoppelte Nachschreibsteuerungsschaltung für eine Cachespeichersteuerungsschaltung
DE69629140T2 (de) Cachefähigkeitsattribut für virtuelle Adressen in Cachespeichern mit sowohl virtuellen als auch physikalischem Index
DE3856552T2 (de) Multiprozessor-Digitaldatenverarbeitungssystem und Verfahren zum Betreiben dieses Systems
DE69432133T2 (de) Datenprozessor mit Cache-Speicher
DE3586635T2 (de) Vorausholungsanordnung fuer einen schnellpufferspeicher.
DE10085373B4 (de) Verfahren zum Flushen von Cache-Zeilen
DE3687307T2 (de) Computeranordnungen mit cache-speichern.
DE69708188T2 (de) Speichersteuerungseinheit
DE69224084T2 (de) Rechneranordnung mit Mehrfachpufferdatencachespeicher und Verfahren dafür
DE69025302T2 (de) Hochleistungsrasterpuffer- und -cachespeicheranordnung
DE69229667T2 (de) Simulierte cachespeicher-assoziativität
DE4218003A1 (de) Sekundaeres cache-speichersystem
DE69937611T2 (de) Intelligenter Puffer-Speicher

Legal Events

Date Code Title Description
8327 Change in the person/name/address of the patent owner

Owner name: COMPAQ COMPUTER CORP., HOUSTON, TEX., US

8364 No opposition during term of opposition