Hintergrund der Erfindung
Die Erfindung bezieht sich im allgemeinen auf den Vorabruf von
Daten für den Zugriff durch einen Prozessor. Im spezielleren
bezieht sich die Erfindung auf die Vorhersage der nächsten Da
tenentnahme, so daß die vorhergesagten Daten für den schnellen
Puffer der niedrigsten Ebene vorabgerufen werden können, bevor
die vorhergesagten Daten von dem Prozessor angefordert werden.
Beschreibung der diesbezüglichen Technik
Die Befehlsausführungsgeschwindigkeiten im Prozessor sind viel
schneller als die Zeit, die für den Zugriff auf Befehle im
Hauptspeicher eines Computers erforderlich ist. Die langsamere
Hauptspeicherzugriffszeit kann Ausführungsengpässe erzeugen,
wenn ein Prozessor gezwungen ist, auf von dem Hauptspeicher
zum Prozessor zu übertragende, abgerufene Befehle zu warten.
Um die Lücke zwischen Prozessorgeschwindigkeit und Hauptspei
cherzugriffszeit zu minimieren, wird ein Pufferspeicher mit
höherer Geschwindigkeit benutzt, um zeitweilig Befehle zu puf
fern, derart, daß gepufferte Befehle dem Prozessor mit minima
ler Verzögerungszeit bereitgestellt werden. Fig. 1 ist eine
Abbildung einer typischen Prozessor- und Speicheranordnung,
welche Pufferspeicher mehrerer Ebenen benutzt, um einen Pro
zessor zu versorgen. In Fig. 1 ist der Prozessor 10 mit einem
Puffer 14 der Ebene Null (L0), einem Puffer 16 der Ebene Eins
(L1) und einem Hauptspeicher 18 durch einen Bus 22 verbunden.
Andere Ausgestaltungen sind möglich und können z. B. den L0-
Puffer auf dem gleichen Chip plaziert haben wie der Prozessor
und können mit dem Prozessor verbunden sein durch eine Schal
tungsanordnung auf dem Chip oder es können die Pufferebenen
direkt mit dem Prozessor verbunden sein. Der Prozessor kann
ein beliebiger Prozessor sein, der häufig als ein Mikroprozes
sor oder eine Zentralprozessoreinheit bezeichnet wird und der
einen Computercode wie beispielsweise einem Assemblierungs
sprachcode verarbeitet. Der Pufferspeicher ist häufig ein
Hochgeschwindigkeitsspeicher wie beispielsweise ein statischer
Direktzugriffsspeicher (SRAM) und der Hauptspeicher kann z. B.
ein dynamischer Direktszugriffsspeicher (DPAM) und/oder ein
Flash-Speicher sein. Der Pufferspeicher ist typischerweise in
der Herstellung teurer als der Hauptspeicher und deshalb ist
der Pufferspeicher üblicherweise dahingehend ausgelegt, um nur
einen kleinen Anteil der Speicherkapazität des Hauptspeichers
zu speichern.
Bei typischen Comutersystemen werden die Befehle in Assemblie
rungssprache an den Prozessor von dem Speicher geliefert und
dann durch den Prozessor ausgeführt. Bezugnehmend auf Fig. 2
umfaßt ein Befehl 26 in Assemblierungssprache typischerweise
einen Opcode-Anteil 28 und einen Operandenanteil 30. Der Op
code (für Operationscode) informiert den Prozessor darüber,
welche Operation ausgeführt wird. Opcode-Befehle umfassen z. B.
Ladebefehle, Addierbefehle und Subtrahierbefehle. Bezugneh
mend auf Fig. 3 umfaßt ein typischer Befehl 32 einen Opcode
38, auf den Bezug genommen wird durch einen Programmzähler
(PC) 36. Der Programmzähler ist ein Befehlsortindikator, der
die Adresse des gewünschten Befehls innerhalb des Speichers
identifiziert, und der Befehl leitet die Ausführung der Funk
tionen wie etwa Datenladen, Datenaddieren oder Datensubtrahie
ren. Der Operand umfaßt den symbolischen Namen für die Spei
cheradresse der Daten, die durch den Befehl abgearbeitet wer
den sollen, oder in einigen Fällen die Speicheradressen eines
anderen Befehls. Bezugnehmend auf Fig. 3 kann der Operand In
formationen über die Quelladresse 40 oder -Adressen und die
Bestimmungsadresse 42 oder -Adressen umfassen, wo die Quella
dresse der Ort der Daten ist, die durch den Befehl bearbeitet
werden sollen, und wo die Bestimmungsadresse der Zielort für
Daten ist, welche das Ergebnis der laufenden Operationen sind.
Die Quell- und Bestimmungsadressen können Adressierungsmodi
umfassen, bei denen die Adressierungsmodi Algorithmen sind,
welche die zutreffende Quell- oder Bestimmungsadresse für in
dem Speicher gespeicherte Daten festlegt. Datenadressierungs
modi können unterschieden werden in Direktzugriffsadressie
rungsmodi oder deterministischen Adressierungsmodi. Direktzu
griffsadressierungsmodi umfassen absolutes Adressieren, Regi
ster-Indirektadressieren und Basis-Plus-Offset-Adressieren.
Deterministische Adressierungsmodi umfassen sequentielle
Adressierungsmodi wie etwa Register-Indirektadressieren mit
Vorher-/Nachher-Inkrementieren, zirkulares Adressieren
und/oder Bit-Umkehr-Adressieren.
Da -bezugnehmend wieder auf Fig. 1- der Pufferspeicher nicht
das gesamte Informationsvolumen speichern kann, das in dem
Hauptspeicher 18 gespeichert ist, kann nicht die gesamte vom
Prozessor 10 benötigte Information in dem L0-Puffer 14 zur
selben Zeit gespeichert werden, und es werden sich Pufferverlu
ste ergeben, wenn der Prozessor Daten anfordert, die nicht in
dem L0-Puffer gespeichert sind. Um das Trefferverhältnis des
L0-Puffers zu erhöhen, können Befehle und/oder Daten von dem
Hauptspeicher zum L0-Puffer 14 oder zum L1-Puffer 16 vorabge
rufen werden als Vorwegnahme eines Datenabrufs durch den Pro
zessor. Der Vorabruf von Befehlen an den Puffer wird erleich
tert durch eine sequentielle Art der Befehlsausführung im Com
puterprogramm. Das heißt, daß Computerprogramme häufig Routi
nen durchlaufen, die Programmbefehle in einer sequentiellen
Reihenfolge benötigen. Als Ergebnis kann ein Strang von Befeh
len vorabgerufen werden von dem Hauptspeicher an den Puffer
mit einem bestimmten Grad an Sicherheit, daß die Befehle bald
von dem Prozessor gebraucht werden. Zwei Zielpuffer können
verwendet werden zum Vorabrufen von Befehlen, die sequentielle
Charakteristika nicht aufweisen.
Im Gegensatz zu Vorabrufsbefehlen kann auf Daten häufig auf
eine mehr zufällige Weise zugegriffen werden derart, so daß
ein Vorabruf schwieriger auszuführen ist. Eine übliche für den
Abruf von Daten verwendete Technik ist jene, daß beim Auftre
ten eines Pufferverlustes die laufende Pufferlinie von dem
Hauptspeicher mit den gewünschten Abrufdaten aufgefüllt wird
und eine nächste Pufferlinie mit einem Datenblock aus dem
Hauptspeicher aufgefüllt wird, der räumlich den verloren ge
gangenen Daten nahekommt. Obwohl der Blockpufferungsansatz bei
einigen Anwendungen zufriedenstellend arbeiten mag, hat er
Nachteile. Genauer gesagt, der Block mit zusätzlichen Daten
wird von dem Hauptspeicher vorabgerufen ohne irgendein Wissen
über das Datenzugriffsmuster des laufenden Programms und als
folge davon kann, wenn das Datenelement, auf das gegenwärtig
zugegriffen wird, nicht Teil einer sequentiellen Datenstruktur
ist, der Daten-Vorabruf den Puffer mit nicht gebrauchten Daten
füllen anstelle von Daten, die bald von dem Prozessor ge
braucht werden könnten.
Zusätzlich zum Block-Daten-Vorabruf bedienen sich andere Tech
niken zum Daten-Vorabruf der Erkennung von Zugriffsmustern,
die aus vorherigen Datenzugriffen entwickelt werden und dann
die erkannten Muster extrapolieren, um neue Vorabrufadressen
zu erzeugen. Z.B. ist eine Mustererkennungstechnik beschrie
ben in dem US-Patent mit der Nummer 5,694,568 und dem Titel
"Auf komplexe Speicherzugriffsschemata anwendbares Vorabrufsy
stem", das Harrison III et al. erteilt wurde. Obwohl diese
Technik zufriedenstellend arbeiten mag für seinen beabsichtig
ten Zweck, beruht die Technik auf der Erkennung von Zugriffs
mustern, die auf vergangenen Datenzugriffen basieren, bei de
nen die vergangenen Muster in unzutreffender Weise zukünftige
Datenzugriffsmuster vorhersagen.
Im Hinblick auf die Unzulänglichkeiten des bekannten Standes
der Technik ist das, was gebraucht wird, ein Verfahren und ei
ne Vorrichtung zum Daten-Vorabruf, das/die eine hohe Puffer
trefferrate aufweist.
Zusammenfassung der Erfindung
Ein Verfahren und eine Vorrichtung zum Daten-Vorabruf an einen
Niedrige-Ebene-Speicher eines Computersystems bedient sich ei
nes Befehlsortindikators, der sich auf einen bevorstehenden
Befehl bezieht, um einen nächsten Daten-Vorabruf-Indikator zu
identifizieren und dann den nächsten Daten-Vorabruf-Indikator
zu nutzen, um die korrespondierenden Vorabrufdaten innerhalb
des Hauptspeichers des Computersystems zu lokalisieren. Die
Vorabrufdaten werden lokalisiert derart, daß die Vorabrufdaten
zu dem Niedrige-Ebene-Speicher transferiert werden können, wo
die Daten durch einen Prozessor schnell abgearbeitet werden
können bevor der bevorstehende Befehl ausgeführt wird. Der
nächste Daten-Vorabruf-Indikator wird erzeugt durch Ausführen
der Adressiermodusfunktion, welche in einen Befehl nur dann
eingebettet ist, wenn der Adressierungsmodus des Befehls ein
deterministischer Adressierungsmodus wie etwa ein sequentiel
ler Adressierungsmodus ist. Der Nächste-Daten-Vorabruf-
Indikator wird durch Zuordnen korrespondierender Nächste-
Daten-Vorabruf-Indikatoren zu Befehlsortindikatoren in einer
durchsuchbaren Tabelle identifiziert.
Bei der bevorzugten Ausführungsform wird eine Daten-Vorabruf-
Vorhersagetabelle erzeugt, welche den Nächste-Daten-Vorabruf-
Indikator befähigt, basierend auf dem bald auszuführenden Pro
grammzähler eines Befehls identifiziert zu werden. Eingaben in
die Daten-Vorabruf-Vorhersagetabelle werden aus Befehlen ge
bildet, die deterministische Adressierungsmodi zum Identifi
zieren der effektiven Adresse der Quelldaten benutzt. Die Da
ten-Vorabruf-Vorhersagetabelleneingaben umfassen einen Pro
grammzählerkennzeichen und einen Nächste-Daten-Vorabruf-
Indikator. Das Programmzählerkennzeichen ist der auf den aktu
ellen Befehl bezogene Programmzähler, und das Programmzähler
kennzeichen erlaubt es, daß die Daten-Vorabruf-
Vorhersagetabelle durch den Programmzähler durchsucht werden,
der auf einen bestimmten Befehl bezogen ist. Der Nächste-
Daten-Vorabruf-Indikator ist die effektive Adresse der Daten,
welche wahrscheinlich beim nächsten Mal, bei dem der gleiche
Befehl ausgeführt wird, benötigt werden. Der Nächste-Daten-
Vorabruf-Indikator wird berechnet durch Ausführen der Adres
sierungsmodusfunktion, welche mit dem Befehl verknüpft ist. Da
die Adressierungsmodusfunktion eine deterministische Funktion
ist, besteht eine hohe Wahrscheinlichkeit, daß die berechnete
nächste effektive Adresse die tatsächliche effektive Adresse
sein wird, die das nächste Mal, wenn der Befehl mit demselben
Programmzählerwert ausgeführt wird, abgerufen wird.
Die Elemente eines Computersystems gemäß einer bevorzugten
Ausführungsform der Erfindung umfassen einen Prozessor, einen
Puffer der Ebene Null, einen Puffer der Ebene Eins, einen
Hauptspeicher und eine Daten-Vorabruf-Maschine. Bei der bevor
zugten Ausführungsform ist der Prozessor ein beliebiger übli
cher Prozessor mit einem Programmzähler, welcher die Adresse
von Befehlen identifiziert, die ausgeführt werden sollen. Der
Puffer der Ebene Null ist vorzugsweise ein SRAM, welches die
schnellste Datentransfer-Rate zum Prozessor bietet und welches
physikalisch nahe dem Prozessor plaziert ist. Der Puffer der
Ebene Eins ist vorzugsweise ein SRAM, das eine langsamere Da
tentransferrate zum Prozessor bietet und das auf der System
hauptleiterplatte, welche mit dem Prozessor über einen System
bus verbunden ist, plaziert ist. Der Hauptspeicher ist ein
Speicher hoher Kapazität, welcher einen relativ langsamen Da
tentransfer zum Prozessor aufweist. Der Hauptspeicher kann
DRAN, Flash-Speicher oder andere geeignete Speichertypen um
fassen. Der Hauptspeicher ist mit dem Prozessor über einen Sy
stembus verbunden.
Die Daten-Vorabruf-Maschine wird vorzugsweise in den Prozessor
integriert und bewerkstelligt den Daten-Vorabruf zwischen dem
Puffer der Ebene Null, dem Puffer der Ebene Eins und dem
Hauptspeicher. Die Daten-Vorabruf-Maschine bedient sich zum
Vorhersagen der effektive Adresse der nächsten gewünschten Da
tenspeicherreferenz und zum Übertragen der mit der vorherge
sagten Datenspeicherreferenz korrespondierenden Daten zum Puf
fer der niedrigsten Ebene eines Nächste-Daten-Vorabruf-
Controllers, einem Daten-Vorabruf-Prediktor und eines Auffüll
managers, um die beste Gelegenheit für einen Puffertreffer auf
die Ausführung eines bestimmten Befehls zu erzeugen.
Der Nächste-Daten-Vorabruf-Controller sortiert Befehle mit
nicht deterministischen Adressierungsmodi aus und verwendet
Befehle mit deterministischen Adressierungsmodi wie etwa se
quentielle Adressierungsmodi, um eine Daten-Vorabruf-
Vorhersagetabelle aufzubauen, welche dazu verwendet wird, den
nächsten Vorabruf vorherzusagen. Das Erzeugen einer Daten-
Vorabruf-Vorhersagetabelleneingabe beinhaltet das Berechnen
der auf den aktuellen Befehl bezogenen nächsten effektiven
Adresse durch Ausführen der auf den aktuellen Befehl bezogenen
Adressierungsmodusfunktion. Der Daten-Vorabruf-Prädiktor be
dient sich der durch den Nächste-Daten-Vorabruf-Controller ge
bildeten Daten-Vorabruf-Vorhersagetabelle, um schnell die
nächste effektive Adresse für einen auf einen bevorstehenden
Befehl bezogenen Daten-Vorabruf zu identifizieren. Der Daten-
Vorabruf-Prädiktor hält die Daten-Vorabruf-Vorhersagetabelle
in einen inhaltsadressierbaren Speicher aufrecht, welcher
schnell durch ein Programmzählerkennzeichen durch sucht werden
kann. Ein Auffüllmanager der Daten-Vorabruf-Maschine ist ver
antwortlich für das Übertragen von Vorabrufdaten, welche nicht
in dem Puffer der niedrigsten Ebene gefunden werden, zu dem
Puffer in der niedrigsten Ebene, wenn ein Vorabrufverlust auf
tritt beim Puffer der niedrigsten Ebene. Der Auffüllmanager
erzeugt Vorabrufanfragen für einen Speicher auf höherer Ebene,
bis die gewünschten Vorabrufdaten lokalisiert und zu dem Puf
fer in der niedrigsten Ebene übertragen worden sind.
Im Betrieb erzeugt der Nächste-Daten-Vorabruf-Controller die
Daten-Vorabruf-Vorhersagetabelle unter Verwendung ausgeführter
Befehle, welche deterministische Adressierungsmodi darstellen.
Die Daten-Vorabruf-Vorhersagetabelle ist in dem Daten-
Vorabruf-Prädiktor plaziert und wird fortlaufend erneuert
durch den Nächste-Daten-Vorabruf-Controller. Wenn ein neuer
Befehl identifiziert wird als ein Befehl, der bald ausgeführt
werden soll, wird der auf den Befehl bezogene Programmzähler
an den Daten-Vorabruf-Prädiktor weitergeleitet. Der auf den
Befehl bezogene Programmzähler wird durch den Daten-Vorabruf-
Prädiktor dazu verwendet, um die Programmzähler-
Kennzeichenspalte der Daten-Vorabruf-Vorhersagetabelle nach
einem übereinstimmenden Programmzählerkennzeichen zu durchsu
chen. Wenn ein übereinstimmendes Programmzählerkennzeichen
identifiziert wird, wird der nächste Daten-Vorabruf-Indikator
aus der Tabelleneingabe extrahiert und der Indikator wird dazu
verwendet, den Puffer auf niedrigster Ebene in dem Computersy
stem zu durchsuchen nach einer Pufferlinie, welch mit der ef
fektiven Adresse des nächsten Daten-Vorabruf-Indikators über
einstimmt. Wenn ein Puffertreffer auftritt beim Puffer in der
niedrigsten Ebene wird kein Vorabruf notwendig. Wenn anderer
seits ein Pufferverlust auftritt beim Puffer der niedrigsten
Ebene, dann erzeugt der Auffüllmanager eine Vorabrufanforde
rung unter Verwendung des Nächste-Daten-Vorabruf-Indikators,
welcher die Speicher der höheren Ebenen in die Lage versetzt,
nach Daten mit der korrespondierenden effektiven Adresse zu
suchen. Sobald die Daten mit der korrespondierenden nächsten
effektiven Adresse lokalisiert sind, überträgt der Auffüllma
nager die lokalisierten Daten zu dem Puffer in der niedrigsten
Ebene im Computersystem. Mit dem zu dem Puffer in der niedrig
sten Ebene übertragenen Zielvorabrufdaten ist der auf den ak
tuellen Befehl bezogene Vorabruf-Prozeß komplett. Wenn der ak
tuelle Befehl schließlich durch den Prozessor ausgeführt wird,
besteht eine höhere Wahrscheinlichkeit, daß die durch den ak
tuellen Befehl angeforderten Daten in den Puffer der niedrig
sten Ebene plaziert sind, wobei ein schnellstmöglicher Daten
zugriff gestattet wird.
Kurze Beschreibung der Zeichnungen
Fig. 1 zeigt einen Prozessor und einen Mehrebenen-Speicher
nach dem Stand der Technik,
Fig. 2 zeigt einen Assemblierungssprachbefehl nach dem
Stande der Technik,
Fig. 3 zeigt spezielle Teile eines Assemblierungssprachbe
fehls nach dem Stande der Technik,
Fig. 4 zeigt einen Prozessor, einen Mehrebenen-Speicher und
eine Daten-Vorabruf-Maschine gemäß der Erfindung,
Fig. 5 zeigt eine Daten-Vorabruf-Tabelleneingabe gemäß der
Erfindung,
Fig. 6 zeigt eine Daten-Vorabruf-Vorhersagetabelle gemäß
der Erfindung,
Fig. 7 zeigt in einem Flußdiagramm das Zusammenspiel zwi
schen Elementen des Systems aus Fig. 6 gemäß der
Erfindung,
Fig. 8 zeigt in einem Prozeßflußdiagramm ein bevorzugtes
erfindungsgemäßes Verfahren.
Detaillierte Beschreibung
Fig. 4 zeigt eine bevorzugte Architektur eines Computersy
stems 50 gemäß der Erfindung. Die bevorzugte Architektur um
faßt einen Prozessor 52, eine Daten-Vorabruf-Maschine 56, ei
nen Puffer 60 der Ebene Null (L0), einen Puffer 64 der Ebene
Eins (L1) und einen Hauptspeicher 68. Bei der bevorzugten Aus
führungsform ist der Prozessor irgendein üblicher Prozessor
einschließlich eines Prozessors, der eine oder mehrere Daten
speicherreferenzen in einem einzigen Taktzyklus erzeugen kann.
Der Prozessor umfaßt einen Programmzähler, der die Adressen
von auszuführenden Befehlen identifiziert, einen Befehlsdeco
der, der den Operanden vom Opcode trennt und den Opcode in ei
ne Reihe elektrischer Signale umwandelt, welche die durch den
Opcode repräsentierte Anweisung ausführen, einen Adressdeco
der, der innerhalb des Speichers den physikalischen Ort der
benötigten Daten festlegt, einen Akkumulator, der zeitweilig
Werte speichert, und eine Arithmetik-Logik-Einheit, welche die
mathematischen Funktionen des Prozessors ausführt.
Die bevorzugte Architektur eines Computersystems 50 umfaßt ein
Speicherteilsystem 54 mit einer Mehrebenen-Pufferanordnung,
bei der die Ebenen des Pufferspeichers hinsichtlich Größe und
Latenzzeit unterschieden werden. Der L0-Puffer 60 (auch be
kannt als Primärpuffer) bietet die schnellste Datenübertra
gungsrate zum Prozessor 52. Der L0-Puffer ist physikalisch na
he dem Prozessor angeordnet und ist vorzugsweise ein SRAM. Ob
wohl zum Zwecke der Beschreibung der L0-Puffer als mit dem
Prozessor über einen Bus 72 verbunden dargestellt ist, wird
der L0-Puffer vorzugsweise auf dem Prozessorchip mit integriert
und mit dem Prozessor durch eine auf dem Chip befindliche
Schaltungsanordnung mit hoher Bandbreite verbunden. Der L1-
Puffer 64 (auch bekannt als Sekundärpuffer) hat eine größere
Speicherkapazität als der L0-Puffer, bietet aber eine langsa
mere Datentransferrate zum Prozessor. Der L1-Puffer ist vor
zugsweise ein SRAM auf dem Chip, es kann aber auch eine andere
Speicherform wie etwa ein SRAM, das in das auf der System
hauptleiterplatte befindliche System-RAN integriert sein kann.
Bei der bevorzugten Ausführungsform speichern der L0-
Pufferspeicher und der L1-Pufferspeicher nur Operandendaten,
welche von dem Prozessor benötigt werden, und Opcode-Befehle,
die vom Prozessor benötigt werden, werden in einem nicht dar
gestellten separaten Puffer gespeichert. Obwohl eine geteilte
Pufferanordnung beschrieben wird, kann ein vereinigter Puffer,
der sowohl Daten als auch Befehle kombiniert, ebenfalls imple
mentiert werden. Der L0-Puffer erstreckt sich typischerweise
von 1 Kb bis zu 64 Kb und der L1-Puffer erstreckt sich typi
scherweise von 64 Kb bis zu 1 Mb, obwohl dies nicht kritisch
ist. Obwohl eine Zweiebenen-Pufferanordnung beschriebenen ist,
sind andere Pufferanordnungen möglich einschließlich z. B.
mehreren Pufferebenen (1 bis x) und/oder ein Pufferspeicher,
der auf andere Weise mit einem Prozessor verbunden ist. Die
exakte Pufferausgestaltung ist für die Erfindung nicht kri
tisch.
Der Hauptspeicher 68 ist ein Speicher hoher Kapazität, der ei
ne relativ langsame Datentransferrate zum Prozessor 52 bietet.
Der Hauptspeicher kann ein DRAM, ein SRAM, ein Flash-Speicher
und ein FRAM miteinschließen. Das Speicherteilsystem kann des
Weiteren mit Eingabe-/Ausgabe-Einheiten verbunden sein, wie
beispielsweise einen magnetischen Speicher. Der Hauptspeicher
ist auch mit dem Prozessor über den Bus 72 verbunden.
Die bevorzugte Architektur des Computersystems 50 umfaßt die
Daten-Vorabruf-Maschine 56, die den Vorabruf von Daten zwi
schen dem L0-Puffer 60, dem L1-Puffer 64 und dem Hauptspeicher
68 verwaltet. Die Daten-Vorabruf-Maschine ist der Brennpunkt
der Erfindung und bedient sich eines Nächste-Daten-Vorabruf-
Controllers 76, eines Daten-Vorabruf-Prädiktors 80 und eines
Auffüllmanagers 84, um die effektive Adresse der nächsten ge
wünschten Datenspeicherreferenz vorherzusagen und die mit der
vorhergesagten Datenspeicherreferenz korrespondierenden Daten
zu dem Puffer der niedrigsten Ebene zu übertragen, um die be
ste Chance für einen Puffertreffer auf die Ausführung eines
gegebenen Befehls zu erzeugen.
Die erste Einheit in der Daten-Vorabruf-Maschine 56 ist der
Nächste-Daten-Vorabruf-Controller 76. Der Nächste-Daten-
Vorabruf-Controller untersucht Programmbefehle und verwendet
ausgewählte Befehle zum Aufbau einer Daten-Vorabruf-
Vorhersagetabelle, die dazu verwendet wird, um den nächsten
Daten-Vorabruf vorherzusagen. Der Nächste-Daten-Vorabruf-
Controllerauswahlprozeß beinhaltet das Untersuchen einer Be
fehlslinie, vorzugsweise in Bezug auf einen ausgeführten Be
fehl, für eine bestimmte Charakteristik. Im besonderen unter
sucht der Nächste-Daten-Vorabruf-Controller den mit der Quel
len-Adresse, welche in dem Befehl eingebettet ist, den verbun
denen Adressierungsmodus, wobei nach Adressierungsmodi gesucht
wird, die in die deterministische Adressierungsmoduskategorie
fallen. Bei der bevorzugten Ausgestaltung wird der Adressie
rungsmodus durch einen 3-Bit-Vektor identifiziert und der
Adressierungsmodusvektor des Befehls wird durch einen fest
verdrahteten Komparator geleitet, um festzulegen, ob der
Adressierungsmodusvektor mit irgendwelchen voreingestellten
deterministischen Adressierungsmodusvektoren übereinstimmt,
welche durch einen System-Setup identifiziert worden sind. Bei
der bevorzugten Ausgestaltung umfassen die deterministischen
Adressierungsmodi sequentielle Adressierungsmodi wie etwa Prä-
und Post-Inkrementieren, zirkulares Adressieren und Bit-
Umkehr-Adressierungsmodi.
Wenn der Adressierungsmodusvektor eines Befehls einen determi
nistischen Adressierungsmodus identifiziert, wird der Befehl
weiterverarbeitet zu einer Daten-Vorabruf-Vorhersagetabellen
eingabe, die dann dazu benutzt wird, um die Daten-Vorabruf-
Vorhersagetabelle zu schaffen. Wenn jedoch der Adressierungs
modusvektor einen nicht deterministischen Adressierungsmodus
identifiziert, dann wird der Befehl in dem aktuellen Vorabruf
prozeß nicht weiter betrachtet. Befehle, die sich determini
stischer Adressierungsmodi bedienen, werden in die Daten-
Vorabruf-Vorhersagetabelle mit eingebracht, da sie eine be
kannte Funktion bereit stellen, welche dazu verwendet werden
kann, die effektive Adresse zu berechnen, die beim nächsten
Mal identifiziert wird, wenn der gleiche Befehl erneut zur
Ausführung aufgerufen wird. In Programmen, die zu den gleichen
Befehlen viele Male zurückkehren, korrespondiert häufig die
nächste effektive Adressenvorhersage mit dem tatsächlichen ef
fektiven Adressabruf, wobei eine höhere Puffertrefferrate ge
schaffen wird.
Die Erzeugung eines Daten-Vorabruf-Vorhersagetabelleneintrags
wird durchgeführt durch den Nächste-Daten-Vorabruf-Controller
76 und beinhaltet das Berechnen der nächsten auf den aktuellen
Befehl bezogenen effektiven Adresse und der Verwendung des de
terministischen Adressierungsmodus, der durch den Befehl iden
tifiziert wird. Ein bevorzugter Daten-Vorabruf-Vorhersage
tabelleneintrag 90 ist in Fig. 5 dargestellt und umfaßt die
folgenden Vektoren; ein Programmzählerkennzeichen 92, einen
Nächste-Daten-Vorabruf-Indikator 94, den Quellenadressierungs
modus 96 und einen Gültiger-Eintrag-Vektor 98. Das Programm
zählerkennzeichen ist der auf den aktuellen Befehl bezogene
Programmzähler. Das Programmzählerkennzeichen erlaubt der Da
ten-Vorabruf-Vorhersagetabelle, durch den Programmzähler
durchsucht zu werden, der auf einen bestimmten Befehl bezogen
ist. Der nächste Daten-Vorabruf-Indikator ist ein Vektor, der
die effektive Adresse der nächsten Pufferlinie identifiziert,
die dann angefordert werden würde, wenn z. B. die sequentielle
Adressierungsmodusfunktion des aktuellen Befehls ausgeführt
wird, um die nächste effektive Adresse zu berechnen. Ein Bei
spiel der Berechnung einer nächsten effektiven Adresse (EA)
unter einem postinkrementierenden Adressierungsmodus ist wie
folgt:
Aktuelle EA = A0
Nächste EA = A0 + Konstante.
Ein Beispiel für das Berechnen einer nächsten effektiven
Adresse unter einem präinkrementierenden Adressierungsmodus
ist wie folgt:
Aktuelle EA = A0 + Konstante
A0 = A0 + Konstante und
Nächste EA = A0 + Konstante + Konstante.
Die zum Identifizieren einer effektiven Adresse erforderliche
Anzahl von Bits in den nächsten Daten-Vorabruf-Indikatorvektor
ist eine Funktion der Speicherorganisation auf dem Computersy
stem. Bei der bevorzugten Ausgestaltung ist der Nächste-Daten-
Vorabruf-Indikatorvektor 12 Bits.
Der Quellenadressierungsmodusvektor 96 bei der Daten-Vorabruf-
Vorhersagetabelleneingabe ist ein Vektor, der den Adressie
rungsmodus der Daten-Vorabruf-Vorhersagetabelleneingabe reprä
sentiert. Es ist bereits bekannt, daß der Quellenadressie
rungsmodus in die deterministische Adressierungsmoduskategorie
fällt, da der Befehl aussortiert worden wäre, wenn der Befehl
einen nicht deterministischen Adressierungsmodus hätte. Jedoch
ist der Adressierungsmodus in der Daten-Vorabruf-Vorhersage
tabelleneingabe enthalten, denn die Kenntnis des bestimmten
involvierten Adressierungsmodus kann bei der Feinabstimmung
des Systems hilfreich sein. Der gültige Eingabevektor 98 einer
Tabelleneingabe ist ein 1-Bit-Vektor, der die Daten-Vorabruf-
Vorhersagetabelleneingabe als gültige Eingabe identifiziert.
Obwohl der Quellenadressierungsmodusvektor nicht kritisch für
die Erfindung ist, ist dieser in der bevorzugten Ausgestaltung
enthalten, um deren Verhalten zu verbessern. Der Quellenadres
sierungsmodus kann von der Tabelleneingabe entfernt werden, um
die Tabelleneingabegröße zu vermindern.
Unter Bezugnahme nochmals auf Fig. 4 ist die nächste Einheit
in der Daten-Vorabruf-Maschine 56 der Daten-Vorabruf-Prädiktor
(DPP) 80. Der Daten-Vorabruf-Prädiktor bedient sich der aus
verschiedenen Tabelleneingaben gebildeten Daten-Vorabruf-
Vorhersagetabelle, um schnell die nächste effektive Adresse
für den Daten-Vorabruf zu identifizieren. Der Daten-Vorabruf-
Prädiktor hält die Daten-Vorabruf-Vorhersagetabelle im Spei
cher wie etwa einem inhaltsadressierbaren Speicher, der
schnell durch das Programmzählerkennzeichen durchsucht werden
kann, in Stand. Fig. 6 ist eine Darstellung einer beispiel
haften Daten-Vorabruf-Vorhersagetabelle 100 mit verschiedenen
Tabelleneingaben. Die Daten-Vorabruf-Vorhersagetabelle wird
wie ein normaler Puffer behandelt, da sie nicht alle Befehle
speichern kann. Pufferersatzmechanismen wie etwa direkt ge
plante, zweiwege-satz-verknüpfte, voll-satz-verknüpfte oder
irgendwelche andere Speicherersatzmechanismen können verwendet
werden.
Die nächste Einheit in der Daten-Vorabruf-Maschine 56 ist der
Auffüllmanager 84. Der Auffüllmanager ist verantwortlich für
das Übertragen von in einem Speicher in höherer Ebenen gefun
denen Vorabrufdaten zu dem Puffer in niedrigster Ebene. Der
Auffüllmanager erkennt, wenn ein Vorabrufverlust beim Puffer
in niedrigster Ebene auftritt und erzeugt dann eine Vorab
rufanforderung für einen Speicher in höherer Ebene bis die
Zielvorabrufdaten lokalisiert und zu den Puffer in niedrigster
Ebene übertragen worden sind. Es ist darauf hinzuweisen, daß
obwohl die Funktionen der Daten-Vorabruf-Maschine separat von
dem Prozessor 52 zum Zwecke der Beschreibung dargestellt sind,
bei der bevorzugten Ausgestaltung die Teileinheiten der Daten-
Vorabruf-Maschine auf dem gleichen Chip wie der Prozessor in
tegriert sind.
Der Betrieb des Computersystems 50 aus Fig. 4 ist mit Bezug
auf Fig. 7 beschrieben. Fig. 7 ist ein Flußdiagramm, das die
Interaktion zwischen den bezüglich Fig. 4 beschriebenen Ele
menten darstellt, wobei gleiche Elemente die gleichen Bezugs
zeichen haben. Um den Vorabrufprozeß zu beginnen, wird das Da
tenreferenzverhalten verfolgt, um die Daten-Vorabruf-
Vorhersagetabelle zu entwickeln. Um die Daten-Vorabruf-
Vorhersagetabelle zu erzeugen, selektiert der nächste Daten-
Vorabruf-Controller 76 die ausgeführten Befehle vom Prozessor
52, welche sich deterministischer Adressierungsmodi bedienen,
um effektive Adressen als die nächsten Daten-Vorabruf-
Indikatoren zu erzeugen. Daten-Vorabruf-Vorhersagetabellen
eingaben -wie in Fig. 5 gezeigt- werden aus den abgearbeite
ten Befehlen durch Ausführen der Adressierungsmodusfunktion
eines Befehls erzeugt, um die effektive Adresse der Daten zu
berechnen, welchen vorhergesagt wird, daß sie als nächstes von
dem Prozessor benötigt werden. Die erzeugten Tabelleneingaben
werden zu dem Daten-Vorabruf-Prädiktor weitergeleitet, um die
Daten-Vorabruf-Vorhersagetabelle zu erzeugen. Sobald eine an
fängliche Daten-Vorabruf-Vorhersagetabelle erzeugt ist, wird
die Tabelle kontinuierlich aktualisiert.
Nachdem die Daten-Vorabruf-Vorhersagetabelle erzeugt ist, wird
ein Programmzähler vom Prozessor 52 zu dem Daten-Vorabruf-
Prädiktor 80 übertragen. Der Programmzähler ist ein Look-
Ahead-Programmzähler, der einen zukünftigen Befehl repräsen
tiert, welcher bald ausgeführt werden soll. Der Programmzähler
wird in den Daten-Vorabruf-Prädiktor eingespeist und wird dazu
verwendet, um die Programmzählerkennzeichenspalte der Daten-
Vorabruf-Vorhersagetabelle auf ein übereinstimmendes Programm
zählerkennzeichen hin zu durchsuchen. Wenn der aktuelle Pro
grammzähler vom Prozessor mit einem Programmzählerkennzeichen
der Daten-Vorabruf-Vorhersagetabelle übereinstimmt, dann
stellt die Daten-Vorabruf-Vorhersagetabelle die nächste effek
tive Adresse bereit, welche dazu verwendet wird, den Puffer
höchster Priorität, z. B. den L0-Puffer 60, nach einer über
einstimmenden Pufferlinie zu durchsuchen. Wenn andererseits
keine übereinstimmende Tabelleneingabe gefunden wird in der
Daten-Vorabruf-Vorhersagetabelle, dann kann der Vorabruf fort
gesetzt werden mit einem anderen Ansatz, wie etwa einem Block
vorabruf oder der Vorabruf kann unterbrochen werden.
Das Durchsuchen des L0-Puffers 60 beinhaltet die Verwendung
des Nächste-Daten-Vorabruf-Indikators, insbesondere der näch
sten effektiven Adresse, welcher von der passenden Daten-
Vorabruf-Vorhersagetabelleneingabe extrahiert wird, um zu se
hen, ob die identifizierte Pufferlinie in dem L0-Puffer be
reits existiert. Würde die durch die berechnete nächste effek
tive Adresse identifizierte Pufferlinie bereits im L0-Puffer
existieren, dann ist keine weitere Aktion notwendig, da die
wahrscheinlich von einem nächsten Befehl benötigten Daten be
reits an dem den schnellsten Datenzugriff auf den Prozessor 52
bietenden Speicherplatz plaziert sind. Wenn andererseits die
Pufferlinie in dem L0-Puffer nicht existent ist, dann gibt es
einen Vorabrufverlust und der Auffüllmanager 84 ist aufgeru
fen, die Vorabrufdaten zu lokalisieren und die Daten zum L0-
Puffer zu übertragen. Der Pufferspeicher wird vorzugsweise auf
einer Prioritätsbasis durchsucht, wobei der Puffer auf nied
rigster Ebene die höchste Priorität und der Puffer auf höch
ster Ebene die niedrigste Priorität hat.
Wenn ein Vorabrufverlust im L0-Puffer 60 auftritt, erzeugt der
Auffüllmanager 84 eine Vorabrufanfrage und leitet die Vorab
rufanfrage an den nächsten Speicher 104 auf niedrigerer Ebene,
z. B. den L1-Puffer, weiter. Wenn die gewünschten Vorabrufda
ten in einer Pufferlinie des L1-Puffers existent sind, dann
wird die durch die berechnete effektive Adresse identifizierte
Pufferlinie zum L0-Puffer übertragen, und der Vorabruf ist kom
plett. Wenn andererseits die Vorabrufdaten in einer Pufferli
nie des L1-Puffers nicht existent sind, dann übermittelt der
Auffüllmanager eine Vorabrufanfrage an den nächsten Speicher
in einer niedrigen Ebene, in diesem Fall dem Hauptspeicher.
Sobald die Vorabrufdaten in dem Hauptspeicher gefunden worden
sind, können die Daten zu dem L0- oder L1-Puffer nach Bedarf
übertragen werden. Aufgrund der durch die L0- und L1-Puffer
verluste verursachte Verzögerung kann das System Zyklusnach
teile erleiden anstelle von Vorabrufaufwand. Wenn jedoch der
Vorabruf in der Lage ist, die vorhergesagten Daten zum L0-
Puffer zu bringen und der Prozessor 52 dahin gelangt, die vor
hergesagten Daten abzurufen, dann ist die Effizienz des Pro
zessors verbessert durch den Vorabrufprozeß, da die Datenzu
griffszeit für die an den Prozessor bereitgestellten Daten mi
nimiert worden ist. Wenn die vorabgerufenen Daten von der Be
fehlsausführung nicht angefordert werden, dann ist der Vorab
rufalgorithmus nicht erfolgreich gewesen beim Vorhersagen der
von dem aktuellen Befehl benötigten Daten. Der Vorabrufprozeß
wird während des Betriebes des Prozessors schnell wiederholt.
Es kann auch ein Schema implementiert werden, bei dem der
Vorabruf annulliert wird, wenn erkannt wird, daß die Eingabe
in die Vorhersagetabelle nicht mit der wirklichen Adresse des
Befehls mit demselben Programmzählerkennzeichen übereinstimmt,
wobei der Nachteil für die falsche Vorhersage verringert wird.
Des Weiteren kann der Grund für die falsche Vorhersage festge
stellt werden und die Tabelleneingabe kann entfernt werden,
bevor sie eine andere falsche Vorhersage erzeugt.
Fig. 8 zeigt das Prozeßflußdiagramm eines bevorzugten Verfah
rens der Erfindung. Bei einem ersten Schritt 110 wird eine Da
ten-Vorabruf-Vorhersagetabelle erzeugt. Die Daten-Vorabruf-
Vorhersagetabelle bezieht Programmzählerwerte auf effektive
Adressen, welche berechnet werden unter Verwendung der auf ei
nem Befehl bezogenen deterministischen Adressierungsmodusfunk
tion. Bei einem nächsten Schritt 112 wird ein Programmzähler
für einen bevorzustehenden Befehl identifiziert. Der Programm
zähler ist ein Look-Ahead-Zähler, der es ermöglicht, daß die
notwendigen Daten vorabgerufen werden. Bei einem nächsten
Schritt 114 wird die Daten-Vorabruf-Vorhersagetabelle durch
sucht unter Verwendung des Programmzählers von dem bevorste
henden Befehl, um eine passende Eingabe von der Daten-
Vorabruf-Vorhersagetabelle zu finden. Bei einem nächsten
Schritt 116 wird ein berechneter nächster Daten-Vorabruf-
Indikator in Form einer effektiven Adresse von der passenden
Daten-Vorabruf-Vorhersagetabelleneingabe extrahiert, um das
Computerspeicherteilsystem nach den gewünschten Daten zu
durchsuchen. Bei einem nächsten Schritt 118 wird das Computer
speicherteilsystem nach Daten durchsucht, die durch den extra
hierten nächsten Daten-Vorabruf-Indikator identifiziert wer
den. Bei einem nächsten Schritt 120 werden, sobald die ge
wünschten Daten innerhalb des Computerspeicherteilsystems lo
kalisiert worden sind, die gewünschten Daten zu dem Puffer in
der niedrigeren Ebene übertragen, wenn die Daten noch nicht in
dem Puffer der niedrigsten Ebene gegenwärtig sind.