DE69811159T2 - Verfahren zur verminderung der frequenz von zwischenspeicher-fehlgriffen in einem rechner - Google Patents

Verfahren zur verminderung der frequenz von zwischenspeicher-fehlgriffen in einem rechner

Info

Publication number
DE69811159T2
DE69811159T2 DE69811159T DE69811159T DE69811159T2 DE 69811159 T2 DE69811159 T2 DE 69811159T2 DE 69811159 T DE69811159 T DE 69811159T DE 69811159 T DE69811159 T DE 69811159T DE 69811159 T2 DE69811159 T2 DE 69811159T2
Authority
DE
Germany
Prior art keywords
block
instructions
blocks
cache
selection
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69811159T
Other languages
English (en)
Other versions
DE69811159D1 (de
Inventor
Alexander Augusteijn
Antoine Clout
Gerardus Verhoeven
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.)
Koninklijke Philips NV
Philips AB
Original Assignee
Koninklijke Philips Electronics NV
Philips AB
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips Electronics NV, Philips AB filed Critical Koninklijke Philips Electronics NV
Priority claimed from PCT/IB1998/000197 external-priority patent/WO1998038579A1/en
Application granted granted Critical
Publication of DE69811159D1 publication Critical patent/DE69811159D1/de
Publication of DE69811159T2 publication Critical patent/DE69811159T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

  • Die Erfindung bezieht sich auf ein Verfahren zur Auswahl von Speicherplätzen zur Platzierung von Befehlen, wie in der Präambel von Anspruch 1 beschrieben.
  • Eine Maschine wie ein Computer enthält typischerweise einen Hauptspeicher, einen Cache-Speicher und einen Prozessor. Während der Ausführung eines Programms lädt der Computer Befehle zur Ausführung durch den Prozessor von dem Hauptspeicher und kopiert diese Befehle in den Cache-Speicher. Der Cache-Speicher enthält Cache-Zeilen, die jeweils mehrere Befehle gleichzeitig enthalten können. Der Speicher enthält Speicherplätze, und der Speicherplatz, an dem ein Befehl gespeichert wird, gibt vor, in welche Cache-Zeile dieser Befehl kopiert wird. Wenn der Befehl in die Cache-Zeile kopiert ist, steht der vorhergehende Inhalt dieser Cache-Zeile nicht mehr vom Cache-Speicher zur Verfügung.
  • Wenn der Prozessor einen Befehl ausführen soll, versucht der Computer, diesen Befehl vom Cache-Speicher zu laden. Steht der Befehl nicht im Cache-Speicher zur Verfügung, tritt ein sogenannter "Cache-Fehlgriff" auf und die Ausführung wird verzögert, weil der Computer den Befehl vom Hauptspeicher laden muss, bevor der Befehl ausgeführt werden kann.
  • Ein Cache-Fehlgriff kann auftreten, wenn ein weiterer Befehl in diejenige Cache-Zeile kopiert wird, in die zuletzt ein anderer Befehl kopiert wurde. Ob dies geschieht, hängt von den Speicherplätzen der anderen Befehle im Hauptspeicher ab, die seit dem letzten Kopieren des Befehls in die Cache-Zeile ausgeführt wurden. Wenn diese Speicherplätze so beschaffen sind, dass diese Befehle in die betreffende Cache-Zeile kopiert werden müssen, kann ein Cache-Fehlgriff auftreten. Die Anzahl der Cache-Fehlgriffe kann minimiert werden, indem die Speicherplätze im Hauptspeicher so ausgewählt werden, dass das Kopieren in die betreffende Cache-Zeile nicht zu häufig erforderlich ist.
  • In einem Artikel von Hiroyuki Timiyama et al. mit dem Titel "Optimal Code Placement of Embedded Software for Instruetion Caches", der in den Proceedings of the European Design and Test Conference in Paris, vom 11. bis 14. März 1996 auf den Seiten 96 bis 101 veröffentlicht wurde, wird ein Verfahren zur Auswahl der Speicherplätze beschrieben, mit dem die Befehle so in den Hauptspeicher platziert werden, dass die Anzahl der Cache-Fehlgriffe minimiert wird.
  • Gemäß diesen Verfahren wird eine Probe der Ausführung des Programms gewonnen. Diese Probe gibt an, welche Befehle der Prozessor nacheinander ausführt, wenn die Maschine eine bestimmte typische Dateneingabe erhält. Mit Hilfe der Probe wird eine lineare Funktion abgeleitet, die die Anzahl der Cache-Fehlgriffe für die Probe der Ausführung als eine Funktion der Speicherplätze berechnet, an denen die Probrammbefehle in dem Hauptspeicher platziert sind. Mit Hilfe eines nicht beschriebenen lokalen Suchverfahrens wird ein Minimum dieser linearen Funktion ermittelt, das den optimalen Speicherplätzen zur Platzierung der Befehle im Hauptspeicher entspricht.
  • Die lineare Funktion wird von einer Ersatz-Funktion () abgeleitet, die 1 ist, wenn die Anzahl der Pseudo-Speicherblöcke, welche zwischen zwei aufeinander folgenden Ausführungen eines Speicherblocks pi auf den gleichen Cache-Satz abgebildet werden, größer ist als die Anzahl der Möglichkeiten des Befehls-Cache.
  • Dieses bekannte Verfahren hat den Nachteil, dass es sehr zeitaufwendig ist. Selbst bei relativ kleinen Programmen benötigt ein Computer eine übermäßig lange Ausführungszeit, um ein Optimum zu ermitteln. Das bekannte Verfahren reduziert diese Ausführungszeit durch Gruppieren der Befehle in Befehlsblöcke, die immer als Ganzes ausgeführt werden, und durch Berechnen der Anzahl von Cache-Fehlgriffen auf Blockebene statt in Bezug auf einzelne Befehle. Aber selbst bei dieser Verbesserung benötigt ein Computer immer noch eine Ausführungszeit von mehreren Stunden, um bei relativ kleinen Programmen ein Optimum zu ermitteln.
  • Darüber hinaus werden bei dem bekannten Verfahren die Speicherplätze im Hauptspeicher auf äußerst ineffiziente Weise genutzt, weil es das Programm in Befehlsblöcke aufteilt und unbenutzte Speicherplätze zwischen den Blöcken einführt, um zu erzwingen, dass jede Cache-Zeile Befehle von nur einem Block enthält.
  • Die vorliegende Erfindung hat unter anderem zur Aufgabe, ein verbessertes Verfahren zur Auswahl von Speicherplätzen zur Platzierung von Befehlen in den Hauptspeicher einer Maschine mit einem Cache-Speicher zu schaffen.
  • Das erfindungsgemäße Verfähren ist durch den beschreibenden Teil von Anspruch 1 gekennzeichnet. Potentielle Auswahlen werden untersucht, um eine potentielle Auswahl auszuwählen, die die Anzahl der Cache-Fehlgriffe für die Probe der Programmausführung im Allgemeinen reduziert, wenn die Befehle entsprechend der potentiellen Auswahl platziert werden und nicht entsprechend der ursprünglichen Auswahl. Dieser Vorgang wird wiederholt, wobei jedes Mal die Nachfolge-Auswahl die ursprüngliche Auswahl ersetzt.
  • Bei diesem Verfahren erfolgt eine Berechnung der Anzahl Cache-Fehlgriffe für potentielle Nachfolge-Auswahlen. Wenn ein Computer das Verfahren ausführt, ist die Berechnung der Anzahl von Cache-Fehlgriffen zeitaufwendig, vor allem, wenn sie für zahlreiche potentielle Auswahlen durchgeführt wird. Es wird eine Auswertung als Heuristik verwendet, um zu entscheiden, ob die Anzahl von Cache-Fehlgriffen für potentielle Auswahlen aus Auswahlen berechnet werden soll, die sich nur durch die Verschiebung der ausgewählten Blöcke von der ursprünglichen Auswahl unterscheiden. Wenn eine derartige auf heuristische Weise gewählte potentielle Auswahl die Untersuchung besteht, wird auf die Berechnung der Anzahl von Cache-Fehlgriffen für die weiteren potentiellen Auswahlen verzichtet. Dadurch bleibt der erforderliche Zeitaufwand innerhalb der praktisch möglichen Grenzen, so dass das Verfahren auf umfangreiche Programme angewendet werden kann.
  • Das Programm wird entsprechend der optimalen Auswahl in den Hauptspeicher geladen. Dieser Hauptspeicher kann zum Beispiel ein konventioneller DRAM oder ein ROM oder ähnliches sein. Ein derartiger ROM (Festwertspeicher) kann in der Maschine mit einem festen, effizienten Programm genutzt werden. Das Programm kann auch auf einem maschinenlesbaren Medium, zum Beispiel einer Magnetplatte, gespeichert werden, und zwar in Kombination mit Informationen über die optimale Auswahl zur Verwendung beim Laden des Programms in den Hauptspeicher gemäß der optimalen Auswahl. Die Maschine mit dem Hauptspeicher wird das Programm ausführen, indem sie die Befehle aus dem Hauptspeicher abruft.
  • Es ist zu beachten, dass in dem Artikel mit dem Titel "Fast Instruction Cache Analysis via Static Cache Simulation" von Frank Mueller und David. B. Whalley, erschienen in den Proc. Annual Simulation Symposium, April 1995, auf den Seiten 104 bis 114 ein Verfahren beschrieben wird, um das Verhalten eines großen Teils der Befehls- Cache-Speicher-Verweise für ein bestimmtes Programm mit einer bestimmten Cache- Speicher-Konfiguration vorherzusagen. Das hier beschriebene Verfahren versucht für jeden Befehlsverweis zu bestimmen, ob dieser zu einem Cache-Speicher-Treffer oder einem Cache-Fehlgriff führt, indem das Aufrufdiagramm und der Steuerungsablauf für jede Funktion analysiert werden. Es wird nicht beschrieben, wie die Anzahl der Cache-Fehlgriffe minimiert werden kann.
  • Es ist weiter zu beachten, dass in dem Artikel mit dem Titel "Profiled Guided Code Position" von Karl Pettis und Robert C. Hansen, erschienen in den Proc. Of the ACM SIGPLAN '90 Conf. On Programming Language Design and Implementation White Plains, New York, vom 20. bis 22. Juni 1990, auf den Seiten 16 bis 27 Verfahren beschrieben werden, um den kompilierten Code auf eine solche Weise zu optimieren, dass die Ausführungszeit minimiert wird. Dies wird durch ein Prozedurpositionierverfahren erreicht, welches die Prozeduren so positioniert, dass diejenigen Prozeduren, die einander häufig aufrufen, nahe beieinander platziert werden. Außerdem werden grundlegende Blockordnungsverfahren beschrieben, von denen ein erstes versucht, die Anzahl der eingeschlagenen Verzweigungen, sowohl bedingte als auch unbedingte, zu reduzieren. Ein zweites Verfahren versucht, bedingte Verzweigungen Bedingungen weiterleiten zu lassen, die normalerweise nicht genommen werden.
  • Das erfindungsgemäße Verfahren hat eine Ausführungsform, in der die betreffende Auswertung für jeden Block aus einer Zählung der Ausführungen dieses Blocks während der Ausführungsprobe besteht, wobei nur Ausführungen gezählt werden, die sowohl einen Cache-Fehlgriff verursachen als auch von einer unmittelbar vorhergehenden Ausführung dieses Blocks durch die Ausführung anderer Blöcke getrennt sind, deren zusammengesetzte Größe kleiner ist als die Größe des Cache-Speichers. Unter dieser Bedingung ist sicher, dass es sich bei den Cache-Fehlgriffen, die gezählt werden, ausnahmslos um Konflikt-Fehlgriffe handelt, d. h. um Cache-Fehlgriffe, die vermieden werden können, indem den Befehlen andere Speicherplätze zugewiesen werden. Es ist wahrscheinlich, dass die Anzahl der während der Ausführungsprobe auftretenden Cache-Fehlgriffe durch das Verschieben eines Blocks, für den dieser Zählwert höher ist, reduziert werden kann. Aus diesem Grunde macht die Verwendung dieses Zählwertes die Suche nach einer optimalen Auswahl effizient.
  • In einer weiteren Ausführungsform des erfindungsgemäßen Verfahrens wird der Satz des mindestens einen gewählten Blocks so gewählt, dass die betreffende Auswertung angibt, dass bei jedem der zumindest einen gewählten Blöcke die Anzahl der Cache- Fehlgriffe mindestens genauso hoch ist wie bei jedem anderen Block, wobei die weiteren Blöcke alle Blöcke umfassen, deren jeweilige Auswertung angibt, dass ihre Anzahl von Cache-Fehlgriffen geringer ist als die des mindestens einen ausgewählten Blocks oder der ausgewählten Blöcke. Durch die Verschiebung eines Blocks, der die meisten Cache- Fehlgriffe verursacht, wird die Anzahl der Cache-Fehlgriffe, die während der Ausführungsprobe auftreten, am wahrscheinlichsten erfolgreich reduziert.
  • Das erfindungsgemäße Verfahren hat eine Ausführungsform, wobei - für das genannte Prüfen, ob eine potentielle Auswahl aus dem Satz der potentiellen Auswahlen eine kleinere Anzahl von Cache-Fehlgriffen ergibt - potentielle Auswahlen mit Selbstkonflikt, in denen ein beliebiger Speicherplatz, der für die Platzierung eines Befehls von einem beliebigen Block aus dem Satz des mindestens einen gewählten Blocks gewählt wurde, einen Cache-Speicher-Konflikt mit einem beliebigen Speicherplatz verursachen kann, der für die Platzierung der Befehle aus dem gleichen Block von dem Satz des mindestens einen gewählten Blocks in der ursprünglichen Auswahl gewählt wurde, aus dem Satz de potentiellen Auswahlen ausgeschlossen werden. Es werden nur diejenigen potentiellen Auswahlen berücksichtigt, in denen die Befehle in dem gewählten Block an Speicherplätzen platziert sind, deren Inhalt in andere Cache-Zeilen geladen wird als in der ursprünglichen Auswahl. Dadurch wird sichergestellt, dass diejenigen Cache-Fehlgriffe eliminiert werden, die dazu geführt haben, dass die Auswertung die höchste Anzahl von Cache-Fehlgriffen angibt. Somit wird die Berechnung der Anzahl von Cache-Fehlgriffen für potentielle Auswahlen, die nicht alle ursprünglichen Cache-Fehlgriffe eliminieren, welche durch den gewählten Block verursacht wurden, vermieden, und es wird vermieden, dass eine derartige potentielle Auswahl verwendet wird, um die ursprüngliche Auswahl zu ersetzen, wodurch man nur eine geringfügige Reduzierung der Anzahl von Cache-Fehlgriffen erhält.
  • Die Erfindung hat eine weitere Ausführungsform, in der die Speicherplätze, die für die Platzierung der Befehle von den Blöcken für die ursprüngliche Auswahl und für die potentiellen Auswahlen gewählt werden, logisch im Wesentlichen zusammenhängend gewählt werden, wobei im Wesentlichen keine unbenutzten Speicherplätze zwischen den Blöcken auftreten. Dies geschieht selbst dann, wenn dies bedeutet, dass Befehle vom Ende bzw. vom Anfang zweier aneinander angrenzender Blöcke in die gleiche Cache-Zeile geladen werden. Das Verfahren findet somit eine optimale Auswahl unter der Einschränkung, dass der Umfang der für das Programm verwendeten Hauptspeicherkapazität minimal ist.
  • Das erfindungsgemäße Verfahren hat eine weitere Ausführungsform, wobei die Gruppe von mindestens einem der gewählten Blöcke nur einen einzelnen Block umfasst und wobei die potentiellen Auswahlen jeweils eine Blockreihenfolge im Hauptspeicher haben, die sich von der Blockreihenfolge im Hauptspeicher der ursprünglichen Auswahl insofern unterscheidet, als dass nur die Befehle des einen Blocks in Bezug auf die Befehle der anderen Blöcke verschoben wurden. Dadurch wird die Anzahl der potientiellen Auswahlen reduziert, die berücksichtigt werden müssen, und somit braucht die gesamte Anzahl von Cache-Fehlgriffen im Durchschnitt weniger häufig berechnet zu werden.
  • Diese und andere vorteilhafte Aspekte der Erfindung werden im Folgenden anhand der nachstehenden Figuren ausführlicher beschrieben. Es zeigen:
  • Fig. 1 ein Diagramm einer Maschine mit einem Hauptspeicher und einem Cache-Speicher;
  • Fig. 2 einen Ablaufplan eines typischen Programms;
  • Fig. 3 einen Ablaufplan einer Ausführungsform des erfindungsgemäßen Verfahrens;
  • Fig. 4 zwei Auswahlen von Speicherplätzen zum Platzieren von Befehlen in den Hauptspeicher.
  • Fig. 1 zeigt ein Diagramm einer Maschine mit einem Hauptspeicher 10, einem Cache-Speicher 12 und einem Prozessor 14. Bei dem Hauptspeicher 10 handelt es sich zum Beispiel um einen DRAM oder einen ROM. Der Prozessor 14 hat einen Adressausgang, der mit dem Cache-Speicher 12 gekoppelt ist. Der Cache-Speicher 12 hat einen Befehlsausgang, der über einen Multiplexer 16 mit dem Prozessor 14 gekoppelt ist. Der Cache-Speicher 12 hat auch einen Adressausgang, der mit dem Hauptspeicher 10 gekoppelt ist. Der Hauptspeicher 10 hat einen Befehlsausgang, der über den Multiplexer 16 mit dem Prozessor 14 gekoppelt ist. Der Cache-Speicher 12 hat einen Steuerausgang, der mit dem Multiplexer 16 gekoppelt ist, um zu steuern, ob Befehle von dem Hauptspeicher 10 oder von dem Cache-Speicher 12 an den Prozessor 14 weitergeleitet werden.
  • Im Betrieb gibt der Prozessor Adressen aus, um Befehle abzurufen. Die Adressen beziehen sich auf Speicherplätze im Hauptspeicher 10. Wenn eine Adresse zum ersten Mal ausgegeben wird, leitet der Cache-Speicher 12 die Adresse an den Hauptspeicher 10 weiter. In Reaktion darauf liefert der Hauptspeicher 10 den an dem durch die Adresse bezeichneten Speicherplatz gespeicherten Befehl an den Befehlsausgang des Hauptspeichers 10. Der Cache-Speicher 12 steuert den Multiplexer 16 so, dass dieser Befehl dem Prozessor 14 zugeführt wird.
  • Wenn die Befehlszeile vom Hauptspeicher 12 geliefert wird, wird sie auch in den Cache-Speicher 12 kopiert. Wenn der Prozessor 14 die Adresse eines Befehls ausgibt, prüft der Cache-Speicher 12 die Adresse, um zu sehen, ob eine Kopie dieses Befehls aufgrund eines früheren Abrufs dieses Befehls in dem Cache-Speicher zur Verfügung steht. Steht eine Kopie zur Verfügung, liefert der Cache-Speicher 12 diese Kopie an seinen Befehlsausgang und steuert den Multiplexer 16 so, dass diese Kopie dem Prozessor 14 zur Ausführung zugeführt wird. In diesem Fall braucht der Prozessor 14 nicht darauf zu warten, dass der Hauptspeicher 10 den Befehl liefert, und es braucht keine Adresse an den Hauptspeicher 10 geleitet zu werden.
  • Der Cache-Speicher 12 enthält eine Reihe von Cache-Zeilen 120-1 ... 120-8.
  • Es sind nur 8 Cache-Zeilen dargestellt, jedoch ist die Anzahl der Cache-Zeilen in der Praxis wesentlich größer, zum Beispiel 5 12. Jede Cache-Zeile liefert Speicherraum, zum Beispiel 64 Byte, um eine Anzahl von kopierten Befehlen zu speichern. Die Adresse des Speicherplatzes im Hauptspeicher 10, in dem der Befehl gespeichert ist, bestimmt, in welche Cache- Zeile dieser Befehl kopiert wird. Ein Befehl der an einem Speicherplatz mit der Adresse "A" gespeichert ist, könnte zum Beispiel in der Cache-Zeile Nummer A mod N gespeichert werden (der ganzzahlige Rest, wenn A durch N geteilt wird). Befehle, die an unterschiedlichen Speicherplätzen im Hauptspeicher gespeichert sind, können in die gleiche Cache-Zeile kopiert werden: in dem Beispiel werden Befehle, die an Speicherplätzen gespeichert sind, deren Adressen sich um ein ganzzahliges Vielfaches von N unterscheiden, in die gleiche Cache-Zeile kopiert. Man spricht in diesem Fall von Befehlen mit "Konflikt-Adressen". Normalerweise werden Befehl von einer Anzahl von Speicherplätzen mit einer Reihe von aneinander angrenzenden Adressen zusammen in der gleichen Cache-Zeile gespeichert. Eine bestimmte Adresse steht dann im Konflikt zu einer anderen Adresse, wenn die andere Adresse um ein (von null abweichendes) ganzzahliges Vielfaches von N von einer beliebigen Adresse in dem Bereich abweicht, zu dem die betreffende Adresse gehört.
  • Wenn ein Befehl von einem Speicherplatz in eine Cache-Zeile kopiert wird, wird ein "alter" Befehl mit einer Konflikt-Adresse nicht mehr vom Cache-Speicher 12 zur Verfügung stehen. Wenn der Prozessor 14 die Adresse des Speicherplatzes ausgibt, in dem dieser alte Befehl gespeichert ist, tritt ein sogenannter Cache-Fehlgriff auf. Der Cache- Speicher 12 leitet diese Adresse an den Hauptspeicher 10 weiter und der Prozessor 14 muss warten, bis der Hauptspeicher 10 die an dem durch diese Adresse bezeichneten Speicherplatz gespeicherten Befehl zurückgibt, bevor er den Befehl ausführen kann.
  • Die Architektur des Cache-Speichers 12 bestimmt, welche alten Befehle nicht mehr zur Verfügung stehen. In einem Cache-Speicher 12 mit einer direkt abgebildeten Architektur wird keiner der Befehle mit Konflikt-Adresse, die zuvor in die Cache-Zeile kopiert wurden, mehr zur Verfügung stehen. In einem Cache-Speicher mit einer satzadressierten Architektur kann eine Anzahl (zum Beispiel 8) von Befehlsbereichen mit zueinander in Konflikt stehenden Adressen zusammen in dem Cache-Speicher 12 gehalten werden. Wenn ein Befehl in den Cache-Speicher 12 kopiert wird, wird nur einer dieser Anzahl von Bereichen nicht mehr zur Verfügung stehen. Welcher Bereich dies ist, hängt von der Cache-Speicher-Ersetzungsstrategie der Architektur ab. Im Fall einer LRU-Strategie (Least Recently Used, zuletzt benutzt) steht der Bereich mit den Befehlen mit zueinander in Konflikt stehenden Adressen, die zuletzt durch den Prozessor 14 abgerufen wurden, nicht mehr zur Verfügung.
  • In Fig. 2 ist ein Ablaufplan eines typischen Programms für die Maschine aus Fig. 1 dargestellt. Das Programm enthält Befehlsblöcke 20-26. Die Befehle aus den Blöcken werden im Hauptspeicher 10 gespeichert und durch den Prozessor 14 ausgeführt. Das Programm enthält Schleifen 27, 28, die dazu führen, dass die Befehle von einigen Blöcken 21, 22 oder 23, 24 mehr als einmal ausgeführt werden. Während der Ausführung kann es zu einem Cache-Fehlgriff kommen, wenn ein bestimmter Befehl mehr als ein Mal ausgeführt wird und zwischen zwei Ausführungen ein anderer Befehl ausgeführt wird, der in die gleiche Cache-Zeile kopiert wurde wie die betreffende Ausführung. Diese Art von Cache-Fehlgriff kann vermieden werden, indem der andere Befehl vor der Ausführung an einem Speicherplatz im Hauptspeicher 10 platziert wird, dessen Adresse nicht im Konflikt mit der Adresse des betreffenden Befehls steht. Die Erfindung betrifft ein Verfahren zur Auswahl von Speicherplätzen zur Platzierung von Befehlen in den Hauptspeicher 10 auf eine solche Weise, dass die Anzahl der Cache-Fehlgriffe minimiert wird.
  • In Fig. 3 ist ein Ablaufplan einer Ausführungsform des erfindungsgemäßen Verfahrens dargestellt. In einem ersten Schritt 30 des Ablaufplans wird eine Probe einer Ausführung des Programms gewonnen. In Abhängigkeit von den in das Programm eingegebenen Daten werden die Blöcke 20-26 in einer bestimmten Reihenfolge ausgeführt: die Schleifen 27, 28 werden mehrfach durchlaufen und in den Schleifen 27, 28 werden die beiden Blöcke 22, 23 abwechselnd ausgeführt. Die Ausführungsprobe beschreibt die Reihenfolge, in der die Blöcke ausgeführt werden (zum Beispiel 20, 21, 22, 24, 21, 22, 24, 25, 21, 23, 24, 21, 22, 24, usw.). In dem ersten Schnitt wird auch bestimmt, welche Cache- Fehlgriffe später als Kandidaten zur Eliminierung betrachtet werden. Zu diesem Zweck wird die gesamte kumulierte Anzahl von Cache-Zeilen "Si" berechnet, die erforderlich wäre, um die bis zur Ausführung des i-ten Blocks in der Folge ausgeführten Befehle zu speichern, d. h. wenn Bi der i-te Block in der Folge ist (z. B. B&sub1; = 20, B&sub2; = 21, B&sub3; = 22, B&sub4; = 24, B&sub5; = 21, usw.), ist S&sub1; = 0 und Si + 1 = Si + Größe (B1). Wenn ein Block wiederholt ausgeführt wird, wird eine Ausführung dieses Blocks an einer Position "i" in der Folge als Kandidat zur Eliminierung von Cache-Fehlgriffen gekennzeichnet, wenn es eine nächstvorhergehende Ausführung des Blocks an einer Position "j" in der Folge gibt (j < i) und Si - Sj < MIN, wobei MIN die Anzahl der Cache-Zeilen in dem Cache-Speicher 12 ist (plus die Anzahl des Inhalt einer Cache-Zeile, die der Cache-Speicher 12 im Fall eines satzadressierten Cache-Speichers gleichzeitig festhalten kann). Hier ist eine nächstvorhergehende Ausführung des Blocks eine Ausführung, die so gestaltet ist, dass es keine Zwischenpositionen "k" (j < k < i) in der Folge gibt, an der der gleiche Block ausgeführt wird.
  • Ferner wird eine ursprüngliche Auswahl der Speicherplätze zum Platzieren der Programmbefehle in dem ersten Schritt 30 getroffen, und es wird die Anzahl der Cache- Fehlgriffe berechnet, die während der Probe der Ausführung auftreten werden, wenn die Befehle entsprechend der ursprünglichen Auswahl platziert werden. Bei dieser Berechnung braucht nur die Ausführung der Blöcke 20-26 berücksichtigt zu werden und nicht die Ausführung der einzelnen Befehle, obwohl letzteres im Prinzip möglich ist. Für diese Berechnung wird für die ursprüngliche Auswahl für jeden Block ermittelt, welche Cache- Zeilen betroffen sind, wenn der Block in dem Cache-Speicher 12 kopiert wird. Anschließend wird die Ausführung entsprechend der Probe auf Blockebene, Schritt für Schritt für jeden Block in der Reihenfolge der Ausführung, simuliert, wobei für jede Cache-Zeile aufgezeichnet wird, welcher der Blöcke nach der Ausführung von jedem Block in der Folge bei der gegebenen Architektur des Cache-Speichers 12 in der Cache-Zeile zur Verfügung stehen wird. Jedes Mal, wenn ein Block in der Folge auftritt, erhöht sich die Anzahl der Cache-Fehlgriffe um die Anzahl von mit dem Block in Zusammenhang stehenden Cache- Zeilen, für die nicht aufgezeichnet wurde, dass dieser Block zur Verfügung steht.
  • In dem zweiten Schritt 31 des Ablaufplans wird für jeden Block 20-26 gezählt, wie viele Cache-Fehlgriffe während der Ausführungsprobe durch diesen Block 20 -26 verursacht wurden. In dem Zählwert werden nur diejenigen Ausführungen in der Folge von Ausführungen berücksichtigt, die in dem ersten Schritt als Kandidat zur Eliminierung von Cache-Fehlgriffen gekennzeichnet wurden. Für diese Cache-Fehlgriffe ist sicher, dass sie vermieden werden können, indem der Block an einem anderen Speicherplatz im Hauptspeicher 10 platziert wird. Die Zählung wird auch auf einer Blockebene durchgeführt, wie in Bezug auf die Bestimmung der Gesamtzahl von Cache-Fehlgriffen beschrieben.
  • In einem dritten Schritt 32 des Ablaufplans wird der Block 20-26 gewählt, dessen Zählwert mindestens so hoch ist wie der Zählwert für einen beliebigen anderen Block, wie in dem zweiten Schritt 31 bestimmt. Dieser Block wird mit "ausprobiert" gekennzeichnet.
  • In dem vierten Schritt 33 des Ablaufplans wird eine potentielle Auswahl des Speicherplatzes zur Platzierung der Programmbefehle von der ursprünglichen Auswahl der Speicherplätze zur Platzierung der Befehle abgeleitet.
  • In Fig. 4 sind die ursprüngliche Auswahl 40 und eine potentielle Auswahl 42 dargestellt. Die horizontale Dimension in Fig. 4 symbolisiert die Speicherplätze in dem Hauptspeicher 10 in der Reihenfolge logisch ansteigender Adresse "Addr". Gestrichelte vertikale Linien kennzeichnen die Grenzen zwischen Adressbereichen, die Speicherplätze adressieren, welche in die gleiche Cache-Zeile kopiert werden. In der ursprünglichen Auswahl 40 sind vier Blöcke a-d an einer Position dargestellt, die die Speicherplätze der Befehle dieser Blöcke im Hauptspeicher 10 symbolisiert.
  • In Fig. 4 wird davon ausgegangen, dass der zweite Block "b" in dem dritten Schritt 32 gewählt wurde. In dem vierten Schritt 33 des Ablaufplans wird eine potentielle Auswahl von der ursprünglichen Auswahl abgeleitet, indem die Reihenfolge genommen wird, in der die Blöcke in der ursprünglichen Auswahl auftreten, und der gewählte Block "b" in Bezug auf die anderen Blöcke verschoben wird. Zu diesem Zweck wird eine Position gewählt, an die der gewählte Block verschoben wird. Diese Position muss noch "unausprobiert" für den gewählten Block in Kombination mit der ursprünglichen Position sein. Wenn die Position ausgewählt ist, wird sie als "ausprobiert" gekennzeichnet, so dass sie nicht wieder für den gewählten Block in Kombination mit der ursprünglichen Auswahl verwendet wird.
  • In Fig. 4 führt zum Beispiel das Verschieben des gewählten Blocks "b" zu der potentiellen Auswahl 42, wo der zweite Block "b" von seiner Position zwischen den Blöcken a und c zu einer Position zwischen den Blöcken c und d verschoben wurde. Die Reihenfolge der Blöcke in der potentiellen Auswahl ist also (a c b d) anstelle von (a b c d) in der ursprünglichen Auswahl. In der potentiellen Auswahl 42 sind die Blöcke im Wesentlichen zusammenhängend in dem Hauptspeicher 10 angeordnet, d. h. im Wesentlichen ohne unbenutzte Speicherplätze zwischen den Speicherplätzen, die für befehlskonsekutive Blökke (z. B. a-b) in der Reihenfolge verwendet werden. Die Speicherkapazität wird also sehr effizient genutzt.
  • Vorzugsweise werden Positionen getestet, um zu ermitteln, ob entsprechend der resultierenden potentiellen Auswahl irgendein Befehl des ausgewählten Blocks an einem Speicherplatz gespeichert wird, der einer Cache-Zeile entspricht, welche für den gewählten Block gemäß der ursprünglichen Auswahl verwendet wird. Wenn dies der Fall ist, wird eine derartige Position vorzugsweise nicht zur Erzeugung der potentiellen Auswahl verwendet und es wird eine andere Position gewählt. Auf diese Weise werden nur Positionen gewählt, wo die durch die Ausführung des gewählten Blocks verursachten Cache- Fehlgriffe eliminiert werden. Dadurch wird der Zeitaufwand zur Berechnung der Gesamtzahl von Cache-Fehlgriffen der potentiellen Auswahlen entsprechend der unbenutzten Position verringert und - was noch wichtiger ist - es wird vermieden, dass der Ablaufplan eine derartige potentielle Auswahl anstelle der ursprünglichen Auswahl einsetzt, wodurch eine geringere Reduzierung der Anzahl von Cache-Fehlgriffen erreicht wird als dies für andere potentielle Auswahlen möglich gewesen wäre.
  • In dem fünften Schritt 34 des Ablaufplans wird die Gesamtzahl der Cache- Fehlgriffe berechnet, die während der Ausführungsprobe auftreten, wenn die Befehle entsprechend der potentiellen Auswahl 42 platziert sind. Diese Gesamtzahl von Cache- Fehlgriffen wird im Allgemeinen von der Gesamtzahl der Cache-Fehlgriffe abweichen, die für die ursprüngliche Auswahl 40 berechnet wurden.
  • Wenn die Befehle entsprechend der potentiellen Auswahl 42 in den Hauptspeicher 10 platziert sind, werden die Befehle des zweiten Blocks b in andere Cache-Zeilen in den Cache-Speicher kopiert als wenn die Befehle entsprechend der ursprünglichen Auswahl 40 platziert werden (wie an der Tatsache zu erkennen ist, dass der zweite Block b in den beiden Auswahlen zwischen anderen Paaren von gestrichelten vertikalen Linien erscheint). Aus diesem Grunde treten die durch das Abrufen von Befehlen von Block b verursachten Cache-Fehlgriffe, wenn die Blöcke entsprechend der ursprünglichen Auswahl in dem Hauptspeicher 10 platziert sind, nicht auf, wenn die Blöcke entsprechend der potentiellen Auswahl in dem Hauptspeicher platziert sind. Die Befehle von Block b können jedoch andere Cache-Fehlgriffe verursachen, entweder wenn sie abgerufen werden oder weil sie andere Befehle unverfügbar machen, wenn sie in den Cache-Speicher kopiert werden. Andere Blöcke a, c, d können auch andere Cache-Fehlgriffe verursachen, weil das Entfernen und Einfügen von Block b dazu führt, dass Befehle von anderen Blöcken (z. B. Block c) an unterschiedlichen Speicherplätzen platziert werden. All dies führt im Allgemeinen zu einer unterschiedlichen Anzahl von Cache-Fehlgriffen für die potentielle Auswahl 42 und die ursprüngliche Auswahl 40.
  • In dem sechsten Schritt 35 des Ablaufplans wird die für die potentielle Auswahl 42 berechnete Gesamtzahl von Cache-Fehlgriffen mit der für die ursprüngliche Auswahl 40 berechnete Gesamtzahl von Cache-Fehlgriffen verglichen. Wenn die für die potentielle Auswahl 42 berechnete Gesamtzahl von Cache-Fehlgriffen kleiner ist als die für die ursprüngliche Auswahl 40 berechnete Anzahl, wird in einem Teilschritt 35b die ursprüngliche Auswahl 40 durch die potentielle Auswahl ersetzt und der Ablaufplan wird mit dem zweiten Schritt fortgesetzt. Wenn die Gesamtzahl der für die potentielle Auswahl 42 berechneten Cache-Fehlgriffe nicht kleiner ist als die für die ursprüngliche Auswahl 40 berechnete Anzahl, wird ein siebter Schritt 36 ausgeführt, um zu bestimmen, ob es noch irgendwelche nicht ausprobierten Positionen zur Platzierung des gewählten Blocks b gibt. Wenn dies der Fall ist, kehrt der Ablaufplan zu dem vierten Schritt 33 zurück. Wenn es keine nicht ausprobierten Positionen gibt, wird in einem achten Schritt 37 ermittelt, ob es irgendwelche weiteren Blöcke gibt, die eventuell als gewählte Blöcke dienen können. Ist dies der Fall, so kehrt der Ablaufplan zum dritten Schritt 32 zurück.
  • In einer alternativen Ausführungsform benutzt man anstelle der Wahl zwischen dem Ausführen des Teilschritts 35a oder des siebten Schritts 36 immer, wenn die für die potentielle Auswahl 42 berechnete Gesamtzahl der Cache-Speicher-Zugriffe nicht kleiner ist als die für die ursprüngliche Auswahl 40 berechnete Anzahl, andere Kriterien, um zu dem siebten Schritt zu gehen, zum Beispiel könnte man zufallsmäßig mit einer bestimmten Wahrscheinlichkeit p (fest, zum Beispiel p = = 0,1, oder als eine Funktion der Änderung in der Anzahl von Cache-Fehlgriffen, zum Beispiel p = exp(-Änderung·Faktor) zu dem Teilschritt 35a statt zu dem siebten Schritt gehen, wie aus den simulierten Temperverfahren bekannt, auch wenn die für die potentielle Auswahl 42 berechnete Gesamtzahl von Cache- Fehlgriffen nicht kleiner ist als die für die ursprüngliche Auswahl 40 berechnete Anzahl. Auf ähnliche Weise könnte man in einer weiteren alternativen Ausführungsform mit einer geringen Wahrscheinlichkeit entscheiden, mit dem siebten Schritt 36 fortzufahren, selbst wenn die für die potentielle Auswahl 42 berechnete Gesamtzahl der Cache-Fehlgriffe kleiner ist als die für die ursprüngliche Auswahl 40 berechnete Anzahl. Auf diese Weise kann eine Beendigung der Suche beim lokalen Optimum vermieden werden.
  • Wenn beim achten Schritt 37 keine weiteren Blöcke unausprobiert geblieben sind, geht der Ablaufplan davon aus, dass die ursprüngliche Auswahl als optimale Auswahl gefunden wurde, und fährt mit dem neunten Schritt 38 fort, in dem ein Code-Modul generiert wird, das die Befehle zusammen mit Informationen dazu enthält, wo diese Befehle gemäß der optimalen Auswahl in dem Hauptspeicher 10 zu platzieren sind. Das Code- Modul wird benutzt, um die Befehle entsprechend der optimalen Auswahl in den Hauptspeicher 10 zu laden, wonach der Prozessor 14 mit der Ausführung des Programms beginnen kann. Das Code-Modul kann auf einem computerlesbaren Medium wie einer magnetischen oder optischen Platte zwischengespeichert werden und von dort aus in den Hauptspeicher geladen werden. Anstelle nur dann mit dem neunten Schritt 38 fortzufahren, wenn keine weiteren Blöcke unausprobiert gelassen wurden, wird in einer alternativen Ausführungsform ein weniger strenges Kriterium zum Fortfahren verwendet, zum Beispiel, dass keine Blöcke unausprobiert gelassen werden, die mehr als eine bestimmte Anzahl von Cache-Fehlgriffen verursachen.
  • Wenn das Verfahren durch einen Computer entsprechend dem Ablaufplan aus Fig. 3 ausgeführt wird, nimmt die Berechnung der Gesamtzahl von Cache-Fehlgriffen für die Ausführungsprobe am meisten Zeit in Anspruch, wenn die Befehle entsprechend der potentiellen Auswahl platziert sind. Dieser Rechenaufwand wird natürlich bereits durch das Berechnen der Anzahl von Cache-Fehlgriffen für Blöcke und nicht für einzelne Befehle minimiert, und dieser Rechenaufwand kann noch weiter minimiert werden, indem zum Beispiel nur Cache-Fehlgriffe gezählt werden, die Blöcke betreffen, welche mehr als einmal in der Ausführungsprobe ausgeführt werden. Dieser Rechenaufwand wird jedoch immer noch die Gesamtdauer der Ausführung dominieren.
  • In dem Ablaufplan aus Fig. 4 wird dieser Rechenaufwand unter Kontrolle gehalten, weil der in dem zweiten Schritt 31 bestimmte Zählwert als eine Heurisitik zur Auswahl von potentiellen Auswahlen aus Auswahlen verwendet wird, die sich nur durch die Verschiebung eines einzelnen Blocks von der ursprünglichen Auswahl unterscheiden.
  • Das bedeutet, dass die ursprüngliche Auswahl durch eine potentielle Auswahl ersetzt wird, die die Anzahl der Cache-Fehlgriffe reduziert, ohne zuerst die Gesamtzahl der Cache- Fehlgriffe für alle möglichen potentiellen Auswahlen zu berechnen. Wenn eine potentielle Auswahl gefunden ist, in der ein gewählter Block im Vergleich zu der ursprünglichen Auswahl aus seiner Position verschoben wurde und die eine geringe Gesamtzahl von Cache-Fehlgriffen hat als die ursprüngliche Auswahl, so ersetzt diese potentielle Auswahl die ursprüngliche Auswahl. Anschließend werden keine weiteren Blöcke gewählt, die einen gleichen oder geringeren Zählwert haben als in dem zweiten Schritt 31 ermittelt wurde. Die Gesamtzahl der Cache-Fehlgriffe braucht für diese Blöcke und Positionen nicht berechnet zu werden.
  • Natürlich kann diese Reduzierung des Rechenaufwands auch erreicht werden, wenn von dem Ablaufplan aus Fig. 3 abgewichen wird. Statt die ursprüngliche Auswahl sofort zu ersetzen, wenn eine potentielle Auswahl mit einer "besseren" Position für den gewählten Block gefunden wird, könnte man zum Beispiel zuerst die Gesamtzahl der Cache-Fehlgriffe für potentielle Auswahlen für alle möglichen Positionen des gewählten Blocks berechnen und die ursprüngliche Auswahl durch eine potentielle Auswahl ersetzen, die maximal so viele Cache-Fehlgriffe aufweist wie irgendeine dieser potentiellen Auswahlen und weniger als die ursprüngliche Auswahl. Somit wird die Berechnung der Gesamtzahl von Cache-Fehlgriffen für potentielle Auswahlen, die unter Verwendung anderer gewählter Blöcke gewonnen wurden, vermieden, wenn eine "bessere" potentielle Auswahl als die ursprüngliche Auswahl gefunden wird, die den ersten gewählten Block verwendet.
  • Auch könnte man die Gesamtzahl der Cache-Fehlgriffe für potentielle Auswahlen berechnen, die in dem vierten Schritt 33 abgeleitet wurden und jeweils gewonnen wurden, indem ein bestimmter von mehreren verschiedenen ausgewählten Blöcken, deren Zählwert höher ist als der weiterer Blöcke (wie in dem zweiten Schritt 31 festgestellt), verschoben wird, bevor die ursprüngliche Auswahl ersetzt wird. Die ursprüngliche Auswahl wird dann durch eine potentielle Auswahl ersetzt, die die kleinste (oder höchstens so niedrige wie irgendeine) Anzahl von Cache-Fehlgriffen von allen potentiellen Auswahlen hat, die durch Verschieben der entsprechenden Blöcke aus den verschiedenen gewählten Blöcken abgeleitet wurde, vorausgesetzt, dass die Anzahl der Cache-Fehlgriffe geringer ist als die der ursprünglichen Auswahl. In diesem Fall wird die Berechnung der Anzahl von Cache-Fehlgriffen für potentielle Auswahlen, die durch Verschieben der weiteren Blöcke gewonnen wurden, vermieden, wenn eine geeignete potentielle Auswahl gefunden wird, die die verschiedenen ausgewählten Blöcke nutzt.
  • Statt immer nur einen einzelnen Block mit einem höchsten Zählwert (oder mindestens nicht geringerem Zählwert) von Cache-Fehlgriffen als irgendein anderer nicht ausprobierter Block zu wählen, könnte man mehrere Blöcke gleichzeitig mit einem höheren (oder mindestens nicht geringerem) Zählwert als irgendein anderer nicht ausprobierter Block wählen und die Befehle von all diesen ausgewählten Blöcken könnten in Bezug auf ihre Position in der ursprünglichen Auswahl verschoben werden, um eine potentielle Auswahl zu erhalten. Dies kann zu einer größeren Verbesserung pro Iteration führen.

Claims (11)

1. Verfahren zur Auswahl von Speicherplätzen zum Platzieren von Befehlen in einen Hauptspeicher eines Computers, wobei das Verfahren Folgendes umfasst:
- Gewinnen (30) einer Ausführungsprobe des Programms mit den Befehlen, wobei eine Probe angibt, welche Befehle ein Prozessor nacheinander ausführt, wenn der Computer eine bestimmte typische Dateneingabe erhält;
- Erzeugen (30) einer optimierten Auswahl von Speicherplätzen durch lokale Suche, wobei die optimierte Auswahl eine minimale Anzahl von Cache-Fehlgriffen erzeugt, wenn die Befehle gemäß der optimierten Auswahl für die Ausführungsprobe in einem mit einem Cache-Speicher verbundenen Hauptspeicher platziert werden, wobei der Hauptspeicher Speicherplätze hat und die Speicherplätze, an denen ein Befehl gespeichert wird, vorgeben, in welche Cache-Zeile der Befehl kopiert wird;
- wobei entsprechend diesem Verfahren eine Gesamtzahl von Cache- Fehlgriffen für eine ursprüngliche Auswahl und für potentielle Auswahlen von Speicherplätzen zum Platzieren der Befehle berechnet wird, wobei entsprechend diesem Verfahren für jeden Block aus einer Reihe von Blöcken von mindestens einem der Befehle eine betreffende Auswertung berechnet wird (31), die die Anzahl der durch Ausführungen dieses Blocks während der Ausführungsprobe verursachten Cache-Fehlgriffe angibt, wobei ein Block definiert wird als eine Gruppe von Programmbefehlen, die immer als Ganzes ausgeführt werden;
dadurch gekennzeichnet, dass das Verfahren die folgenden Schritte umfasst:
- Erzeugen (30) der ursprünglichen Auswahl von Speicherplätzen zum Platzieren der Befehle;
- Berechnen (31) der betreffenden Auswertung für jeden Block aus einer Reihe von Blöcken, wenn die Befehle entsprechend der ursprünglichen Auswahl platziert werden;
- Vergleichen (32) der betreffenden Auswertungen der Blöcke, um einen Satz von mindestens einem ausgewählten Block zu finden, für den die betreffenden Auswertungen angeben, dass der mindestens eine ausgewählte Block oder jeder Block eine höhere Anzahl von Cache-Fehlgriffen erzeugt als weitere Blöcke;
- Definieren (33) eines Satzes von potentiellen Auswahlen, in denen sich jeweils eine Reihenfolge der Blöcke im Hauptspeicher nur dadurch von einer Reihenfolge der Blöcke im Hauptspeicher gemäß der ursprünglichen Auswahl unterscheidet, dass die Befehle von dem mindestens einen gewählten Block oder den Blöcken im Vergleich zu den Befehlen der anderen Blöcke verschoben wurden;
- Prüfen (34, 35), ob für eine potentielle Auswahl aus dem Satz der potentiellen Auswahlen die potentielle Auswahl eine kleinere Anzahl von Cache-Fehlgriffen für die Ausführungsprobe erzeugt, wenn die Befehle gemäß der potentiellen Auswahl platziert werden, als wenn die Befehle gemäß der ursprünglichen Auswahl platziert werden;
- Ergreifen von entweder einer ersten Maßnahme: Wiederholen der Schritte des Vergleichens (32), des Definierens (33) und des Prüfens (34, 35) mit den weiteren Blöcken anstelle des Satzes von mindestens einem ausgewählten Block, oder
Ergreifen einer zweiten Maßnahme: Ersetzen (35a) der ursprünglichen Auswahl durch eine potentielle Auswahl ohne weiteres Prüfen unter Verwendung der weiteren Blöcke anstelle des gewählten Blocks, wobei die erste oder die zweite Maßnahme in Abhängigkeit davon ergriffen werden, ob die potentielle Auswahl die genannte kleinere Gesamtzahl von Cache- Fehlgriffen erzeugt als die ursprüngliche Auswahl, und Wiederholen der Schritte (31-35) für die ersetzte ursprüngliche Auswahl.
2. Verfahren nach Anspruch 1, wobei die betreffende Auswertung für jeden Block aus einer Zählung der Ausführungen dieses Blocks während der Ausführungsprobe besteht, wobei nur Ausführungen gezählt werden, die sowohl einen Cache-Fehlgriff verursachen als auch von einer unmittelbar vorhergehenden Ausführung dieses Blocks durch die Ausführung anderer Blöcke getrennt sind, deren zusammengesetzte Größe kleiner ist als die Größe des Cache-Speichers.
3. Verfahren nach Anspruch 1, wobei der Satz des mindestens einen gewählten Blocks so gewählt, dass die betreffende Auswertung angibt, dass bei jedem der zumindest einen gewählten Blöcke die Anzahl der Cache-Fehlgriffe mindestens genauso hoch ist wie bei jedem anderen Block, wobei die weiteren Blöcke alle Blöcke umfassen, deren jeweilige Auswertung angibt, dass ihre Anzahl von Cache-Fehlgriffen geringer ist als die des mindestens einen ausgewählten Blocks oder der ausgewählten Blöcke.
4. Verfahren nach Anspruch 1, wobei - für das genannte Prüfen, ob eine potentielle Auswahl aus dem Satz der potentiellen Auswahlen eine kleinere Anzahl von Cache-Fehlgriffen ergibt - potentielle Auswahlen mit Selbstkonflikt, in denen ein beliebiger Speicherplatz, der für die Platzierung eines Befehls von einem beliebigen Block aus dem Satz des mindestens einen gewählten Blocks gewählt wurde, einen Cache-Speicher- Konflikt mit einem beliebigen Speicherplatz verursachen kann, der für die Platzierung der Befehle aus dem gleichen Block von dem Satz des mindestens einen gewählten Blocks in der ursprünglichen Auswahl gewählt wurde, aus dem Satz de potentiellen Auswahlen ausgeschlossen werden.
5. Verfahren nach Anspruch 1, wobei die Speicherplätze, die für die Platzierung der Befehle von den Blöcken für die ursprüngliche Auswahl und für die potentiellen Auswahlen logisch im Wesentlichen zusammenhängend gewählt werden, wobei im Wesentlichen keine unbenutzten Speicherplätze zwischen den Blöcken auftreten.
6. Verfahren nach Anspruch 1, wobei die Gruppe von mindestens einem der gewählten Blöcke nur einen einzelnen Block umfasst und wobei die potentiellen Auswahlen jeweils eine Blockreihenfolge im Hauptspeicher haben, die sich von der Blockreihenfolge im Hauptspeicher der ursprünglichen Auswahl insofern unterscheidet, als dass nur die Befehle des einen Blocks in Bezug auf die Befehle der anderen Blöcke verschoben wurden.
7. Verfahren nach Anspruch 1, wobei das Verfahren den Schritt des Schreibens der Programmbefehle gemäß der optimalen Auswahl in einen computerlesbaren Speicher umfasst.
8. Verfahren nach Anspruch 7, wobei der genannte computerlesbare Speicher der Hauptspeicher der Maschine ist.
9. Verfahren nach Anspruch 7, wobei das Verfahren das Ausführen der Befehle umfasst, wobei ein Befehl zur Ausführung aus dem Cache-Speicher abgerufen wird, wenn dieser Befehl aus dem Cache-Speicher zur Verfügung steht, und ansonsten aus dem Hauptspeicher, wobei der Befehl in den Cache-Speicher kopiert wird, wenn der Befehl aus dem Hauptspeicher abgerufen wird.
10. Computerprogramm, das auf einem computerlesbaren Medium gespeichert und vorgesehen ist, um alle Schritte des Verfahrens gemäß einem der Ansprüche 1 bis 8 anzuwenden.
11. Computer, der vorgesehen ist, um alle Schritte des Verfahrens gemäß einem der Ansprüche 1 bis 8 zu implementieren, wenn der genannte Computer betrieben wird.
DE69811159T 1997-02-27 1998-02-16 Verfahren zur verminderung der frequenz von zwischenspeicher-fehlgriffen in einem rechner Expired - Fee Related DE69811159T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP97200575 1997-02-27
PCT/IB1998/000197 WO1998038579A1 (en) 1997-02-27 1998-02-16 Method for reducing the frequency of cache misses in a computer

Publications (2)

Publication Number Publication Date
DE69811159D1 DE69811159D1 (de) 2003-03-13
DE69811159T2 true DE69811159T2 (de) 2003-10-23

Family

ID=26146180

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69811159T Expired - Fee Related DE69811159T2 (de) 1997-02-27 1998-02-16 Verfahren zur verminderung der frequenz von zwischenspeicher-fehlgriffen in einem rechner

Country Status (3)

Country Link
EP (1) EP0896701B1 (de)
JP (1) JP2000509861A (de)
DE (1) DE69811159T2 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016113869A1 (ja) * 2015-01-14 2016-07-21 三菱電機株式会社 キャッシュメモリにおける関数の配置装置

Also Published As

Publication number Publication date
EP0896701B1 (de) 2003-02-05
EP0896701A1 (de) 1999-02-17
JP2000509861A (ja) 2000-08-02
DE69811159D1 (de) 2003-03-13

Similar Documents

Publication Publication Date Title
DE69129919T2 (de) Verfahren zur Kompilierung von Rechnerbefehlen, um Cachespeicherleistung zu verbessern
DE69816044T2 (de) Zeitstrafen-basierende cache-speicherungs- und ersetzungs-techniken
DE69321698T2 (de) Verfahren und System zur verbesserten Genauigkeit der Sprungvorhersage in einem Superskalarprozessor
DE69031991T2 (de) Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen
DE3586635T2 (de) Vorausholungsanordnung fuer einen schnellpufferspeicher.
DE69322064T2 (de) Verfahren und System zur Zuteilung mehrerer Befehle in einem superskalaren Prozessorsystem in einem einzigen Zyklus
DE4225228C2 (de) Vorabrufpuffer und einen derartigen Vorabrufpuffer verwendendes Informationsverarbeitungssystem
DE4222776C2 (de) Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen
DE69623146T2 (de) Verfahren und Vorrichtung zum Koordinieren der Benutzung von physikalischen Registern in einem Mikroprozessor
DE69614779T2 (de) Vorrichtung zum Überschreiben des Cache-Speicherinhalts
DE69634315T2 (de) Verfahren und Gerät zur Verwendung eines Ladebefehls der keinen Fehler verursacht
DE69131472T2 (de) Verfahren zum Vorsehen eines synchronisierten Datencachespeicherbetriebs für Prozessoren in einer parallelen Verarbeitungsanordnung und parallele Verarbeitungsanordnung zur Durchführung des Verfahrens
DE69132018T2 (de) Rechner mit Vorausholungs-Cache-Speicher
DE69229667T2 (de) Simulierte cachespeicher-assoziativität
DE4345028A1 (de) Vorrichtung zur Reduzierung von Verzögerungen aufgrund von Verzweigungen
DE69322244T2 (de) Verfahren und System zur Erhöhung der Systemspeichergleichzeitigkeit eines Multiprozessor-Rechnersystems
DE69128908T2 (de) Verfahren zum Durchführen von erlässlichen Befehlen in einem Rechner
DE19824289A1 (de) Pipelineverarbeitungsmaschine
DE10306051A1 (de) Kernparallele Ausführung mit unterschiedlichen Optimierungscharakteristika, um den dynamischen Ausführungsweg zu verringern
DE10103070B4 (de) Verfahren und Prüfschaltung zum Ermitteln eines Gültigkeitsstatus für einen zeitlich zurückliegenden Loadbefehl
DE69327391T2 (de) Informationssystem und Verfahren zur Pufferspeicherverwaltung
DE69626263T2 (de) System zur Zuteilung mehrerer Befehle ohne Verzweigungsunterbrechung in einem Pipelineprozessor
DE69811159T2 (de) Verfahren zur verminderung der frequenz von zwischenspeicher-fehlgriffen in einem rechner
EP0575413B1 (de) Verfahren zum maschinellen erstellen eines aus mehreren modulen zu bindenden programmes
DE68924557T2 (de) Seitentabellen in einem virtuellen Speicher.

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee