DE10393481T5 - Verfahren und Vorrichtung zum Durchführen einer Cache-Umgehung - Google Patents

Verfahren und Vorrichtung zum Durchführen einer Cache-Umgehung Download PDF

Info

Publication number
DE10393481T5
DE10393481T5 DE10393481T DE10393481T DE10393481T5 DE 10393481 T5 DE10393481 T5 DE 10393481T5 DE 10393481 T DE10393481 T DE 10393481T DE 10393481 T DE10393481 T DE 10393481T DE 10393481 T5 DE10393481 T5 DE 10393481T5
Authority
DE
Germany
Prior art keywords
cache
load
instruction
bypass
load instruction
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.)
Granted
Application number
DE10393481T
Other languages
English (en)
Other versions
DE10393481B4 (de
Inventor
Youfeng Palo Alto Wu
Li-Ling Cupertino Chen
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel 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
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE10393481T5 publication Critical patent/DE10393481T5/de
Application granted granted Critical
Publication of DE10393481B4 publication Critical patent/DE10393481B4/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels

Landscapes

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

Abstract

Verfahren zum Kompilieren eines Software-Programms, um die Verfehlungen eines ersten Cache zu reduzieren, umfassend:
Identifizieren einer Ladeanweisung, die eine erwartete Latenz aufweist, die größer als oder gleich einem vorgegebenen Schwellwert ist;
Fordern, daß die Ladeanweisung zu terminieren ist, daß sie eine vorgegebene Latenz aufweist;
Terminieren des Software-Programms;
Vergleichen einer tatsächlichen Latenz, die mit der Ladeanweisung im terminierten Software-Programm verbunden ist, mit der vorgegebenen Latenz; und
Kennzeichnen der Ladeanweisung für ein Umgehen des ersten Cache, wenn die tatsächliche Latenz größer als oder gleich der vorgegebenen Latenz ist.

Description

  • ERFINDUNGSGEBIET
  • Diese Offenlegung betrifft allgemein Computer und insbesondere Verfahren und eine Vorrichtung zum Management einer Cache-Umgehung.
  • STAND DER TECHNIK
  • Der gewöhnliche Computer weist eine Speicherhierarchie mit wahlfreiem Zugriff einschließlich eines oder mehrerer Ebenen eines Cache-Speichers auf dem Prozessor, eines Hauptspeichers (vom Prozessorchip getrennt angeordnet) und eines Massenspeichergeräts (z. B. ein Festplattenlaufwerk usw.) auf. Gewöhnlich ist der Zugriff auf die erste Ebene des Cache-Speichers (L1-Cache) am schnellsten (d. h., er weist die niedrigste Latenz auf), und der Zugriff auf den Massenspeicher ist am langsamsten. Die mit dem Zugriff auf die mittleren Ebenen der Speicherhierarchie verbundenen Latenzen liegen zwischen diesen beiden Extremen der Speicherzugriff-Latenzen. Zusätzlich zum Anwachsen der Latenzzeit nehmen die verschiedenen Ebenen der Speicherhierarchie gewöhnlich an Größe von der höchsten Ebene der Speicherhierarchie zur niedrigsten Ebene der Speicherhierarchie hin zu.
  • Moderne Hochleistungsprozessoren (z. B. die Intel-ItaniumTM-Prozessorenfamilie und andere EPIC-(Explicitly Parallel Instruction Computing))-Prozessoren) weisen mehrere Ebenen eines Cache-Speichers auf dem Chip auf. Der ItaniumTM-Prozessor zum Beispiel enthält drei Ebenen eines Cache auf dem Chip. Da die Arbeitsfrequenz von zukünftigen Prozessoren außerordentlich hoch ist, ist die erste Ebene des Cache (d. h. der L1-Cache, der hier als "μCache" bezeichnet wird) gewöhnlich klein in der Speichergröße, um ein taktweises Laden aus dem Speichersystem in ein Register eines Hochgeschwindigkeitsprozessors zu unterstützen. Zum Beispiel weist ein μCache gewöhnlich die Kapazität zum Speichern von 1 KByte (Kilobyte) oder weniger Daten auf.
  • Ein geeignetes Management des kleinen und schnellen μCache ist wichtig für die Gesamtleistungsfähigkeit des Host-Prozessors, dem er dient. Insbesondere muß in vielen Fällen eine beträchtliche Anzahl von Ladeanweisungen unverzüglich Daten aus dem Speichersystem abrufen, um die Programmausführung zu befördern, ohne daß eine Pipeline-Blockierung verursacht wird. Für solche Anweisungen ist es vorteilhaft, wenn die Daten, die sie benötigen, im μCache gespeichert sind.
  • In dem typischen Fall weist der Cache-Speicher einen Inklusiv-Charakter auf. Somit werden beim Abrufen von Daten aus einer gegebenen Ebene des Speichersystems (z. B. dem μCache) diese in alle niedrigeren Ebenen des Cache (z. B. in den Cache der Ebene 2 (L2), den Cache der Ebene 3 (L3) usw.) geschrieben. Diese Praxis maximiert die Wahrscheinlichkeit, daß die für eine spätere Anweisung benötigten Daten in der höchsten Ebene des Cache vorliegen, wodurch die Anzahl von Zugriffen auf langsamere Speicherhilfsmittel und die Anzahl von Speicher-Verfehlungen (d. h. eines fehlgeschlagenen Versuchs zum Auslesen von Daten aus einer Cache-Ebene, welche die gewünschten Daten nicht enthält) abnimmt.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist eine schematische Darstellung eines exemplarischen Computers.
  • 2 ist eine schematische Darstellung einer exemplarischen Vorrichtung für das Management der μCache-Umgehung.
  • 3 ist ein Flußdiagramm zum Veranschaulichen eines Programmbeispiels, das die Vorrichtung von 2 verwirklicht.
  • 4 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine Finde_WB_Ladevorgänge, die durch das Programm von 3 aufgerufen wird.
  • 5 ist eine schematische Darstellung eines exemplarischen Steuerungsablaufs.
  • 6 ist eine schematische Darstellung eines weiteren exemplarischen Steuerungsablaufs.
  • 7 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine Finde_FQ_Ladevorgänge_in_Region, die durch das Programm von 3 aufgerufen wird.
  • 8 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine FQ_Identifizieren (Einzelpfad), die durch das Programm von 7 aufgerufen wird.
  • 9 ist eine Veranschaulichung eines exemplarischen Abhängigkeitsgraphen.
  • 10 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine Wähle_Ladevorgänge_aus_Kandidaten, die durch das Programm von 8 aufgerufen wird.
  • 11 ist eine Veranschaulichung eines exemplarischen reduzierten Abhängigkeitsgraphen.
  • 12 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine Finde_LU_Ladevorgänge_in_Region, die durch das Programm von 3 aufgerufen wird.
  • 13 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine Finde_LU_Ladevorgänge_in_Pfad, die durch das Programm von 12 aufgerufen wird.
  • 14 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine Finde_LU_Ladevorgänge, die durch das Programm von 3 aufgerufen wird.
  • AUSFÜHRLICHE BESCHREIBUNG
  • 1 ist ein Blockdiagramm eines exemplarischen Computers 10, der in der Lage ist, die hier offengelegten Vorrichtungen und Verfahren zu verwirklichen. Der Computer 10 kann ein Personal-Digitalassistent (PDA), ein Laptop-Computer, ein Notebook-Computer, ein Desktop-Computer, ein Server, eine Internet-Anwendung oder ein beliebiger anderer Typ einer Rechenvorrichtung sein.
  • Der Computer 10 des Fallbeispiels enthält einen Prozessor 12, der zum Beispiel durch einen oder mehrere Intel®-Mikroprozessoren realisiert ist. In dem dargestellten Beispiel ist der Prozessor 12 ein statisch terminierter In-Order-Prozessor , wie z. B. ein Prozessor aus der Familie der Itanium®-Prozessoren von Intel. Die Architekturen der Prozessoren in der Familie Intel-Itaniumm® werden bevorzugt, weil sie ein Flag im Ladeanweisungsformat unterstützen. Wird das Flag nicht gesetzt, dann greift die Ladeanweisung auf den μCache zu. Anderenfalls umgeht die Ladeanweisung den μCache und greift direkt auf den L2-Cache zu.
  • Wie üblich steht der Prozessor 12 über einen Bus 18 mit einem Hauptspeicher einschließlich eines flüchtigen Speichers 14 und eines nicht-flüchtigen Speichers 16 in Verbindung. Der flüchtige Speicher 14 kann durch einen Synchron-Dynamik-Direktzugriffsspeicher (SDRAM), Dynamik-Direktzugriffsspeicher (DRAM), RAMBUS-Dynamik-Direktzugriffsspeicher (RDRAM) und/oder irgendeinen anderen Typ einer Direktzugriffsspeichervorrichtung realisiert werden. Der nicht-flüchtige Speicher 16 kann durch einen Flash-Speicher oder einen beliebigen anderen gewünschten Typ einer Speichervorrichtung realisiert werden. Der Zugriff auf den Hauptspeicher 14, 16 wird gewöhnlich durch eine (nicht dargestellte) Speichersteuerung in einer herkömmlichen Weise gesteuert.
  • Der exemplarische Computer 10 enthält auch einen herkömmlichen Schnittstellenschaltkreis 20. Der Schnittstellenschaltkreis 20 kann durch einen beliebigen Typ eines wohlbekannten Schnittstellenstandards, wie z. B. eine Ethernet-Schnittstelle und/oder einen universellen seriellen Bus (USB) und/oder eine Input/Output-Schnittstelle der dritten Generation (3GIO) (die auch als PCI-Expreß bezeichnet wird) realisiert werden.
  • An den Schnittstellenschaltkreis 20 sind eine oder mehrere Eingabevorrichtungen 22 angeschlossen. Die Eingabevorrichtung(en) 22 erlaubt(erlauben) dem Benutzer, Daten und Befehle in den Prozessor 12 einzugeben. Die Eingabevorrichtung(en) kann (können) zum Beispiel durch eine Tastatur, eine Maus, einen Berührungsbildschirm, ein Track-Pad, ein Track-Ball, einen Isopoint und/oder ein Spracherkennungssystem realisiert werden.
  • Am Schnittstellenschaltkreis 20 sind auch eine oder mehrere Ausgabevorrichtungen 24 angeschlossen. Die Ausgabevorrichtungen 24 können zum Beispiel durch Anzeigevorrichtungen (z. B. eine Flüssigkristallanzeige, eine Kathodenstrahlröhren(CRT)-Anzeige usw.), einen Drucker und/oder Lautsprecher realisiert werden. Der Schnittstellenschaltkreis 20 enthält somit gewöhnlich eine Graphik-Treiberkarte.
  • Der Schnittstellenschaltkreis 20 enthält auch eine Kommunikationsvorrichtung, wie z. B. ein Modem oder eine Netzschnittstellenkarte, um den Austausch von Daten mit äußeren Computern über ein Netz 26 (z. B. eine Ethernet-Verbindung, eine digitale Abonnentenleitung (DSL), eine Telefonleitung, ein Koaxialkabel, ein Mobilfunk-Telefonsystem usw.) zu ermöglichen.
  • Der Computer 10 enthält auch eine oder mehrere Massenspeichervorrichtungen 28 zum Speichern von Software und Daten. Beispiele für solche Massenspeichervorrichtungen 28 umfassen Diskettenlaufwerke, Festplattenlaufwerke, Compact-Disc-Laufwerke und Digital-Versatile-Disk(DVD)-Laufwerke.
  • Bekanntermaßen ist das Speichersystem des exemplarischen Computers 10 in einer hierarchischen Form angeordnet. Der (die) Prozessor(en) 12 enthalten zum Beispiel drei Ebenen eines systemeigenen Cache-Speichers. Die erste Ebene des Cache ist die höchste Speicherebene, welche die geringste Zugriffszeit aufweist. Die erste Ebene des systemeigenen Cache-Speichers ist auch der kleinste Cache, der hier als μCache bezeichnet wird. Die zusätzlichen Ebenen des Cache nehmen in Größe und Zugriffszeit stufenweise zu. In diesem Beispiel enthält der Prozessor 12 zweite und dritte Ebenen eines Cache auf dem Chip (d. h. L2- und L3-Cache) auf. Der Computer 10 enthält auch einen Cache vierter Ebene (L4), der auf demselben Chip wie der Prozessor 12 angeordnet sein oder seinen eigenen Chip aufweisen kann. Der L4-Cache ist größer und langsamer abrufbar als der μCache, der L2-Cache und der L3-Cache. Zum Beispiel kann der L4-Cache durch einen SRAM realisiert werden. Eine fünfte Ebene des Cache (Hauptspeicher) ist größer als der L4-Cache und weist langsamere Zugriffszeiten als dieser auf. Der Hauptspeicher kann zum Beispiel durch einen DRAM realisiert werden. In dem Beispiel von 1 werden der L4-Cache und der Hauptspeicher durch den Direktzugriffsspeicher 14 gebildet.
  • Zum Ausführen von Programmanweisungen veranlaßt der Prozessor 12 gewöhnlich das Laden beliebiger benötigter Daten aus einer Massenspeichervorrichtung in den Cache. Wenn die Daten in eine gegebene Ebene des Cache geladen werden, werden sie üblicherweise in alle niedrigeren Ebenen des Cache geschrieben, um die Wahrscheinlichkeit zu erhöhen, daß eine bestimmte Ebene die Daten bereithält, sollten sie in der Zukunft wieder benötigt werden. Dieses Redundanz- oder Inklusivmerkmal reduziert gewöhnlich die Anzahl von Zugriffen auf die Massenspeichervorrichtung 28, die üblicherweise die langsamste Zugriffszeit von einem beliebigen Teil des Speichers aufweist.
  • Wenn ein Prozessor 12 eine Anweisung ausführen muß, dann werden alle von der Anweisung benötigten Daten aus dem Cache (falls sie vorliegen) oder der Massenspeichervorrichtung 28 (falls sie im Cache nicht vorliegen) in ein oder mehrere Register im Prozessor 12 geladen, wo sie dann bearbeitet werden, wie durch die Anweisung vorgeschrieben ist.
  • In dieser Patentschrift wird durchgängig die Latenz des μCache mit T1, die Latenz des L2-Cache mit T2, die Latenz des L3-Cache mit T3 usw. bezeichnet. Beispielhafte Treffer-Latenzen (d.h., wenn die angeforderten Daten in dem entsprechenden Cache vorliegen) sind T1 = 1 Takt, T2 = 3 Takte und T3 = 10 Takte. In dieser Patentschrift bezeichnet eine Ladeanweisung durchgängig eine Ganzzahl-Ladeanweisung. Speicheroperationen und Gleitkomma-Ladevorgänge greifen direkt auf den L2-Cache zu (d. h., umgehen immer den μCache), da die Speicheroperationen gewöhnlich nicht zeitkritisch sind und Gleitkomma-Ladevorgänge immer Latenzen größer als T1 mit sich bringen. Wegen seiner geringen Größe sollte der μCache nur Daten speichern, welche durch die Caches niedrigerer Ebene (z. B. den L2-Cache-Hauptspeicher) nicht rechtzeitig zur Verfügung gestellt werden können. Mit anderen Worten, wenn die Daten, auf die durch eine gegebene Ladeanweisung zugegriffen wird, nicht in den nächsten T2 Takten verwendet werden, sollten sie unmittelbar aus dem L2-Cache abgerufen werden. Diese Faustregel verringert den Druck auf den μCache, so daß mehr zeitkritische Daten darin gespeichert werden können.
  • Außerdem sollte selbst bei einer sofortigen Verwendung eines geladenen Ergebnisses durch eine Verwendungsanweisung dann, wenn die zugehörige Initial-Ladeanweisung auf den μCache fehlschlägt (d. h., wenn die geladenen Daten nicht im μCache sind) und keine späteren Ladeanweisungen auf die geladene Cache-Leitung zugreifen, die Initial-Ladeanweisung den μCache umgehen und direkt auf den L2-Cache zugreifen. Der unmittelbare Zugriff auf den L2-Cache stellt sicher, daß die abgerufenen Daten nicht in den μCache geschrieben werden. Das Umgehen des μCache ist angebracht, weil die Initial-Ladeanweisung auf den L2-Cache zugreifen muß, um die Daten (d. h. die Daten, die anfänglich nicht im μCache vorliegen) zu erreichen und es keine Vorabholungseffekte gibt, die mit einem Abrufen der Daten zum μCache verbunden sind, so daß es nicht erwünscht ist, den μCache mit diesen Daten zu belasten. Ladevorgänge, die diese Merkmale aufweisen, werden hier als Verfehlungs-Umgehungs(VU)-Ladevorgänge bezeichnet.
  • Ferner sollten auch fortschreitende Ladeanweisungen, die bestimmte Merkmale aufweisen, den μCache umgehen. Eine fortschreitende Ladeanweisung ist eine Ladeanweisung, die in einer Schleife angeordnet ist, welche einen dominanten Schritt aufweist. Der Schritt für die Ladeanweisung ist die Differenz zwischen zwei aufeinanderfolgenden Datenadressen, welche durch die fortschreitende Ladeanweisung ausgegeben werden. Wenn der Durchlaufzählwert durch die Schleife und/oder die dominante Schrittgröße hinreichend groß im Vergleich zur Größe des μCache ist, sprengt die fortschreitende Ladeanweisung den μCache, wenn sie den μCache nicht umgeht. Demzufolge sollten diese fortschreitenden Ladeanweisungen gekennzeichnet werden, daß sie den μCache umgehen.
  • In 2 ist eine exemplarische Vorrichtung 40 zum Durchführen der μCache-Umgehung dargestellt, um die Verfehlungen des μCache zu reduzieren, wenn ein Software-Programm ausgeführt wird. Wie in 2 dargestellt ist, wirkt die exemplarische Vorrichtung 40 auf ein durchzuführendes Software-Programm ein, das aktuell zumindest teilweise in einem gewissen Teilbereich des Speichers 14 gespeichert ist.
  • Zum Zwecke der Identifizierung der Kandidaten-Ladeanweisungen im Software-Programm für ein mögliches Umgehen des μCache wird die Vorrichtung 40 mit einem Kandidaten-Ladeidentifikator 42 versehen. Der Kandidaten-Ladeidentifikator 42 durchsucht die Software nach Kandidaten-Ladeanweisungen, bevor die Software durch den Compiler terminiert wird. Der Kandidaten-Ladeidentifikator 42 identifiziert Ladeanweisungen, die (1) eine erwartete Latenz größer als oder gleich einem ersten vorgegebenen Schwellwert (z. B.
    Figure 00070001
    T2 Takte) und (2) eine Umgehungswahrscheinlichkeit größer als oder gleich einem zweiten vorgegebenen Schwellwert aufweisen, als Kandidaten-Ladeanweisungen. Der Kandidaten-Ladeidentifikator 42 bestimmt die erwartete Latenz einer gegebenen Ladeanweisung durch Bestimmen eines Freiraums der gegebenen Ladeanweisung im Abhängigkeitsgraphen. Wenn zum Beispiel die Subjekt-Ladeanweisung bereits im Takt 1 und die zugeordnete Verwendungsanweisung erst im Takt 10 ausgeführt werden könnte, dann beträgt der Freiraum 10 Takte. Da die Anweisungen, die durch den Kandidaten-Ladeidentifikator 42 überprüft werden, noch nicht durchterminiert sind, sind sie noch nicht mit absoluten Terminierungstakten verbunden. Statt dessen weisen diese Anweisungen das Potential auf, in der Ausführungsabfolge vorwärts und rückwärts mit Bezug auf die anderen Anweisungen verschoben zu werden. Der "Freiraum" einer gegebenen Ladeanweisung besteht somit in den potentiellen Zeitdifferenzen, die möglicherweise zwischen der gegebenen Ladeanweisung und der Verwendungsanweisung, welche die geladenen Daten benötigt, terminiert werden können.
  • Die dargestellte Vorrichtung 40 ist auch mit einer Ablaufsteuerung 44 versehen. Die Ablaufsteuerung 44 arbeitet wie eine herkömmliche Ablaufsteuerung 44 in einem herkömmlichen Compiler mit einer Abwandlung. Insbesondere versucht die Ablaufsteuerung 44 von 2 den Ablauf der Kandidaten-Ladeanweisungen (d. h. der Ladeanweisungen, die durch den Kandidaten-Ladeidentifikator 42 identifiziert wurden) so zu terminieren, daß sie eine Latenz größer als oder gleich einem vorgegebenen Schwellwert aufweisen. In diesem Beispiel ist der vorgegebene Schwellwert, der durch die Ablaufsteuerung 44 verwendet wird, gleich T2, der Latenz des L2-Cache. Während die Ablaufsteuerung 44 diesen Wert aufgreift, können andere Beschränkungen dazu führen, daß nicht alle Kandidaten-Ladeanweisungen die gewünschte Latenz aufweisen. Tatsächlich ist es möglich, daß alle, keine oder einige der Kandidaten-Ladeanweisungen so terminiert werden.
  • Zum Zwecke der Kennzeichnung von Ladeanweisungen für ein Umgehen des μCache ist die Vorrichtung 40 von 2 außerdem mit einem Final-Ladeidentifikator 46 ausgestattet. Der Final-Ladeidentifikator 46 bearbeitet den von der Ablaufsteuerung 44 terminierten Code, um Final-Ladeanweisungen zu identifizieren. Der Final-Ladeidentifikator 46 identifiziert die Ladeanweisungen, die (1) eine tatsächliche (d. h. terminierte) Latenz größer als oder gleich einem ersten vorgegebenen Schwellwert (z. B.
    Figure 00080001
    T2) und (2) eine Umgehungswahrscheinlichkeit größer als oder gleich einem zweiten vorgegebenen Schwellwert aufweisen, als Final-Ladeanweisungen. Der Final-Ladeidentifikator 46 bestimmt die tatsächliche Latenz einer gegebenen Ladeanweisung durch Bestimmen einer Zeitdifferenz zwischen der Zeit, zu der die Ausführung einer Ladeanweisung terminiert ist, und der Zeit, zu der die Ausführung einer Verwendungsanweisung, die mit den Daten arbeitet, welche durch diese Ladeanweisung geladen wurden, terminiert ist. Der Final-Ladeidentifikator 46 kennzeichnet Ladeanweisungen, den μCache zu umgehen, indem er in Ausführungen, die das Setzen eines solchen Flags unterstützen (d. h. Ausführungen, die einen Prozessor der Itanium®-Familie verwenden), ein Flag in jede dieser Ladeanweisungen setzt.
  • Zur Objektcodeerzeugung aus dem terminierten Software-Programm ist die Vorrichtung 40 von 2 außerdem mit einem Objektcodeerzeuger 48 ausgestattet. Der Objektcodeerzeuger 48 ist als ein herkömmlicher Compiler realisiert und arbeitet auf die herkömmliche Weise.
  • Um zu kennzeichnen, daß die fortschreitenden Ladeanweisungen den μCache zu umgehen haben, ist die Vorrichtung 40 von 2 außerdem mit einem Fortschreitend-Ladeidentifikator 50 ausgestattet. Der Fortschreitend-Ladeidentifikator 50 kennzeichnet einen fortschreitenden Ladevorgang als den μCache umgehend, wenn: (1) die fortschreitende Ladeanweisung in einer Schleife angeordnet ist und (2) die fortschreitende Ladeanweisung mehr als einen vorgegebenen Umfang des μCache verwendet, wenn die Schleife ausgeführt wird. Der Fortschreitend-Ladeidentifikator 50 legt fest, ob die fortschreitende Ladeanweisung beim Ausführen der Schleife mehr als den vorgegebenen Umfang des μCache verwendet, durch: (1) Bestimmen einer Anzahl von Durchläufen durch die Schleife, in der die fortschreitende Ladeanweisung ausgeführt wird; (2) Multiplizieren der Anzahl von Durchläufen mit einem der fortschreitenden Ladeanweisung zugeordneten Schritt, um einen Schrittgrößenwert abzuleiten; (3) Dividieren des Schrittgrößenwertes durch einen Wert, der repräsentativ für eine Größe des μCache ist, um einen Speichernutzungsprozentanteil abzuleiten; und (4) Vergleichen des Speichernutzungsprozentanteils mit dem vorgegebenen Umfang des μCache. In dem veranschaulichten Beispiel wirkt der Fortschreitend-Ladeidentifikator 50 vor dem Kandidaten-Ladeidentifikator 42 auf die Software ein, um dadurch potentiell den Umfang des Codes, der eine Analyse durch den Kandidaten-Ladeidentifikator 42 und den Final-Ladeidentifikator 46 erfordert, zu verringern, während die Aufgabe der Ablaufsteuerung 44 vereinfacht wird.
  • Wie in 2 dargestellt ist, ist die Vorrichtung 40 auch mit einem Verfehlungs-Umgehungs-Ladeidentifikator 52 versehen. Der Verfehlungs-Umgehungs-Ladeidentifikator 52 funktioniert nach dem Erarbeiten bestimmter Profildaten über ein ein- oder mehrmaliges Ausführen des Objektcodes unter der Annahme, daß die Ladevorgänge, die durch den Final-Ladeidentifikator 46 identifiziert wurden, den μCache umgehen. Der Verfehlungs-Umgehungs-Ladeidentifikator 52 identifiziert Ladeanweisungen, welche den μCache verfehlen und wobei die durch die Ladeanweisungen geladene Cache-Leitung nicht wiederverwendet wird. Für jede Ladeanweisung aus der vorhergehenden Identifizierungsphase, die den μCache nicht umgeht, dividiert der Verfehlungs-Umgehungs-Ladeidentifikator 52 (a) eine Zahl, wie oft die Ladeanweisung den μCache verfehlt, ohne daß die durch die Ladeanweisung geladene Cache-Leitung wiederverwendet wird, durch (b) eine Zahl, wie oft eine Ladeanweisung ausgeführt wird, um einen Verhältniswert zu erhalten. Ist der Verhältniswert größer als oder gleich einem vorgegebenen Verhältnis-Schwellwert, dann kennzeichnet der Verfehlungs-Umgehungs-Ladeidentifikator 52 die Ladeanweisung für ein Umgehen des μCache.
  • Sobald der Verfehlungs-Umgehungs-Ladeidentifikator 52 den gesamten Code analysiert hat, bearbeitet der Objektcodeerzeuger 48 den Programm- oder Zwischencode, der durch den Final-Ladeidentifikator 46, den Fortschreitend-Ladeidentifikator 50, die Ablaufsteuerung 44 und den Verfehlungs-Umgehungs-Ladeidentifikator 52 modifiziert wurde, um einen Objektcode zu erzeugen, der die Ladeanweisungen einschließt, die für ein Umgehen des μCache gekennzeichnet wurden. Das vollendet den Kompilierungsvorgang des Quellcodes in den Objektcode für das Management der μCache-Umgehung, um die Anzahl der Verfehlungen des μCache zu verringern.
  • Wie oben erläutert wurde, verwendet die dargestellte Vorrichtung 40 eine Anzahl von Kompilierungsverfahren, wie z. B. die Abhängigkeitsanalyse und das Profiling, um Ladevorgänge zu identifizieren, die den μCache umgehen und direkt auf den L2-Cache zugreifen sollten. Somit ist die exemplarische Vorrichtung 40 ein Compiler, der einen Zwischencode bearbeitet, um einen Objektcode zu erzeugen, der von einem effizienteren Einsatz des μCache und somit wenigeren μCache-Verfehlungen profitiert.
  • Ein exemplarisches Software-Programm zum Realisieren der Vorrichtung von 2 ist in den 314 dargestellt. In diesem Beispiel ist das Programm durch den Prozessor 12 auszuführen, und es ist in der Software enthalten, die auf einem dinghaften Medium, wie z. B. einer CD-ROM, einer Diskette, einem Festplattenlaufwerk, einem Digital-Versatile-Disk (DVD), oder einem mit dem Prozessor 12 verbundenen Speicher gespeichert ist, aber Durchschnittsfachleute werden leicht einsehen, daß das gesamte Programm oder Teile davon alternativ durch eine andere Vorrichtung als der Prozessor 12 ausgeführt werden und/oder in wohlbekannter Weise in Firmware und/oder zweckbestimmter Hardware enthalten sein könnten. Zum Beispiel könnten irgendeiner oder alle von den Kandidaten-Ladeidentifikatoren 42, Ablaufsteuerungen 44, Final- Ladeidentifikatoren 46, Objektcodeerzeugern 48, Fortschreitend-Ladeidentifikatoren 50 und/oder isolierten Ladeidentifikatoren 52 durch Software, Hardware und/oder Firmware realisiert werden. Außerdem werden Durchschnittsfachleute leicht einsehen, daß viele andere Verfahren zur Realisierung der Vorrichtung 40 von 2 alternativ verwendet werden können, obwohl das exemplarische Programm mit Bezug auf die in den 314 dargestellten Flußdiagramme beschrieben ist. Zum Beispiel kann die Ausführungsreihenfolge der Blöcke verändert werden, und/oder die beschriebenen Blöcke können verändert, entfernt oder kombiniert werden.
  • Mit Bezug auf 3 startet die Vorrichtung 40 einen ersten Kompilierungsdurchlauf (Block 100) durch Löschen der Gruppe Final_Umgehungs_Ladevorgänge zu einer Leermenge (Block 102). Dann wird der Fortschreitend-Ladeidentifikator 50 aktiviert (Block 104), um die fortschreitenden Ladeanweisungen für das Umgehen des μCache zu kennzeichnen (Block 104). Wie in 4 dargestellt ist, löscht insbesondere der Fortschreitend-Ladeidentifikator 50 zuerst die Gruppe WB-Ladevorgänge zu einer Leermenge (Block 110). Dann beginnt der Fortschreitend-Ladeidentifikator 50 mit der Durchsicht des Subjektprogramms, um Ladeanweisungen zu identifizieren. Liegen im Programm keine Ladeanweisungen vor (Block 112), dann gibt der Fortschreitend-Ladeidentifikator 50 die WB-Ladevorgänge als eine Leermenge zurück, und die Steuerung kehrt zum Block 130 (3) zurück.
  • Unter der Annahme, daß das bearbeitete Programm eine Ladeanweisung enthält (Block 112), ruft der Fortschreitend-Ladeidentifikator 50 die überprüfte Ladeanweisung auf (Block 114), um festzustellen, ob sie in einer Schleife liegt (Block 116). Liegt die Ladeanweisung nicht in einer Schleife (Block 116), dann setzt der Fortschreitend-Ladeidentifikator 50 die Durchsuchung des Programms nach der nächsten Ladeanweisung fort. Liegen keine weiteren Ladeanweisungen vor (Block 118), dann kehrt die Steuerung zum Block 130 von 3 zurück. Liegen weitere Ladeanweisungen vor, dann setzt die Steuerung das Durchlaufen der Schleife durch die Blocks 114118 fort, bis es keine weiteren Ladeanweisungen mehr gibt (Block 118) oder bis eine in einer Schleife liegende Ladeanweisung identifiziert ist (Block 116).
  • Wird eine in einer Schleife liegende Ladeanweisung identifiziert (Block 116), dann bestimmt der Fortschreitend-Ladeidentifikator 50, ob die Ladeanweisung fortschreitend ist (Block 120). Eine Ladeanweisung ist fortschreitend, wenn sie einen dominanten Schritt aufweist. Ein dominanter Schritt ist ein Schritt, der weit häufiger auftritt als andere Schritte. Ein Schritt für eine Ladeanweisung ist die Differenz zwischen zwei aufeinanderfolgenden Adressen, die durch die Ladeanweisung ausgegeben werden. Ist die Ladeanweisung nicht fortschreitend (Block 120), dann setzt der Fortschreitend-Ladeidentifikator 50 die Suche nach fortschreitenden Ladeanweisungen fort (Blöcke 114120) oder springt heraus, wenn die letzte Ladeanweisung untersucht worden ist (Block 118).
  • Ist die Ladeanweisung fortschreitend (Block 120), dann stellt der Fortschreitend-Ladeidentifikator 50 fest, ob die fortschreitende Ladeanweisung mehr als einen vorgegebenen Umfang des μCache verwendet, wenn die Schleife ausgeführt wird. Insbesondere berechnet der Fortschreitend-Ladeidentifikator 50 einen Schrittgrößenwert (SGW) durch Multiplizieren der Anzahl der Durchläufe, welche die Software durch die Schleife hindurch, in der die Ladeanweisung liegt, vornimmt (d. h. der Durchlaufzahl), mit dem dominanten Schritt der Ladeanweisung (Block 122). Der Fortschreitend-Ladeidentifikator 50 dividiert dann den Schrittgrößenwert (SGW) durch die Größe des μCache und vergleicht das Ergebnis mit einem vorgegebenen Schwellwert (z. B. einem Faktor 5 oder größer) (Block 124). Wenn der Schrittgrößenwert (SGW) über dem Schwellwert liegt (Block 124), dann identifiziert der Fortschreitend-Ladeidentifikator 50 die Ladeanweisung als einen Ladevorgang, der den μCache umgehen sollte, indem er ihn zur Gruppe WB_Ladevorgänge hinzufügt (Block 126). Die Steuerung kehrt dann zum Block 118 zurück. Liegt der Schrittgrößenwert (SGW) nicht über dem Schwellwert (Block 124), dann kehrt die Steuerung zum Block 118 zurück, ohne den Ladevorgang zur Gruppe WB_Ladevorgänge hinzuzufügen.
  • Die Steuerung setzt den Schleifendurchlauf durch die Blöcke 114126 fort, bis jede Ladeanweisung analysiert ist, um zu sehen, ob sie eine fortschreitende Ladeanweisung ist, die den μCache umgehen sollte. Ist dieser Einsatz beendet ist (Block 118), dann kehrt die Steuerung zum Block 130 von 3 zurück.
  • Beim Block 130 fügt der Final-Ladeidentifikator 46 die Gruppe von fortschreitenden Ladeanweisungen {WB_Ladevorgänge} zur Gruppe der finalen Umgehungs-Ladevorgänge {Final_Umgehungs_Ladevorgänge} hinzu.
  • Wie Durchschnittsfachleute anerkennen werden, weisen einige Programmabschnitte nur einen einzigen Ausführungspfad auf, während andere Parallelpfade aufweisen, die nach einer oder mehreren Entscheidungen, die unmittelbar den Steuerungsablauf durch den Abschnitt verzweigen, beschritten werden. In dieser Patentschrift wird ein Abschnitt eines Software-Programms, der einen oder mehrere Steuerungsablaufpfade, einen oder mehrere Exitpunkte und einen einzigen Eingangspunkt aufweist, als eine "Region" bezeichnet. Ein Abschnitt eines Programms, das nur einen Steuerungsablaufpfad zwischen einem einzigen Eingangspunkt und einem einzigen Exitpunkt aufweist, wird als ein "Pfad" bezeichnet. Eine Region kann einen oder mehrere Pfade enthalten.
  • Nach dem Block 130 beginnt die Vorrichtung 40 vom Start des Programms an, das Software-Programm hinsichtlich Kandidaten-Ladeanweisungen zu untersuchen, die eine Latenz größer als oder gleich einem vorgegebenen Schwellwert aufweisen. Compiler vom Stand der Technik nehmen gewöhnlich an, daß ein Ladevorgang den μCache trifft und terminieren den Ladevorgang mit einer Latenz T1. Weist der Ladevorgang einen Terminierungsfreiraum von T2 Takten auf, dann kann der Ladevorgang mit einer Latenz von T2 Takten terminiert werden, ohne die kritische Pfadlänge zu beeinträchtigen. (Ein Ladevorgang, der einen solchen Terminierungsfreiraum aufweist, wird hier als ein "freiraumqualifizierter Ladevorgang" oder ein "Kandidaten-Umgehungsladevorgang" bezeichnet.) Nicht jeder Ladevorgang mit einem Terminierungsfreiraum T2 ist ein freiraumqualifizierter Ladevorgang. Wird ein Ladevorgang mit einem ausreichenden Freiraum als ein freiraumqualifizierter Ladevorgang identifiziert und wird seine Latenz vergrößert, dann können die Freiräume der anderen Ladevorgänge beeinträchtigt werden (z. B. kann ein Ladevorgang, der ursprünglich einen Freiraum von T2 Takten aufwies, keinen Freiraum von T2 Takten mehr aufweisen, wenn einem anderen freiraumqualifizierten Ladevorgang ein Freiraum von T2 Zyklen zugewiesen wurde). In Abhängigkeit von der Reihenfolge, in der die freiraumqualifizierten Ladevorgänge identifiziert werden, können unterschiedliche Identifizierungsreihenfolgen unterschiedliche Gruppen von freiraumqualifizierten Ladevorgängen zur Folge haben. Somit hat die Vorrichtung 40 die folgenden Zielstellungen: (1) Maximieren der Anzahl von Freiraum-Umgehungs-Ladevorgängen (gewichtet durch ihre Ausführungsfrequenzen); (2) und Minimieren des Anwachsens der gesamten Ablauflänge.
  • Wie in 3 dargestellt ist, wird im Block 236 die Routine Finde_FQ_Ladevorgänge_in_Region aufgerufen. Liegt ein Ladevorgang auf Parallel-Steuerungsablaufpfaden einer Terminierungsregion, dann wird zuerst bestimmt, ob er ein freiraumqualifizierter Ladevorgang für individuelle Pfade sein könnte, und dann werden die Informationen aus allen Pfaden kombiniert, um zu bestimmen, ob der Ladevorgang ein freiraumqualifizierter Ladevorgang für die Region sein könnte. Um das zu tun, wird ein Parameter FQ_PROB als ein Wert zwischen 0 und 1 definiert. Ein Ladevorgang ist dann und nur dann ein freiraumqualifizierter Ladevorgang für eine Region, wenn er auf einem Anteil FQ_PROB der Pfade, gewichtet durch die Pfadfrequenzen, umgangen werden kann. Genauer gesagt, die Region-Umgehungswahrscheinlichkeit (RUW) soll das Verhältnis der Gesamtfrequenz der Pfade, auf denen der Ladevorgang umgangen werden kann, zur Region-Eingangswahrscheinlichkeit sein. Ein Ladevorgang ist für eine gegebene Region dann und nur dann ein freiraumqualifizierter Ladevorgang, wenn RUW(Ladevorgang) > FQ_PROB.
  • Es gibt zwei weitere Fälle, wo ein Ladevorgang eine kleine RUW aufweisen und somit nicht umgangen werden kann. Der erste Fall ist in 5 dargestellt. Der Ladevorgang und seine Verwendungen liegen auf demselben Pfad in der dargestellten Region, aber die Frequenz ist niedrig im Vergleich zur Regionsfrequenz. In diesem Fall ist es unwahrscheinlich, daß die Anweisungs-Ablaufsteuerung 44 den Ladevorgang aus dem Niederfrequenzblock b3 in den Hochfrequenzblock b1 oder die Verwendung vom Block b3 nach b4 verschiebt, selbst wenn es einen Terminierungsfreiraum für den Ladevorgang und die Verwendung gibt. Der zweite Fall ist in 6 dargestellt. Der Ladevorgang wird in Parallel-Pfaden verwendet, ein Freiraum liegt jedoch nur bei dem selten durchlaufenen Pfad vor. In diesem Falle sollte der Ladevorgang nicht als ein freiraumqualifizierter Ladevorgang für die Region identifiziert werden, weil sonst die Ausführung des Ladevorganges auf dem häufiger durchlaufenen Pfad, in dem der Ladevorgang nicht umgangen werden sollte, benachteiligt würde.
  • Mit Bezug auf 7 startet die Routine Finde_FQ_Ladevorgänge_in_Region, wenn der Kandidaten-Ladeidentifikator 42 die Gruppe FQ_Ladevorgänge_Region zu einer Leermenge löscht (Block 240). Der Kandidaten-Ladeidentifikator 42 setzt dann die Regions-Frequenzvariable gleich der Frequenzvariablen, mit welcher der Eingangsblock der Region ausgeführt wird (Block 242). Für jede der Ladeanweisungen in der Region setzt dann der Kandidaten-Ladeidentifikator 42 eine zugehörige Umgehungs_Frequenz des Ladevorganges gleich Null (Block 244).
  • Der Kandidaten-Ladeidentifikator 42 wählt als nächstes einen der Pfade in der Region zur Analyse aus (Block 246). Er ruft dann die Routine FQ_Identifizieren (Einzelpfad) auf (Block 248). Die Routine FQ_Identifizieren (Einzelpfad) bildet dann eine Gruppe von Kandidaten-Ladevorgängen, die einen Freiraum über einem bestimmten Schwellwert aufweisen. Diese Kandidaten-Ladevorgänge werden durch die Routine FQ_Identifizieren (Einzelpfad) der Gruppe FQ_Ladevorgänge zurückgegeben.
  • Mit Bezug auf 8 startet die Routine FQ-Identifizieren (Einzelpfad), wenn der Kandidaten-Ladeidentifikator 42 die Gruppe FQ-Ladevorgänge zu einer Leermenge löscht (Block 140), und setzt einen Schwellwert (T) für T2 ein (d. h. die Latenz des L2-Cache) (Block 142). Der Kandidaten-Ladeidentifikator 42 erzeugt dann einen Abhängigkeitsgraphen für den gerade analysierten Steuerungsablaufgraph-Pfad (Block 144). Ein exemplarischer Abhängigkeitsgraph ist in 9 dargestellt. In diesem Beispiel stellt jeder Kreis eine Anweisung dar. Numerierte Anweisungen sind zum Beispiel Verwendungsanweisungen (d. h. eine Anweisung, die Daten bearbeitet, welche zuvor in den Cache geladen wurden, wie z. B. eine Additionsanweisung). Anweisungen, die durch "Ld" gefolgt von einer Bezugsziffer gekennzeichnet sind, sind Ladeanweisungen. Eine Linie, die zwei Anweisungen verbindet, stellt eine Abhängigkeit der unteren Anweisung von der höher positionierten Anweisung im dem Graph dar. Zum Beispiel hängt in 9 die Anweisung 2 von der Anweisung 1 ab und kann somit nicht ausgeführt werden, bis die Anweisung 1 ausgeführt ist. Ist der Abhängigkeitsgraph einmal konstruiert, dann wird die Gruppe "Gesamtheit" definiert, die jede Ladeanweisung im Pfad (d. h. Ld1, Ld2, Ld3, Ld4 und Ld5) einschließt (Block 144).
  • Beim Block 146 bestimmt der Kandidaten-Ladeidentifikator 42, ob die Gesamtheit-Gruppe irgendwelche Glieder aufweist. Wenn nicht (Block 146), dann bricht die Routine FQ_Identifizieren (Einzelpfad) ab, und die Steuerung kehrt zum Block 250 von 7 zurück. Hat die Gesamtheit-Gruppe mindestens ein Glied (Block 146), dann löscht der Ladeidentifikator 42 die Gruppe Mögliche_Ladevorgänge zu einer Leermenge (Block 148).
  • Der Kandidaten-Ladeidentifikator 42 ruft einen Ladevorgang aus der Gesamtheit-Gruppe (z. B. Ld1) auf (Block 150) und berechnet den Freiraum dieses Ladevorganges (Block 152). Der Freiraum wird als die Differenz zwischen dem spätesten und dem frühesten Takt des Ladevorganges im Abhängigkeitsgraphen berechnet. Ist der Freiraum einmal berechnet (Block 152), dann vergleicht der Kandidaten-Ladeidentifikator 42 den Freiraum mit dem Schwellwert T (Block 154). Ist der Freiraum größer als oder gleich dem Schwellwert T (Block 154), dann wird der Ladevorgang (z. B. Ld1) zur Gruppe Mögliche_Ladevorgänge hinzugefügt (Block 156). Ist der Freiraum kleiner als der Schwellwert T (Block 154), dann ist der Ladevorgang (z. B. Ld1) kein möglicher Kandidaten-Ladevorgang und wird somit nicht zur Gruppe Mögliche-Ladevorgänge hinzugefügt. Nach dem Bestimmen, ob der Ladevorgang, der gerade analysiert wird (z. B. Ld1), einen ausreichenden Freiraum aufweist, um ein möglicher Kandidaten-Ladevorgang zu sein (Block 154), bestimmt der Kandidaten-Ladeidentifikator 42, ob es andere Ladeanweisungen im Abhängigkeitsgraphen gibt (Block 158). Gibt es dort andere Ladevorgänge, dann kehrt die Steuerung zum Block 150 zurück, wo die Analyse des Freiraums der nächsten Ladeanweisung beginnt. Anderenfalls, wenn die letzte Ladeanweisung analysiert worden ist (Block 158), fährt die Steuerung am Block 160 fort.
  • Beim Block 160 bestimmt der Kandidaten-Ladeidentifikator 42, ob die Gruppe Mögliche_Ladevorgänge irgendwelche Glieder aufweist. Weist sie keinerlei Glieder auf (Block 160), dann fährt die Steuerung am Block 172 fort, wo der Schwellwert T zum Beispiel um 1 Takt herabgesetzt wird. Der Kandidaten-Ladeidentifikator 42 bestimmt dann, ob der Schwellwert T unter einen vorgegebenen Minimalwert gefallen ist (Block 174). Wenn das so ist, dann bricht die Routine FQ_Identifizieren (Einzelpfad) ab, und die Steuerung kehrt zum Block 250 von 7 zurück. Anderenfalls kehrt die Steuerung zum Block 146 zurück. Wie Durchschnittsfachleute anerkennen werden, erhöht ein Herabsetzen des Schwellwertes T potentiell die Anzahl der Ladeanweisungen, die als mögliche Kandidaten-Ladevorgänge identifiziert werden können, weil ein geringerer Freiraum erforderlich ist, um so gekennzeichnet zu werden (siehe Block 154). Ein Einbringen von mehr Ladeanweisungen in die Gruppe der möglichen Kandidaten durch Herabsetzen des Schwellwertes kann die Terminierungslänge des Programms vergrößern. Ein Eintauschen von Terminierungslänge für Leistungsfähigkeit des Cache kann jedoch die Gesamtleistungsfähigkeit des Programms verbessern.
  • Zu Block 160 zurückkehrend wählt der Kandidaten-Ladeidentifikator 42 unter der Annahme, daß die Gruppe Mögliche_Ladevorgänge nicht leer ist, einen Ladevorgang aus der Gruppe der möglichen Kandidaten (d. h. der Gruppe Mögliche_Ladevorgänge) aus (Block 162). Die optimale Lösung für eine Auswahl zwischen den möglichen Kandidaten-Ladevorgängen scheint schwierig zu sein. Je weniger Abhängigkeiten jedoch ein möglicher Kandidaten-Ladevorgang bezüglich der anderen Kandidaten-Ladevorgänge aufweist, desto weniger mögliche Kandidaten-Ladevorgänge werden durch ein Anwachsen der Latenz des Kandidaten-Ladevorganges beeinträchtigt. Weist somit ein möglicher Kandidaten-Ladevorgang keine Abhängigkeit von einem anderen Kandidaten-Ladevorgang auf, dann kann er immer als ein Kandidaten-Ladevorgang ausgewählt werden. Unter Beachtung dieser Prinzipien wählt der Kandidaten-Ladeidentifikator 42 einen Ladevorgang aus den möglichen Kandidaten-Ladevorgängen aus, wie es in 10 dargestellt ist.
  • Mit Bezug auf 10 beginnt der Kandidaten-Ladeidentifikator 42 den Prozeß zur Auswahl eines Ladevorganges aus den möglichen Kandidaten durch Aufstellen eines reduzierten Abhängigkeitsgraphen, wobei nur Ladeanweisungen aus der Gruppe Mögliche Kandidaten verwendet werden (Block 180). In 11 ist ein exemplarischer reduzierter Abhängigkeitsgraph dargestellt, der auf dem Beispiel von 9 basiert. Im Beispiel von 11 wird angenommen, daß die Ladeanweisungen Ld1–Ld4 (siehe 9) in der Gruppe Mögliche Kandidaten liegen und daß die Ladeanweisung Ld5 (siehe 9) einen unzureichenden Freiraum aufweist, um in diese Gruppe eingeschlossen zu werden. Sobald der reduzierte Abhängigkeitsgraph konstruiert ist (Block 180), wählt der Kandidaten-Ladeidentifikator 42 eine Ladeanweisung mit den wenigsten Abhängigkeitsflanken aus dem Graphen aus, wobei ein herkömmlicher Sortieralgorithmus (Block 182) verwendet wird. In dem Beispiel von 11 weist jede Ladeanweisung Ld1 und Ld4 eine Abhängigkeitsflanke auf, wohingegen jede Ladeanweisung Ld2 und Ld3 ohne Abhängigkeitsflanke ist. Deshalb wird der Kandidaten-Ladeidentifikator 42 eine der Ladeanweisungen Ld2 und Ld3 auswählen. Kommt es vor, daß zwei oder mehrere Ladeanweisungen die gleiche Zahl von Abhängigkeitsflanken aufweisen, dann ist die Auswahl zwischen diesen Anweisungen willkürlich.
  • Zur 8 zurückkehrend fügt der Kandidaten-Ladeidentifikator 42 die Ladeanweisung (z. B. Ld2) die aus der Gruppe der Möglichen Ladevorgänge ausgewählt wurde, zur Gruppe der Kandidaten- oder freiraumqualifizierten Ladevorgänge FQ_Ladevorgänge hinzu (Block 186). Er entfernt auch den ausgewählten Ladevorgang aus der "Gesamtheit"-Gruppe (Block 188). Der Kandidaten Ladeidentifikator 42 prüft dann, um zu sehen, ob die "Gesamtheit"-Gruppe leer ist (Block 146). Wenn nicht, dann kehrt die Steuerung zum Block 148 zurück, wo die Gruppe Mögliche_Ladevorgänge gelöscht und der Prozeß zur Berechnung der Freiräume für die Ladevorgänge, die in der Gesamtheit-Gruppe verblieben sind, wiederholt wird, um zu sehen, ob irgendwelche Ladevorgänge in der Gesamtheit-Gruppe im Hinblick auf die gestiegene Latenz des(r) Ladevorgangs(gänge), der (die) zur Gruppe FQ_Ladevorgänge hinzugefügt wurde(n), als mögliche Kandidaten-Ladevorgänge identifiziert werden sollten.
  • Die Steuerung setzt den Schleifendurchlauf durch die Blöcke 146188 fort, bis die Gesamtheit-Gruppe leer (Block 146) ist oder bis bei der Gruppe "Mögliche_Ladevorgänge" festgestellt wird, daß sie beim Block 160 kein Glied aufweist. Im ersten Fall wird der Prozeß beendet. Im zweiten Fall wird der Schwellwert T um einen Takt herabgesetzt (Block 172) und mit dem vorgegebenen Schwellwert verglichen (Block 174), wie oben erläutert wurde. Wird der Schwellwert noch übertroffen (Block 174), dann durchläuft die Steuerung die Schleife zurück zum Block 146. Anderenfalls bricht die Routine FQ_Identifizieren (Einzelpfad) ab, und die Steuerung kehrt zum Block 250 (7) zurück.
  • Zu 7 zurückkehrend bestimmt der Kandidaten-Ladeidentifikator 42, nachdem die Routine FQ_Identifizieren (Einzelpfad) ausgeführt ist (Block 248), ob die Gruppe FQ_Ladevorgänge irgendwelche Glieder aufweist (Block 250). Gibt es keine Glieder in der Gruppe FQ_Ladevorgänge (Block 250), dann fährt die Steuerung am Block 260 fort. Anderenfalls fährt die Steuerung am Block 252 fort.
  • Wird als ein Beispiel angenommen, daß die Gruppe FQ_Ladevorgänge nicht leer ist (Block 250), dann ruft der Kandidaten-Ladeidentifikator 42 einen der Kandidaten-Ladevorgänge aus der Gruppe FQ_Ladevorgänge ab (Block 252). Er fügt dann die Frequenz, mit welcher der Pfad, auf dem der Ladevorgang angeordnet ist, ausgeführt wird, zur Umgehungsfrequenz des Ladevorgangs für den Subjekt-Ladevorgang hinzu (Block 254). Der Kandidaten-Ladeidentifikator 42 bestimmt dann, ob es irgendeine andere Ladeanweisung in der Gruppe FQ_Ladevorgänge gibt (Block 256). Wenn das so ist, dann durchläuft die Steuerung nochmals die Schleife durch die Blöcke 252256. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke 252256 fort, bis alle Ladevorgänge in FQ_Ladevorgängen analysiert wurden (Block 256).
  • Der Kandidaten-Ladeidentifikator 42 fügt dann die Gruppe FQ_Ladevorgänge zur Gruppe FQ_Kandidaten hinzu (Block 258) und bestimmt, ob es in der Region noch weitere Pfade zu analysieren gibt (Block 260). Gibt es mehr zu analysierende Pfade (Block 260), dann kehrt die Steuerung zum Block 246 zurück, wo dann der nächste Pfad analysiert wird, wie oben erläutert wurde. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke 246260 fort, bis jeder Pfad in der Region auf Kandidaten-Ladevorgänge hin analysiert wurde (Block 260).
  • Nachdem alle Pfade derart analysiert wurden (Block 260), prüft der Kandidaten-Ladeidentifikator 42, um zu bestimmen, ob die Gruppe FQ_Kandidaten irgendein Glied enthält (Block 262). Wenn sie keinerlei Glieder enthält (Block 262), dann wurden keine Kandidaten-Ladevorgänge in der Region identifiziert. Dementsprechend wird der Schwellwert TS um einen Takt herabgesetzt (Block 274) und mit dem vorgegebenen Schwellwert verglichen (Block 276). Wird der Schwellwert noch übertroffen (Block 276), dann durchläuft die Steuerung die Schleife zurück zum Block 244, um zu bestimmen, ob irgendwelche Kandidaten-Ladevorgänge identifiziert werden, wenn ein niedrigerer Freiraum-Schwellwert verwendet wird. Anderenfalls bricht die Routine Finde_FQ_Ladevorgänge_in_Region ab, und die Steuerung kehrt zurück zum Block 280 in 3.
  • Wird zur Veranschaulichung angenommen, daß die Gruppe FQ-Kandidaten nicht leer ist (Block 262), dann tritt der Kandidaten-Ladeidentifikator 42 in eine Schleife (Blöcke 264272) ein, wo er jeden Ladevorgang in der Gruppe FQ-Kandidaten überprüft, um zu sehen, ob er eine Umgehungswahrscheinlichkeit größer als oder gleich einem vorgegebenen Wahrscheinlichkeitsschwellwert aufweist. Insbesondere ruft der Kandidaten-Ladeidentifikator 42 einen ersten Ladevorgang aus der Gruppe FQ_Kandidaten ab (Block 264). Er berechnet dann die Region-Umgehungswahrscheinlichkeit (RUW) für den Ladevorgang, indem er die Ladevorgang Umgehungsfrequenz durch die Frequenz der Region dividiert (Block 266). Der Kandidaten-Ladeidentifikator 42 vergleicht dann die berechnete RUW mit einem Wahrscheinlichkeitsschwellwert (FQ_PROB) (Block 268). FQ_Prob ist ein Wert zwischen 0 und 1 (z. B. 0,1).
  • Liegt die RUW des Ladevorganges über dem Schwellwert FQ_Prob (Block 268), dann identifiziert der Ladeidentifikator 42 den Ladevorgang als einen Kandidaten-Ladevorgang, indem er ihn zu der Gruppe FQ_Ladevorgänge Region hinzufügt (Block 270). Liegt die RUW des Ladevorganges nicht über dem Schwellwert FQ_Prob (Block 268), dann fährt die Steuerung am Block 272 fort.
  • Gibt es in der Gruppe FQ_Kandidaten mehr Ladevorgänge zu analysieren (Block 272), dann durchläuft die Steuerung nochmals die Schleife durch die Blöcke 264272. Anderenfalls bricht die Routine Finde_FQ_Ladevorgänge_in_Region ab, und die Steuerung kehrt zurück zum Block 280 von 3.
  • Zur 3 zurückkehrend terminiert die Ablaufsteuerung 44 die Region (Block 280), wenn die Routine Finde_FQ_Ladevorgänge_in_Region zurückspringt (Block 236). Dabei versucht die Ablaufsteuerung 44, eine T2-Latenz für jeden der Kandidaten-Ladevorgänge in FQ_Ladevorgänge_Region zu terminieren. Wie oben erläutert wurde, kann die Ablaufsteuerung wegen der verschiedenen Einschränkungen terminieren, daß keiner, einige oder alle Kandidaten-Ladevorgänge in FQ_Ladevorgänge_Region eine T2-Latenz aufweisen.
  • Um zu bestimmen, welche von den Ladevorgängen in der terminierten Region Latenz-Umgehungsladevorgänge sind, wird die Routine Finde_LU_Ladevorgänge_in_Region aufgerufen und die Rückgabeergebnisse werden in LU_Ladevorgänge_Region angeordnet (Block 282). Liegt ein Ladevorgang auf Parallel-Steuerungsablaufpfaden einer Terminierungsregion, dann wird zuerst bestimmt, ob er ein Latenz-Umgehungsladevorgang für die einzelnen Pfade sein könnte, und dann werden die Informationen aus allen Pfaden kombiniert, um festzulegen, ob der Ladevorgang ein Latenz-Umgehungsladevorgang für die Terminierungsregion sein könnte. Die Lade-Umgehungswahrscheinlichkeit (LUW) ist das Verhältnis aus der Gesamtfrequenz der Pfade, auf denen der Ladevorgang umgangen werden kann, zur Ladevorgangsfrequenz. Ein Ladevorgang ist dann und nur dann ein Latenz-Umgehungsladevorgang für eine Region, wenn LUW(Ladevorgang) > LU_PROB ist, wobei LU_PROB ein Wahrscheinlichkeitsschwellwert für das Identifizieren von Latenz Umgehungsladevorgängen ist. Es ist zu beachten, daß sich LUW etwas von RUW unterscheidet. Für den in 5 dargestellten Fall ist LUW gleich 100% und RUW nur 10%. Selbst wenn die Pfadfrequenz des Ladevorgangs klein ist im Vergleich zur Regionsfrequenz, kann der Ladevorgang noch umgangen werden, sobald die Anweisungsterminierung bereits erledigt ist und der Ladevorgang und seine Verwendung durch mindestens T2 Takte getrennt sind. Für den in 6 dargestellten Fall sind sowohl LUW als auch RUW gleich 10%.
  • Mit Bezug auf 12 startet die Routine Finde_LU_Ladevorgänge_in_Region, wenn der Final-Ladeidentifikator 46 die Gruppe LU_Ladevorgänge_Region zu einer Leermenge löscht (Block 340). Für alle Ladeanweisungen in der Region setzt der Final-Ladeidentifikator 46 eine zugehörige Variable Ladevorgangs Umgehungsfrequenz gleich Null (Block 344).
  • Der Final-Ladeidentifikator 46 wählt als nächstes einen der Pfade in der Region für die Analyse aus (Block 346). Er ruft dann die Routine Finde_LU_Ladevorgänge in Pfad auf (Block 348). Die Routine Finde_LU_Ladevorgänge_in_Pfad erzeugt eine Gruppe von Latenz-Umgehungsladevorgängen, die eine terminierte Latenz größer als oder gleich einem bestimmten Schwellwert aufweisen. Diese Latenz-Umgehungsladevorgänge werden durch die Routine Finde_LU_Ladevorgänge_in_Pfad in die Gruppe LU_Ladevorgänge_Pfad zurückgegeben.
  • Zusätzlich zu den Abhängigkeitseinschränkungen der Anweisungen untereinander können viele andere Architektur- und Mikroarchitektur-Einschränkungen, wie z. B. die Gerätebreite und die Bündelungsbeschränkungen, die abschließende Ablaufsteuerung beeinflussen, nachdem die Anweisungen terminiert wurden. Insbesondere kann ein Ladevorgang, der nicht als freiraumqualifizierter Ladevorgang identifiziert ist, in einer solchen Weise terminiert werden, daß seine Ergebnisse nicht in den nächsten T2 Takten verwendet werden. Diese Ladevorgänge sollten als Latenz-Umgehungsladevorgänge identifiziert werden, welche den μCache umgehen. Treten solche Umstände auf, dann wird ein Ladevorgang, der nicht durch den Kandidaten-Ladeidentifikator 42 identifiziert wurde, als ein Latenz-Umgehungsladevorgang ausgewählt. Andererseits ist für einen Kandidaten-Ladevorgang (d. h. freiraumqualifizierten Ladevorgang), der durch den Kandidaten-Ladeidentifikator 42 ausgewählt wurde, nicht sichergestellt, daß er durch die Ablaufsteuerung 44 mit einer Latenz T2 terminiert wird. Die Anweisungs-Ablaufsteuerung 44 kann wegen der mikroarchitekturellen oder anderer Einschränkungen nicht in der Lage sein, den verfügbaren Freiraum zu nutzen. Unter solchen Umständen wird der freiraumqualifizierte Ladevorgang nicht als ein Final-Umgehungsladevorgang identifiziert.
  • Das Identifizieren von Latenz-Umgehungsladevorgängen ist leichter als das Identifizieren von Kandidaten-Ladevorgängen, weil die Reihenfolge der Identifizierung unwichtig ist. Ein Ladevorgang ist dann und nur dann ein Latenz-Umgehungsladevorgang, wenn alle seine Verwendungen mindestens T2 Takte nach der Subjekt-Ladeanweisung terminiert sind, unabhängig von anderen Latenz-Umgehungsladevorgängen.
  • Mit Bezug auf 13 wird die Routine Finde_LU_Ladevorgänge in Pfad gestartet, wenn der Final-Ladeidentifikator 46 einen Abhängigkeitsgraphen für den Pfad erstellt (Block 200). Der Abhängigkeitsgraph ist ähnlich zu dem in 9 dargestellten, außer daß in diesem Beispiel der Abhängigkeitsgraph auf der Terminierung basiert, die durch die Ablaufsteuerung 44 entwickelt ist. Deshalb unterscheidet sich die Reihenfolge der Lade- und Verwendungsanweisungen in dem bei Block 202 entwickelten Abhängigkeitsgraphen üblicherweise von der Reihenfolge der Schritte im Abhängigkeitsgraphen, der bei Block 144 von 8 entwickelt wird.
  • Sobald der Abhängigkeitsgraph entwickelt ist (Block 200), löscht der Final-Ladeidentifikator 46 die Gruppe LU_Ladevorgänge_Pfad zu einer Leermenge (Block 202). Der Final-Ladeidentifikator 46 bestimmt dann, ob es irgendwelche Ladevorgänge auf dem Pfad gibt (Block 203). Gibt es keine Ladevorgänge auf dem Pfad (Block 203), dann bricht die Routine Finde_LU_Ladevorgänge_in_Pfad ab. Anderenfalls ruft der Final-Ladeidentifikator 46 den ersten terminierten Ladevorgang auf dem Pfad ab, um zu bestimmen, ob er ein Latenz-Umgehungsladevorgang ist, wie unten erläutert wird (Block 204). Insbesondere wird die letzte Anweisung auf dem Pfad identifiziert (Block 206). Wenn die Anzahl der Takte zwischen der gerade analysierten Ladeanweisung und der letzten Anweisung (zuzüglich der Latenz der letzten Anweisung) kleiner ist als ein vorgegebener Schwellwert (z. B. T2) (Block 208), dann fährt die Steuerung am Block 220 fort. Gibt es keine weiteren Ladeanweisungen auf dem Pfad (Block 220), dann bricht die Routine Finde_LU_Ladevorgänge_in_Pfad ab. Anderenfalls geht die Steuerung zum Block 204 zurück.
  • Unter der Annahme, daß die Anzahl von Takten zwischen der gerade analysierten Ladeanweisung und der letzten Anweisung (plus der Latenz der letzten Anweisung) größer als oder gleich dem Schwellwert ist (Block 208), bestimmt der Final-Ladeidentifikator 46, ob die durch die Subjekt-Ladeanweisung geladenen Daten durch eine Anweisung in dem Pfad verwendet werden (Block 210). Werden diese Daten nicht verwendet (Block 210), dann fährt die Steuerung am Block 222 fort, wo die Ladeanweisung als eine Latenz-Umgehungsladeanweisung identifiziert wird. Anderenfalls fährt die Steuerung am Block 212 fort.
  • Unter der Annahme, daß der Ladevorgang verwendet wird (Block 210), bestimmt der Final-Ladeidentifikator 46, ob die terminierte Latenz zwischen irgendeiner Anweisung, welche die durch die Ladeanweisung geladenen Daten verwendet, und der Ladeanweisung selbst kleiner ist als der Schwellwert (Block 214). Wenn ja, dann ist die Ladeanweisung keine Latenz-Umgehungsladeanweisung, so daß die Steuerung die durch die Blöcke 212216 definierte Schleife verläßt, wobei der Final-Ladeidentifikator 46 bestimmt, ob es noch irgendwelche weiteren Ladeanweisungen im Abhängigkeitsgraphen gibt, die zu analysieren sind (Block 220). Wenn jedoch die Anzahl der Takte zwischen einer Ladeanweisung und jeder einzelnen Verwendungsanweisung auf dem Pfad, welche die von der Ladeanweisung geladenen Daten bearbeitet, größer als oder gleich dem Schwellwert (z. B. T2) ist (Block 216), dann fügt der Final-Ladeidentifikator 46 diese Ladeanweisung zu der Gruppe LU_Ladevorgänge Pfad hinzu (Block 222). Die Steuerung fährt dann am Block 220 fort.
  • Genauer gesagt ruft der Final-Ladeidentifikator 46 beim Block 212 die erste Verwendungsanweisung ab, die mit den Daten arbeitet, welche durch die Subjekt-Ladeanweisung geladen wurden. Der Final-Ladeidentifikator 46 bestimmt dann, ob die Anzahl von Takten zwischen der Subjekt-Ladeanweisung und der Verwendungsanweisung größer als oder gleich dem Schwellwert (z. B. T2) ist (Block 214). Wenn ja, dann fährt die Steuerung am Block 220 fort. Anderenfalls bestimmt der Final-Ladeidentifikator 46, ob die durch die Ladeanweisung geladenen Daten durch irgendeine andere Verwendungsanweisung in dem Pfad verwendet werden (Block 216). Werden die Daten durch eine andere Anweisung verwendet (Block 218), dann kehrt die Steuerung zum Block 212 zurück, wo diese Verwendungsanweisung (Block 218) aufgerufen (Block 212) und analysiert wird (Block 214), wie oben erläutert wurde. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke 204222 fort, bis jede Ladeanweisung auf dem Pfad analysiert wurde (Block 220). Sobald diese Analyse abgeschlossen ist, endet die Routine_LU_Ladevorgänge_in_Pfad, und die Steuerung kehrt zum Block 350 (12) zurück.
  • Nachdem die Routine Finde_LU_Ladevorgänge_in_Pfad ausgeführt ist (Block 348), bestimmt der Final-Ladeidentifikator 46, ob die Gruppe LU-Ladevorgänge Pfad irgendwelche Glieder hat (Block 350). Gibt es in der Gruppe LU_Ladevorgänge_Pfad keine Glieder (Block 350), dann fährt die Steuerung am Block 360 fort. Anderenfalls fährt die Steuerung am Block 352 fort.
  • Wird als ein Beispiel angenommen, daß die Gruppe LU_Ladevorgänge Pfad nicht leer ist (Block 350), dann ruft der Final-Ladeidentifikator 46 einen der finalen Ladevorgänge aus der Gruppe LU_Ladevorgänge_Pfad ab (Block 352). Er fügt dann die Frequenz, mit welcher der Pfad, auf dem der Ladevorgang angeordnet ist, ausgeführt wird, zur Umgehungs_Frequenz des Ladevorgangs (Block 354) hinzu. Der Final-Ladeidentifikator 46 bestimmt dann, ob es irgendeine andere Ladeanweisung in der Gruppe LU_Ladevorgänge_Pfad gibt (Block 356). Wenn ja, dann durchläuft die Steuerung erneut die Schleife durch die Blöcke 352356. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke 352356 fort, bis alle Ladevorgänge in LU_Ladevorgänge_Pfad analysiert wurden (Block 356).
  • Der Final-Ladeidentifikator 46 setzt dann LU_Kandidaten auf LU_Ladevorgänge_Pfad (Block 358) und bestimmt, ob es noch weitere zu analysierende Pfade in der Region gibt (Block 360). Gibt es weitere zu analysierende Pfade (Block 360), dann kehrt die Steuerung zum Block 346 zurück, wo dann der nächste Pfad analysiert wird, wie oben erläutert wurde. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke 346360 fort, bis jeder Pfad in der Region nach Kandidaten-Ladevorgängen untersucht wurde (Block 360).
  • Wurden alle Pfade derart analysiert (Block 360), dann prüft der Final-Ladeidentifikator 46, um zu bestimmen, ob die Gruppe LU_Kandidaten irgendwelche Glieder enthält (Block 362). Enthält sie keine Glieder (Block 362), dann gibt es keine Kandidaten-Ladevorgänge in der Region, die Routine Finde_LU_Ladevorgänge_in_Region bricht ab, und die Steuerung kehrt zum Block 380 in 3 zurück.
  • Wird zur Veranschaulichung angenommen, daß die Gruppe LU_Kandidaten nicht leer ist (Block 362), dann tritt der Final-Ladeidentifikator 46 in eine Schleife (Blöcke 364372) ein, wo er jeden Ladevorgang in der Gruppe LU_Kandidaten analysiert, um zu sehen, ob er eine Umgehungswahrscheinlichkeit größer als oder gleich einem vorgegebenen Schwellwert aufweist. Insbesondere ruft der Final-Ladeidentifikator 46 einen ersten Ladevorgang aus der Gruppe LU_Kandidaten ab (Block 364). Er berechnet dann die Region-Latenz-Umgehungswahrscheinlichkeit (LUP) für den Ladevorgang, indem er die Umgehungs_Frequenz des Ladevorgangs durch die Frequenz dividiert, mit welcher der Ladevorgang ausgeführt wird, Ladevorgang Frequenz, (Block 366). Der Final-Ladeidentifikator 46 vergleicht dann die berechnete LUP mit einem Wahrscheinlichkeitsschwellwert (LU_PROB) (Block 368). LU_Prob ist ein Wert zwischen 0 und 1 (z. B. 0,1).
  • Wenn die LUP des Ladevorgangs den Schwellwert LU_Prob überschreitet (Block 368), dann identifiziert der Final-Ladeidentifikator 46 den Ladevorgang als einen Latenz-Umgehungsladevorgang, indem er ihn zu der Gruppe LU_Ladevorgänge Region hinzufügt (Block 370). Überschreitet die LUP des Ladevorganges nicht den Schwellwert LU_Prob (Block 368), dann fährt die Steuerung am Block 372 fort.
  • Sind in der Gruppe LU_Kandidaten mehr Ladevorgänge zu analysieren (Block 372), dann durchläuft die Steuerung erneut die Schleife durch die Blöcke 364372. Anderenfalls bricht die Routine Finde_LU_Ladevorgänge_in_Region ab, und die Steuerung kehrt zum Block 380 von 3 zurück. Der Final-Ladeidentifikator 46 identifiziert dann die Latenz-Umgehungsladevorgänge in der Gruppe LU_Ladevorgänge Region als Final-Umgehungsladevorgänge, indem er diese Ladevorgänge in die Gruppe Final_Umgehungs_Ladevorgänge einordnet (Block 380).
  • Wurde jede Region in dem Software-Programm analysiert (Block 381), dann fährt die Steuerung am Block 382 fort. Anderenfalls kehrt die Steuerung zum Block 236 zurück, wenn die nächste Region analysiert wird, wie oben erläutert wurde. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke 236381 fort, bis das gesamte Software-Programm terminiert ist.
  • Unter der Annahme, daß das gesamte Software-Programm terminiert und nach Latenz-Umgehungsladevorgängen untersucht ist (Block 381), wandelt der Objektcodeerzeuger 48 dann das terminierte Software-Programm in Objektcode um (Block 382). Der Objektcode wird dann ausgeführt. Das Programm ist profiliert, die Verfehlungs-Umgehungs-Ladevorgänge zu identifizieren, die häufig den μCache verfehlen und nicht wiederverwendet werden. Das Cache-Profiling erfaßt für jeden Ladevorgang die Zahl, wie oft der Ladevorgang den μCache verfehlt hat und die geladene Cache-Leitung nicht wiederverwendet wird. Es erfaßt auch die Gesamtzahl, wie oft der Ladevorgang ausgeführt wird. Der von Johnson u. a. vorgeschlagene Algorithmus Run-time cache bypassing, IEEE Transactions On Computers, Band 48, Nr. 12; Dez. 1999, wird verwendet, um Verfehlungs-Umgehungs-Ladevorgänge zu identifizieren, die den μCache verfehlen und nicht wiederverwendet werden. Die Gruppe von Ladevorgängen in Final_Umgehungs_Ladevorgänge ist nicht profiliert und greift während des Cache-Profiling nicht auf den μCache zu.
  • Ein Ladevorgang kann nur während eines Teils seiner Ausführung den μCache verfehlen und nicht wiederverwendet werden. Die Wahrscheinlichkeit für das Verfehlen und Nicht-Wiederverwenden (VNWP) ist das Verhältnis aus der Zahl, wie oft ein Ladevorgang den μCache verfehlt und nicht wiederverwendet wird, zur Gesamtzahl, wie oft der Ladevorgang ausgeführt wird. Ein Ladevorgang ist dann und nur dann ein Verfehlungs-Umgehungs-Ladevorgang, wenn VNWP(Ladevorgang) > VU_PROB ist, wobei VU_PROB ein Schwellwert für die Verfehlungs-Umgehungs-Ladevorgänge ist. Diesen Verfehlungs-Umgehungs-Ladevorgängen werden Latenzen T2 zugewiesen, und sie werden durch μCache-Umgehungsflags gekennzeichnet.
  • Es ist zu beachten, daß sich die Gruppe von Verfehlungs-Umgehungs-Ladevorgängen mit der Gruppe der fortschreitenden Ladevorgänge überlappen kann. Wenn eine Ladeanweisung, wie oben erläutert wurde, durch den μCache hindurchläuft, wird sie als ein fortschreitender Ladevorgang identifiziert. Fortschreitende Ladevorgänge sind leichter zu identifizieren als Verfehlungs-Umgehungs-Ladevorgänge.
  • Wenn die Profildaten kompiliert sind, wird der zweite Kompilierungsdurchlauf gestartet (Block 386), indem die Routine Finde_VU_Ladevorgänge aufgerufen wird (Block 388). Wie in 14 gezeigt ist, startet die Routine Finde_VU_Ladevorgänge, wenn der Verfehlungs-Umgehungs-Ladeidentifikator 52 entscheidet, ob es irgendwelche profilierten Ladeanweisungen im gerade analysierten Software-Programm gibt (Block 390). Gibt es keine solchen Anweisungen (Block 390), dann bricht die Routine Finde_VU_Ladevorgänge ab, und die Steuerung kehrt zum Block 408 von 3 zurück.
  • Wird zu Erläuterungszwecken angenommen, daß es in der Software profilierte Ladeanweisungen gibt (Block 390), dann löscht der Verfehlungs-Umgehungs-Ladeidentifikator 52 die Gruppe VU_Ladevorgänge zu einer Leermenge (Block 392). Er ruft dann die erste profilierte Ladeanweisung in dem Software-Programm auf (Block 394). Der Verfehlungs-Umgehungs-Ladeidentifikator 52 teilt dann die Zahl, wie oft die Ladeanweisung den μCache ohne ein Wiederverwenden der geladenen Daten verfehlt hat, durch die Frequenz, mit der diese Ladeanweisung ausgeführt worden ist (Ladevorgang Frequenz), um eine Wahrscheinlichkeit für das Verfehlen und Nicht-Wiederverwenden (VNWP) zu bestimmen (Block 396).
  • Der Verfehlungs-Umgehungs-Ladeidentifikator 52 vergleicht dann den berechneten VNWP-Wert mit einem Schwellwert (VU_PROB) (Block 398). Liegt der VNWP des gerade analysierten Ladevorganges über dem Schwellwert (Block 398), dann ist die Ladeanweisung durch Hinzufügen des Ladevorganges als eine Verfehlungs-Umgehungs(VU)-Anweisung identifiziert, indem der Ladevorgang zu der Gruppe VU_Ladevorgänge hinzugefügt wird (Block 400). Liegt die VNWP des Ladevorganges nicht über dem Schwellwert LU_Prob (Block 398), dann wird der Block 400 übersprungen und die Steuerung fährt am Block 402 fort.
  • Beim Block 402 bestimmt der Verfehlungs-Umgehungs-Ladeidentifikator 52, ob es weitere profilierte Ladeanweisungen gibt, die zu analysieren sind. Wenn ja, dann kehrt die Steuerung zum Block 394 zurück. Anderenfalls bricht die Routine Finde_VU_Ladevorgänge ab. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke 394402 fort, bis alle Ladevorgänge analysiert sind (Block 402).
  • Zu 3 zurückkehrend werden nach dem Abbruch der Routine Finde_VU_Ladevorgänge die Verfehlungs-Umgehungs(VU)-Ladevorgänge zu der Gruppe Final_Umgehungs_Ladevorgänge hinzugefügt (Block 408). Der Objektcodeerzeuger 48 erzeugt dann den Objektcode für die Software mit den in der Gruppe Final_Umgehungs_Ladevorgänge identifizierten Ladevorgängen, die für ein Umgehen des μCache gekennzeichnet sind. Der Prozeß von 3 ist dann abgeschlossen.
  • Die Gruppen von Kandidaten-Ladevorgängen und Latenz-Umgehungsladevorgängen sind – unabhängig von den Cache-Konfigurationen – intrinsisch für das Anwendungsprogramm und die verwendeten Compileroptimierungen. Andererseits sind die Gruppen von fortschreitenden und Verfehlungs-Umgehungs-Ladevorgängen eine Funktion der Cache-Konfigurationen. Mit einem kleineren μCache werden mehr Ladevorgänge eine fortschreitende Arbeitsgruppengröße aufweisen, die größer ist als die Größe des μCache, und potenziell können mehr fortschreitende Ladevorgänge identifiziert werden, daß sie den μCache umgehen. Ebenso werden bei einem kleineren μCache mehr Ladevorgänge den μCache verfehlen, und potenziell können mehr Verfehlungs-Umgehungs-Ladevorgänge identifiziert werden.
  • Es ist zu beachten, daß der Compiler einen Ladevorgang entweder als den μCache umgehend oder den μCache nicht umgehend, aber nicht beides kennzeichnen kann. Es kann vorkommen, daß eine Ladeanweisung nur längs einiger Ausführungspfade umgangen und längs anderer Pfade nicht umgangen werden kann. Mit anderen Worten, die Umgehungswahrscheinlichkeit eines Kandidaten- (freiraumqualifizierten) Ladevorganges und/oder eines Latenz-Umgehungsladevorganges kann kleiner als 100% sein. Experimentelle Ergebnisse weisen darauf hin, daß ein Ladevorgang gewöhnlich eine Umgehungswahrscheinlichkeit entweder größer als 90% oder kleiner als 10% aufweist. Diese bimodale Eigenschaft ermöglicht es, daß eine einfache Compiler-Heuristik, welche Ladevorgänge mit einer Umgehungswahrscheinlichkeit von 50% auswählt, gut funktioniert.
  • Ebenso kann das Cache-Profiling festlegen, daß eine Ladeanweisung zeitweise umgangen werden kann. Experimentelle Ergebnisse weisen darauf hin, daß die Umgehungswahrscheinlichkeit eines Verfehlungs-Umgehungs-Ladevorganges gewöhnlich gering ist. Nur ein geringer Prozentanteil der Ladevorgänge weist eine Umgehungswahrscheinlichkeit größer als 50% auf. Für den Rest der Ladevorgänge kann eine statische Kennzeichnung, daß sie den μCache umgehen, ineffektiv sein, und es kann ein dynamischeres Schema notwendig werden.
  • Eine interessante Beobachtung ist, daß trotz der Abnahme der μCache-Verfehlungen durch das μCache-Umgehen die umgeleiteten Ladevorgänge die Cache-Verfehlungen im L2- oder L3-Cache nicht steigern. Das ist von Bedeutung, weil ein Ladevorgang, der den μCache umgeht, immer auf den L2-Cache zugreifen wird. Damit das Umgehen des μCache die Leistungsfähigkeit verbessert, sollten die umgeleiteten Ladevorgänge nicht die L2- oder L3-Cache-Verfehlungen steigern. Ein Teil der Erklärung dieser Unabhängigkeitseigenschaft liegt im Inklusivcharakter der Cache-Konfiguration.
  • Experimente zeigen, daß das durch den Compiler organisierte Umgehen die Anzahl der Verfehlungen sowie die Verfehlungsrate des μCache verringern kann. Im Mittel wird bei etwa 40%, 30%, 24% und 22% von Referenz-Ladevorgängen nachgewiesen, daß sie die jeweiligen μCaches mit 256 Byte, 1 KByte, 4 KByte bzw. 8 KByte umgehen. Das verringert die Anzahl von μCache-Verfehlungen um 64%, 53%, 45% und 43%, die μCache-Verfehlungsraten um 39%, 32%, 28% und 26% sowie die Gesamtzahl von Ladevorgang-Verwendung-Haltetakten um 13%, 9%, 6% und 5%. Indessen wird die Terminierungslänge des Programms in der vorläufigen Implementierung nur um 3% vergrößert, und die L2- sowie L3-Cache-Verfehlungen bleiben kaum verändert.
  • Obwohl hier eine bestimmte Vorrichtung beschrieben wurde, die in Übereinstimmung mit den Erkenntnissen der Erfindung konstruiert ist, ist der Geltungsbereich dieses Patentes nicht darauf beschränkt. Im Gegenteil, dieses Patent umfaßt alle Ausführungsformen der Erkenntnisse aus der Erfindung, die entweder wortwörtlich oder nach dem Äquivalenzprinzip in den Geltungsbereich der angefügten Ansprüche fallen.
  • ZUSAMMENFASSUNG
  • Verfahren und Vorrichtung für das Management einer Umgehung eines ersten Cache werden offengelegt. In einem derartigen Verfahren wird eine Ladenweisung identifiziert, die eine erwartete Latenz größer als oder gleich einem vorgegebenen Schwellwert aufweist. Es wird dann gefordert, die identifizierte Ladeanweisung zu terminieren, daß sie eine vorgegebene Latenz aufweist. Das Software-Programm wird dann terminiert. Eine tatsächliche Latenz, die mit der Ladeanweisung in dem terminierten Software-Programm verbunden ist, wird dann mit der vorgegebenen Latenz verglichen. Ist die tatsächliche Latenz größer als oder gleich der vorgegebenen Latenz, dann wird die Ladeanweisung gekennzeichnet, den ersten Cache zu umgehen.

Claims (55)

  1. Verfahren zum Kompilieren eines Software-Programms, um die Verfehlungen eines ersten Cache zu reduzieren, umfassend: Identifizieren einer Ladeanweisung, die eine erwartete Latenz aufweist, die größer als oder gleich einem vorgegebenen Schwellwert ist; Fordern, daß die Ladeanweisung zu terminieren ist, daß sie eine vorgegebene Latenz aufweist; Terminieren des Software-Programms; Vergleichen einer tatsächlichen Latenz, die mit der Ladeanweisung im terminierten Software-Programm verbunden ist, mit der vorgegebenen Latenz; und Kennzeichnen der Ladeanweisung für ein Umgehen des ersten Cache, wenn die tatsächliche Latenz größer als oder gleich der vorgegebenen Latenz ist.
  2. Verfahren nach Anspruch 1, wobei das Fordern, daß die Ladeanweisung zu terminieren ist, daß sie die vorgegebene Latenz aufweist, ein Fordern umfaßt, daß die Ladeanweisung zu terminieren ist, die vorgegebene Latenz aufzuweisen, wenn eine Umgehungswahrscheinlichkeit der Ladeanweisung größer als oder gleich einem Wahrscheinlichkeitsschwellwert ist.
  3. Verfahren nach Anspruch 1, wobei das Kennzeichnen der Ladeanweisung für ein Umgehen des ersten Cache ein Kennzeichnen der Ladeanweisung umfaßt, den ersten Cache zu umgehen, wenn eine Umgehungswahrscheinlichkeit der Ladeanweisung größer als oder gleich einem Wahrscheinlichkeitsschwellwert ist.
  4. Verfahren nach Anspruch 1, wobei das Identifizieren einer Ladeanweisung, die eine erwartete Latenz aufweist, welche größer als oder gleich ein vorgegebener Schwellwert ist, ein Bestimmen eines Freiraums der Ladeanweisung und Vergleichen des bestimmten Freiraums mit dem vorgegebenen Schwellwert umfaßt.
  5. Verfahren nach Anspruch 1, wobei die vorgegebene Latenz mindestens eine von denen ist, die größer als oder gleich einer Latenzzeit ist, welche mit dem Laden von Daten aus einem zweiten Cache verbunden ist.
  6. Verfahren nach Anspruch 1, wobei das Vergleichen der tatsächlichen Latenz mit der vorgegebenen Latenz das Bestimmen einer Zeitdifferenz zwischen der Ladeanweisung und einer Verwendungsanweisung, welche die von der Ladeanweisung geladenen Daten verarbeitet, und das Vergleichen der bestimmten Zeitdifferenz mit der vorgegebenen Latenz umfaßt.
  7. Verfahren nach Anspruch 1, wobei das Kennzeichnen der Ladeanweisung für ein Umgehen des ersten Cache das Setzen eines Flag in der Ladeanweisung umfaßt.
  8. Verfahren nach Anspruch 1, außerdem umfassend: Identifizieren einer fortschreitenden Ladeanweisung, die in einer Schleife angeordnet ist; Bestimmen, ob die fortschreitende Ladeanweisung mehr als einen vorgegebenen Umfang des ersten Cache benutzt, wenn die Schleife ausgeführt wird; und Kennzeichnen der fortschreitenden Ladeanweisung, den ersten Cache zu umgehen, wenn die fortschreitende Ladeanweisung mehr als den vorgegebenen Umfang des ersten Cache verwendet.
  9. Verfahren nach Anspruch 8, wobei das Bestimmen, ob die fortschreitende Ladeanweisung beim Ausführen der Schleife mehr als den vorgegebenen Umfang des ersten Cache verwendet, umfaßt: Bestimmen einer Anzahl von Durchläufen durch die Schleife, in welcher die fortschreitende Ladeanweisung ausgeführt wird; Multiplizieren der Anzahl von Durchläufen mit einem Schritt, welcher der fortschreitenden Ladeanweisung zugeordnet ist, um einen Schrittgrößenwert abzuleiten; Dividieren des Schrittgrößenwertes durch einen Wert, der repräsentativ für eine Größe des ersten Cache ist, um einen Speichernutzungsprozentanteil abzuleiten; und Vergleichen des Speichernutzungsprozentanteils mit dem vorgegebenen Umfang des ersten Cache.
  10. Verfahren nach Anspruch 1, außerdem umfassend: Erzeugen von Objektcode aus der Software nach dem Kennzeichnen der Ladeanweisung für ein Umgehen des ersten Cache; Ausführen des Objektcodes zum Entwickeln von Profildaten; Identifizieren einer zweiten Ladeanweisung, welche den ersten Cache verfehlt und wobei eine durch die zweite Ladeanweisung geladene Cache-Leitung nicht durch eine weitere Ladeanweisung verwendet wird; Dividieren einer Zahl, wie oft die zweite Ladeanweisung den ersten Cache verfehlt, ohne daß die durch die zweite Ladeanweisung geladene Cache-Leitung durch eine weitere Ladeanweisung verwendet wird, durch eine Zahl, wie oft die zweite Ladeanweisung ausgeführt wird, um einen Verhältniswert abzuleiten; und Kennzeichnen der zweiten Ladeanweisung, den ersten Cache zu umgehen, wenn der Verhältniswert größer als oder gleich einem vorgegebenem Verhältnis-Schwellwert ist.
  11. Verfahren nach Anspruch 10, außerdem ein Erzeugen von Objektcode aus der Software umfassend, nachdem die zweite Ladeanweisung für ein Umgehen des ersten Cache gekennzeichnet wurde.
  12. Verfahren zum Kompilieren eines Software-Programms, um Verfehlungen eines ersten Cache zu verringern, umfassend: Identifizieren einer ersten Gruppe von Ladeanweisungen für ein mögliches Umgehen des ersten Cache, bevor die Software terminiert wird; Versuch, die Software derart zu terminieren, daß die Ladeanweisungen in der ersten Gruppe mindestens eine vorgegebene Latenz aufweisen; Identifizieren einer zweiten Gruppe von Ladeanweisungen in dem terminierten Software-Programm, die mindestens die vorgegebene Latenz aufweisen; Kennzeichnen der zweiten Gruppe von Ladeanweisungen für ein Umgehen des ersten Cache.
  13. Verfahren nach Anspruch 12, außerdem umfassend: Umwandeln des terminierten Software-Programms in Objektcode; Erfassen der Cache-Profiling-Daten durch Ausführen des Objektcodes; und Verwenden der Cache-Profiling-Daten, um zu versuchen, eine zusätzliche Ladeanweisung für ein Umgehen des ersten Cache zu identifizieren.
  14. Verfahren nach Anspruch 12, außerdem umfassend: Identifizieren einer fortschreitenden Ladeanweisung; und Kennzeichnen der fortschreitenden Ladeanweisung, den ersten Cache zu umgehen, wenn die fortschreitende Ladeanweisung eine vorgegebene Bedingung erfüllt.
  15. Verfahren nach Anspruch 14, wobei die vorgegebene Bedingung umfaßt, daß Daten, die durch die fortschreitende Ladeanweisung geladen wurden, mehr als einen vorgegebenen Prozentanteil des ersten Cache benötigen.
  16. Verfahren nach Anspruch 15, wobei das Bestimmen, ob die fortschreitende Ladeanweisung die vorgegebene Bedingung erfüllt, umfaßt: Bestimmen einer Anzahl von Durchläufen durch eine Schleife, in welcher die fortschreitende Ladeanweisung ausgeführt wird; Multiplizieren der Anzahl von Durchläufen mit einem der fortschreitenden Ladeanweisung zugeordneten Schritt, um einen Schrittgrößenwert abzuleiten; Dividieren des Schrittgrößenwertes durch einen Wert, der repräsentativ für eine Größe des ersten Cache ist, um einen Speichernutzungsprozentanteil abzuleiten; und Vergleichen des Speichernutzungsprozentanteils mit dem vorgegebenen Prozentanteil des ersten Cache.
  17. Verfahren nach Anspruch 12, wobei das Identifizieren der ersten Gruppe von Ladeanweisungen für ein mögliches Umgehen des ersten Cache das Identifizieren von Ladeanweisungen umfaßt, die mindestens eine erwartete Latenz aufweisen.
  18. Verfahren nach Anspruch 17, wobei das Identifizieren der ersten Gruppe von Ladeanweisungen für ein mögliches Umgehen des ersten Cache außerdem das Identifizieren von Ladeanweisungen umfaßt, die eine Ausführungsfrequenz aufweisen, welche größer als oder gleich einer Frequenzschwelle ist.
  19. Verfahren nach Anspruch 17, wobei das Identifizieren von Ladeanweisungen, die mindestens eine erwartete Latenz aufweisen, ein Bestimmen eines Freiraums einer ersten Ladeanweisung und Vergleichen des bestimmten Freiraums mit einem vorgegebenen Schwellwert umfaßt.
  20. Verfahren nach Anspruch 12, wobei das Kennzeichnen der zweiten Gruppe von Ladeanweisungen für ein Umgehen des ersten Cache ein Kennzeichnen der zweiten Gruppe von Ladeanweisungen umfaßt, den ersten Cache zu umgehen, wenn eine Umgehungswahrscheinlichkeit der Ladeanweisungen größer als oder gleich einem Wahrscheinlichkeitsschwellwert ist.
  21. Verfahren nach Anspruch 12, wobei die vorgegebene Latenz zumindest eine von denen ist, die größer als oder gleich einer Latenzzeit ist, welche mit dem Laden von Daten aus einem zweiten Cache verbunden ist.
  22. Verfahren nach Anspruch 12, wobei das Identifizieren der zweiten Gruppe von Ladeanweisungen im terminierten Software-Programm, mindestens die vorgegebene Latenz aufzuweisen, ein Bestimmen einer Zeitdifferenz zwischen einer ersten Ladeanweisung und einer Verwendungsanweisung, welche die von den ersten Ladeanweisungen geladenen Daten verarbeitet, und ein Vergleichen der bestimmten Zeitdifferenz mit der vorgegebenen Latenz umfaßt.
  23. Verfahren nach Anspruch 12, wobei das Kennzeichnen der zweiten Gruppe von Ladeanweisungen für ein Umgehen des ersten Cache das Setzen eines Flag in jede Ladeanweisung in der zweiten Gruppe umfaßt.
  24. Verfahren nach Anspruch 12, außerdem umfassend: Erzeugen von Objektcode aus dem terminierten Software-Programm, nachdem die zweite Gruppe von Ladeanweisungen gekennzeichnet wurde, den ersten Cache zu umgehen; Ausführen des Objektcodes, um unter der Annahme, daß die zweite Gruppe von Anweisungen den ersten Cache umgeht, Profildaten zu entwickeln; Identifizieren einer ersten Ladeanweisung, die den ersten Cache verfehlt und wobei eine durch die erste Ladeanweisung geladene Cache-Leitung nicht wiederverwendet wird; Dividieren einer Zahl, wie oft die erste Ladeanweisung den ersten Cache verfehlt, ohne daß die durch die erste Ladeanweisung geladene Cache-Leitung durch eine andere Ladeanweisung verwendet wird, durch eine Zahl, wie oft die erste Ladeanweisung ausgeführt wird, um einen Verhältniswert abzuleiten; und Kennzeichnen der ersten Ladeanweisung, den ersten Cache zu umgehen, wenn der Verhältniswert größer als oder gleich einem vorgegebenen Verhältnis-Schwellwert ist.
  25. Verfahren nach Anspruch 24, außerdem das Erzeugen von Objektcode umfassend, nachdem die erste Ladeanweisung für ein Umgehen des ersten Cache gekennzeichnet wurde.
  26. Vorrichtung zum Reduzieren der Verfehlungen eines ersten Cache durch Ausführen eines Software-Programms, umfassend: einen Kandidaten-Ladeidentifikator zum Identifizieren von Kandidaten-Ladeanweisungen für ein mögliches Umgehen des ersten Cache; eine Ablaufsteuerung zum Terminieren des Software-Programms, wobei die Ablaufsteuerung versucht, jede der Ladeanweisungen zu terminieren, daß sie eine Latenz größer als oder gleich einem vorgegebenen Schwellwert aufweist; einen Final-Ladeidentifikator zum Kennzeichnen von Ladeanweisungen für ein Umgehen des ersten Cache; und einen Objektcodeerzeuger zum Entwickeln von Objektcode aus dem terminierten Software-Programm, wobei der Objektcode die Ladeanweisungen enthält, die durch den Final-Ladeidentifikator gekennzeichnet wurden, den ersten Cache zu umgehen.
  27. Vorrichtung nach Anspruch 26, wobei der Kandidaten-Ladeidentifikator Ladeanweisungen identifiziert, die eine erwartete Latenz größer als oder gleich einem vorgegebenen Schwellwert aufweisen.
  28. Vorrichtung nach Anspruch 27, wobei der Kandidaten-Ladeidentifikator die erwartete Latenz einer ersten Kandidaten-Ladeanweisung bestimmt, indem er einen Freiraum der ersten Kandidaten-Ladeanweisung bestimmt.
  29. Vorrichtung nach Anspruch 27, wobei der erste vorgegebene Schwellwert mindestens einer von denen ist, die größer als oder gleich einer Latenzzeit sind, die mit dem Laden von Daten aus einem zweiten Cache verbunden ist.
  30. Vorrichtung nach Anspruch 26, wobei der Kandidaten-Ladeidentifikator Ladeanweisungen als Kandidaten-Ladeanweisungen identifiziert, die (1) eine erwartete Latenz größer als oder gleich einem ersten vorgegebener Schwellwert und (2) eine Umgehungswahrscheinlichkeit größer als oder gleich einem zweiten vorgegebenen Schwellwert aufweisen.
  31. Vorrichtung nach Anspruch 30, wobei der Kandidaten-Ladeidentifikator die erwartete Latenz einer ersten Kandidaten-Ladeanweisung bestimmt, indem er einen Freiraum der ersten Kandidaten-Ladeanweisung bestimmt.
  32. Vorrichtung nach Anspruch 30, wobei der erste vorgegebene Schwellwert mindestens einer von denen ist, die größer als oder gleich einer Latenzzeit sind, die mit dem Laden von Daten aus einem zweiten Cache verbunden ist.
  33. Vorrichtung nach Anspruch 26, wobei der Final-Ladeidentifikator Ladeanweisungen als Final-Ladeanweisungen identifiziert, die (1) eine erwartete Latenz größer als oder gleich einem ersten vorgegebenen Schwellwert und (2) eine Umgehungswahrscheinlichkeit größer als oder gleich einem zweiten vorgegebenen Schwellwert aufweisen.
  34. Vorrichtung nach Anspruch 33, wobei der Final-Ladeidentifikator die tatsächliche Latenz einer ersten Ladeanweisung bestimmt, indem er eine Zeitdifferenz zwischen der Ladeanweisung und einer Verwendungsanweisung bestimmt, welche die von der ersten Ladeanweisung geladenen Daten verarbeitet.
  35. Verfahren nach Anspruch 26, wobei der Final-Ladeidentifikator die Ladeanweisungen für ein Umgehen des ersten Cache kennzeichnet, indem er ein Flag in jede der zu kennzeichnenden Ladeanweisungen setzt.
  36. Vorrichtung nach Anspruch 26, außerdem einen Fortschreitend-Ladeidentifikator umfassend, um eine fortschreitende Ladeanweisung zu kennzeichnen, den ersten Cache zu umgehen, wenn (1) die fortschreitende Ladeanweisung in einer Schleife angeordnet ist und (2) die fortschreitende Ladeanweisung mehr als einen vorgegebenen Umfang des ersten Cache verwendet, wenn die Schleife ausgeführt wird.
  37. Vorrichtung nach Anspruch 36, wobei der Fortschreitend-Ladeidentifikator bestimmt, ob die fortschreitende Ladeanweisung mehr als den vorgegebenen Umfang des ersten Cache verwendet, wenn die Schleife ausgeführt wird, durch: (1) Bestimmen einer Anzahl von Durchläufen durch die Schleife, in welcher die fortschreitende Ladeanweisung ausgeführt wird; (2) Multiplizieren der Anzahl von Durchläufen mit einem der fortschreitenden Ladeanweisung zugeordneten Schritt, um einen Schrittgrößenwert abzuleiten; (3) Dividieren des Schrittgrößenwertes durch einen Wert, der repräsentativ für eine Größe des ersten Cache ist, um einen Speichernutzungsprozentanteil abzuleiten; und (4) Vergleichen des Speichernutzungsprozentanteils mit dem vorgegebenen Umfang des ersten Cache.
  38. Vorrichtung nach Anspruch 26, außerdem einen Verfehlungs-Umgehungs-Ladeidentifikator umfassend, um eine Verfehlungs-Umgehungs-Ladeanweisung zu identifizieren, welche den ersten Cache verfehlt und wobei eine durch Verfehlungs-Umgehungs-Ladeanweisung geladene Cache-Leitung nicht wiederverwendet wird.
  39. Vorrichtung nach Anspruch 38, wobei der Verfehlungs-Umgehungs-Ladeidentifikator (1) eine Zahl (a), wie oft die Verfehlungs-Umgehungs-Ladeanweisung den ersten Cache verfehlt, ohne daß die durch die Verfehlungs-Umgehungs-Ladeanweisung geladene Cache-Leitung wiederverwendet wird, durch eine Zahl (b), wie oft die Verfehlungs-Umgehungs-Ladeanweisung ausgeführt wird, dividiert, um einen Verhältniswert abzuleiten; und (2) die Verfehlungs-Umgehungs-Ladeanweisung kennzeichnet, den ersten Cache zu umgehen, wenn der Verhältniswert größer als oder gleich einem vorgegebenen Verhältnis-Schwellwert ist.
  40. Vorrichtung nach Anspruch 39, wobei der Objektcodeerzeuger Objektcode erzeugt, der die gekennzeichnete Verfehlungs-Umgehungs-Ladeanweisung einschließt.
  41. Medium, das maschinenlesbare Anweisungen speichert, umfassend: erste Software zum Identifizieren von Kandidaten-Ladeanweisungen für ein mögliches Umgehen des ersten Cache; zweite Software zum Terminieren des Software-Programms, wobei die zweite Software versucht, jede Kandidaten-Ladeanweisung zu terminieren, daß sie eine Latenz größer als oder gleich einem vorgegebenen Schwellwert aufweist; dritte Software zum Kennzeichnen von Ladeanweisungen für ein Umgehen des ersten Cache; und vierte Software für das Entwickeln von Objektcode aus dem terminierten Software-Programm, wobei der Objektcode die Ladeanweisungen einschließt, die durch die dritte Software für ein Umgehen des ersten Cache gekennzeichnet sind.
  42. Medium nach Anspruch 41, wobei die erste Software Ladeanweisungen identifiziert, die eine erwartete Latenz größer als oder gleich einem ersten vorgegebenen Schwellwert aufweisen.
  43. Medium nach Anspruch 42, wobei die erste Software die erwartete Latenz einer ersten Kandidaten-Ladeanweisung bestimmt, indem er einen Freiraum der ersten Kandidaten-Ladeanweisung bestimmt.
  44. Medium nach Anspruch 42, wobei der erste vorgegebene Schwellwert mindestens einer von denen ist, die größer als oder gleich einer Latenzzeit sind, die mit dem Laden von Daten aus einem zweiten Cache verbunden ist.
  45. Medium nach Anspruch 41, wobei die erste Software Ladeanweisungen als Kandidaten-Ladeanweisungen identifiziert, die (1) eine erwartete Latenz größer als oder gleich einem ersten vorgegebenen Schwellwert und (2) eine Umgehungswahrscheinlichkeit größer als oder gleich einem zweiten vorgegebenen Schwellwert aufweisen.
  46. Medium nach Anspruch 45, wobei die erste Software die erwartete Latenz einer ersten Kandidaten-Ladeanweisung bestimmt, indem sie einen Freiraum der ersten Kandidaten-Ladeanweisung bestimmt.
  47. Medium nach Anspruch 45, wobei der erste vorgegebene Schwellwert mindestens einer von denen ist, die größer als oder gleich einer Latenzzeit sind, die mit dem Laden von Daten aus einem zweiten Cache verbunden ist.
  48. Medium nach Anspruch 41, wobei die dritte Software Ladeanweisungen als Final-Ladeanweisungen identifiziert, die (1) eine erwartete Latenz größer als oder gleich einem ersten vorgegebenen Schwellwert und (2) eine Umgehungswahrscheinlichkeit größer als oder gleich einem zweiten vorgegebenen Schwellwert aufweisen.
  49. Medium nach Anspruch 48, wobei die dritte Software die tatsächliche Latenz einer ersten Ladeanweisung bestimmt, indem sie eine Zeitdifferenz zwischen der Ladeanweisung und einer Verwendungsanweisung bestimmt, welche die von der ersten Ladeanweisung geladenen Daten verarbeitet.
  50. Medium nach Anspruch 41, wobei die dritte Software die Ladeanweisungen für ein Umgehen des ersten Cache kennzeichnet, indem sie ein Flag in jede der Ladeanweisungen setzt.
  51. Medium nach Anspruch 41, außerdem eine fünfte Software umfassend, um eine fortschreitende Ladeanweisung zu kennzeichnen, den ersten Cache zu umgehen, wenn (1) die fortschreitende Ladeanweisung in einer Schleife angeordnet ist und (2) die fortschreitende Ladeanweisung mehr als einen vorgegebenen Umfang des ersten Cache verwendet, wenn die Schleife ausgeführt wird.
  52. Medium nach Anspruch 51, wobei die fünfte Software bestimmt, ob die fortschreitende Ladeanweisung mehr als den vorgegebenen Umfang des ersten Cache verwendet, wenn die Schleife ausgeführt wird, durch: (1) Bestimmen einer Anzahl von Durchläufen durch die Schleife, in welcher die fortschreitende Ladeanweisung ausgeführt wird; (2) Multiplizieren der Anzahl von Durchläufen mit einem der fortschreitenden Ladeanweisung zugeordneten Schritt, um einen Schrittgrößenwert abzuleiten; (3) Dividieren des Schrittgrößenwertes durch einen Wert, der repräsentativ für eine Größe des ersten Cache ist, um einen Speichernutzungsprozentanteil abzuleiten; und (4) Vergleichen des Speichernutzungsprozentanteils mit dem vorgegebenen Umfang des ersten Cache.
  53. Medium nach Anspruch 41, außerdem eine fünfte Software zum Identifizieren einer Verfehlungs-Umgehungs-Ladeanweisung umfassend, welche den ersten Cache verfehlt und wobei eine durch Verfehlungs-Umgehungs-Ladeanweisung geladene Cache-Leitung nicht wiederverwendet wird.
  54. Medium nach Anspruch 53, wobei die fünfte Software (1) eine Zahl (a), wie oft die Verfehlungs-Umgehungs-Ladeanweisung den ersten Cache verfehlt, ohne daß die durch die Verfehlungs-Umgehungs-Ladeanweisung geladene Cache-Leitung wiederverwendet wird, durch eine Zahl (b), wie oft die Verfehlungs-Umgehungs-Ladeanweisung ausgeführt wird, dividiert, um einen Verhältniswert abzuleiten; und (2) die Verfehlungs-Umgehungs-Ladeanweisung kennzeichnet, den ersten Cache zu umgehen, wenn der Verhältniswert größer als oder gleich einem vorgegebenen Verhältnis-Schwellwert ist.
  55. Medium nach Anspruch 54, wobei die vierte Software Objektcode erzeugt, der die gekennzeichnete Verfehlungs-Umgehungs-Ladeanweisung einschließt.
DE10393481T 2002-10-22 2003-09-12 Verfahren und Vorrichtung zum Management einer Cache-Umgehung Expired - Fee Related DE10393481B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/278,682 US7467377B2 (en) 2002-10-22 2002-10-22 Methods and apparatus for compiler managed first cache bypassing
US10/278,682 2002-10-22
PCT/US2003/028783 WO2004038583A2 (en) 2002-10-22 2003-09-12 Methods and apparatus to manage cache bypassing

Publications (2)

Publication Number Publication Date
DE10393481T5 true DE10393481T5 (de) 2005-09-01
DE10393481B4 DE10393481B4 (de) 2009-02-12

Family

ID=32093426

Family Applications (1)

Application Number Title Priority Date Filing Date
DE10393481T Expired - Fee Related DE10393481B4 (de) 2002-10-22 2003-09-12 Verfahren und Vorrichtung zum Management einer Cache-Umgehung

Country Status (7)

Country Link
US (2) US7467377B2 (de)
CN (1) CN1717663B (de)
AU (1) AU2003288904A1 (de)
DE (1) DE10393481B4 (de)
GB (1) GB2410582B (de)
HK (1) HK1074686A1 (de)
WO (1) WO2004038583A2 (de)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6970985B2 (en) 2002-07-09 2005-11-29 Bluerisc Inc. Statically speculative memory accessing
US7191291B2 (en) * 2003-01-16 2007-03-13 Ip-First, Llc Microprocessor with variable latency stack cache
US7136990B2 (en) * 2003-01-16 2006-11-14 Ip-First, Llc. Fast POP operation from RAM cache using cache row value stack
US7139876B2 (en) 2003-01-16 2006-11-21 Ip-First, Llc Microprocessor and apparatus for performing fast speculative pop operation from a stack memory cache
US7139877B2 (en) 2003-01-16 2006-11-21 Ip-First, Llc Microprocessor and apparatus for performing speculative load operation from a stack memory cache
US20050114850A1 (en) 2003-10-29 2005-05-26 Saurabh Chheda Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
US7996671B2 (en) 2003-11-17 2011-08-09 Bluerisc Inc. Security of program executables and microprocessors based on compiler-architecture interaction
US8607209B2 (en) 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
US7302528B2 (en) * 2004-11-19 2007-11-27 Intel Corporation Caching bypass
US7805708B2 (en) * 2005-05-13 2010-09-28 Texas Instruments Incorporated Automatic tool to eliminate conflict cache misses
US20070130114A1 (en) * 2005-06-20 2007-06-07 Xiao-Feng Li Methods and apparatus to optimize processing throughput of data structures in programs
WO2007020577A1 (en) * 2005-08-16 2007-02-22 Nxp B.V. A method and system for accessing memory using an auxiliary memory
WO2007085121A1 (en) * 2006-01-26 2007-08-02 Intel Corporation Scheduling multithreaded programming instructions based on dependency graph
US7631149B2 (en) * 2006-07-24 2009-12-08 Kabushiki Kaisha Toshiba Systems and methods for providing fixed-latency data access in a memory system having multi-level caches
US8843906B1 (en) * 2006-10-16 2014-09-23 The Mathworks, Inc. Inferring data types from compiler call site
US8683139B2 (en) 2006-10-31 2014-03-25 Hewlett-Packard Development Company, L.P. Cache and method for cache bypass functionality
US20080126766A1 (en) 2006-11-03 2008-05-29 Saurabh Chheda Securing microprocessors against information leakage and physical tampering
US20080140934A1 (en) * 2006-12-11 2008-06-12 Luick David A Store-Through L2 Cache Mode
US8037466B2 (en) 2006-12-29 2011-10-11 Intel Corporation Method and apparatus for merging critical sections
KR101300657B1 (ko) * 2007-07-06 2013-08-27 삼성전자주식회사 비휘발성 메모리 및 버퍼 메모리를 포함하는 메모리 시스템및 그것의 데이터 읽기 방법
US7908375B2 (en) * 2007-07-11 2011-03-15 Microsoft Corporation Transparently externalizing plug-in computation to cluster
US20090055628A1 (en) * 2007-08-21 2009-02-26 International Business Machine Corporation Methods and computer program products for reducing load-hit-store delays by assigning memory fetch units to candidate variables
US8789031B2 (en) * 2007-09-18 2014-07-22 Intel Corporation Software constructed strands for execution on a multi-core architecture
US9298636B1 (en) * 2011-09-29 2016-03-29 Emc Corporation Managing data storage
US8972645B2 (en) * 2012-09-19 2015-03-03 Hewlett-Packard Development Company, L.P. Request sent to storage device based on moving average
US9223714B2 (en) 2013-03-15 2015-12-29 Intel Corporation Instruction boundary prediction for variable length instruction set
US9342284B2 (en) * 2013-09-27 2016-05-17 Intel Corporation Optimization of instructions to reduce memory access violations
US9811469B2 (en) 2013-12-16 2017-11-07 Empire Technology Development Llc Sequential access of cache data
US9785568B2 (en) 2014-05-19 2017-10-10 Empire Technology Development Llc Cache lookup bypass in multi-level cache systems
US9600442B2 (en) 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
US20170139716A1 (en) * 2015-11-18 2017-05-18 Arm Limited Handling stalling event for multiple thread pipeline, and triggering action based on information access delay
US10389837B2 (en) * 2016-06-17 2019-08-20 International Business Machines Corporation Multi-tier dynamic data caching
WO2019089816A2 (en) 2017-10-31 2019-05-09 Micron Technology, Inc. System having a hybrid threading processor, a hybrid threading fabric having configurable computing elements, and a hybrid interconnection network
US11068305B2 (en) 2018-05-07 2021-07-20 Micron Technology, Inc. System call management in a user-mode, multi-threaded, self-scheduling processor
US11119972B2 (en) 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
US11157286B2 (en) * 2018-05-07 2021-10-26 Micron Technology, Inc. Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor
US11132233B2 (en) 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
US11513837B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread commencement and completion using work descriptor packets in a system having a self-scheduling processor and a hybrid threading fabric
US11126587B2 (en) 2018-05-07 2021-09-21 Micron Technology, Inc. Event messaging in a system having a self-scheduling processor and a hybrid threading fabric
US11074078B2 (en) 2018-05-07 2021-07-27 Micron Technology, Inc. Adjustment of load access size by a multi-threaded, self-scheduling processor to manage network congestion
US11513838B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread state monitoring in a system having a multi-threaded, self-scheduling processor
US11513839B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Memory request size management in a multi-threaded, self-scheduling processor
US11119782B2 (en) 2018-05-07 2021-09-14 Micron Technology, Inc. Thread commencement using a work descriptor packet in a self-scheduling processor
US11513840B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor
US11113207B2 (en) * 2018-12-26 2021-09-07 Samsung Electronics Co., Ltd. Bypass predictor for an exclusive last-level cache
US11609858B2 (en) * 2018-12-26 2023-03-21 Samsung Electronics Co., Ltd. Bypass predictor for an exclusive last-level cache
US11126437B2 (en) * 2019-12-06 2021-09-21 Microsoft Technology Licensing, Llc Load instruction with final read indicator field to invalidate a buffer or cache entry storing the memory address holding load data
US20240193097A1 (en) * 2022-12-09 2024-06-13 Advanced Micro Devices, Inc. Accessing a Cache Based on an Address Translation Buffer Result

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5357618A (en) * 1991-04-15 1994-10-18 International Business Machines Corporation Cache prefetch and bypass using stride registers
US5625793A (en) * 1991-04-15 1997-04-29 International Business Machines Corporation Automatic cache bypass for instructions exhibiting poor cache hit ratio
GB2273181A (en) * 1992-12-02 1994-06-08 Ibm Cache/non-cache access control.
US5499354A (en) * 1993-05-19 1996-03-12 International Business Machines Corporation Method and means for dynamic cache management by variable space and time binding and rebinding of cache extents to DASD cylinders
EP0675436B1 (de) * 1994-03-31 1999-10-27 STMicroelectronics, Inc. Wiederverwendbarer Mehrwegsatz assoziativer Cache-Speicher
US6226722B1 (en) * 1994-05-19 2001-05-01 International Business Machines Corporation Integrated level two cache and controller with multiple ports, L1 bypass and concurrent accessing
EP0747826B1 (de) * 1995-06-06 2001-09-19 Hewlett-Packard Company, A Delaware Corporation Cache-Speicheranordnung mit gleichzeitigem Etikettenvergleich
US5751946A (en) * 1996-01-18 1998-05-12 International Business Machines Corporation Method and system for detecting bypass error conditions in a load/store unit of a superscalar processor
US6269426B1 (en) * 1997-06-24 2001-07-31 Sun Microsystems, Inc. Method for operating a non-blocking hierarchical cache throttle
US6052775A (en) * 1997-06-25 2000-04-18 Sun Microsystems, Inc. Method for non-intrusive cache fills and handling of load misses
US6230317B1 (en) * 1997-07-11 2001-05-08 Intel Corporation Method and apparatus for software pipelining of nested loops
US6014737A (en) * 1997-11-19 2000-01-11 Sony Corporation Of Japan Method and system for allowing a processor to perform read bypassing while automatically maintaining input/output data integrity
US6202204B1 (en) * 1998-03-11 2001-03-13 Intel Corporation Comprehensive redundant load elimination for architectures supporting control and data speculation
US6332214B1 (en) * 1998-05-08 2001-12-18 Intel Corporation Accurate invalidation profiling for cost effective data speculation
US6134710A (en) * 1998-06-26 2000-10-17 International Business Machines Corp. Adaptive method and system to minimize the effect of long cache misses
US6516462B1 (en) * 1999-02-17 2003-02-04 Elbrus International Cache miss saving for speculation load operation
US6571385B1 (en) * 1999-03-22 2003-05-27 Intel Corporation Early exit transformations for software pipelining
US6961930B1 (en) * 1999-09-22 2005-11-01 Hewlett-Packard Development Company, L.P. Efficient, transparent and flexible latency sampling
US6668372B1 (en) * 1999-10-13 2003-12-23 Intel Corporation Software profiling method and apparatus
US6625725B1 (en) * 1999-12-22 2003-09-23 Intel Corporation Speculative reuse of code regions
US6446145B1 (en) * 2000-01-06 2002-09-03 International Business Machines Corporation Computer memory compression abort and bypass mechanism when cache write back buffer is full
US6848100B1 (en) * 2000-03-31 2005-01-25 Intel Corporation Hierarchical software path profiling
US6698015B1 (en) * 2000-06-13 2004-02-24 Cisco Technology, Inc. Apparatus and method for improving performance of critical code execution
US6836841B1 (en) * 2000-06-29 2004-12-28 Intel Corporation Predicting output of a reuse region using prior execution results associated with the reuse region
US6629314B1 (en) * 2000-06-29 2003-09-30 Intel Corporation Management of reuse invalidation buffer for computation reuse
US7383543B2 (en) 2000-06-29 2008-06-03 Intel Corporation Management of reuse invalidation buffer for computation reuse
US6564299B1 (en) * 2001-07-30 2003-05-13 Lsi Logic Corporation Method and apparatus for defining cacheable address ranges
US6959435B2 (en) * 2001-09-28 2005-10-25 Intel Corporation Compiler-directed speculative approach to resolve performance-degrading long latency events in an application
US7039909B2 (en) * 2001-09-29 2006-05-02 Intel Corporation Method and apparatus for performing compiler transformation of software code using fastforward regions and value specialization
US6964043B2 (en) * 2001-10-30 2005-11-08 Intel Corporation Method, apparatus, and system to optimize frequently executed code and to use compiler transformation and hardware support to handle infrequently executed code
US20030126591A1 (en) 2001-12-21 2003-07-03 Youfeng Wu Stride-profile guided prefetching for irregular code
US20030145314A1 (en) * 2002-01-31 2003-07-31 Khoa Nguyen Method of efficient dynamic data cache prefetch insertion
US20030204840A1 (en) 2002-04-30 2003-10-30 Youfeng Wu Apparatus and method for one-pass profiling to concurrently generate a frequency profile and a stride profile to enable data prefetching in irregular programs
US20050149915A1 (en) * 2003-12-29 2005-07-07 Intel Corporation Methods and apparatus for optimizing a program undergoing dynamic binary translation using profile information
US7120749B2 (en) * 2004-03-18 2006-10-10 Intel Corporation Cache mechanism
US7428731B2 (en) * 2004-03-31 2008-09-23 Intel Corporation Continuous trip count profiling for loop optimizations in two-phase dynamic binary translators

Also Published As

Publication number Publication date
US7448031B2 (en) 2008-11-04
GB2410582B (en) 2006-01-04
AU2003288904A1 (en) 2004-05-13
WO2004038583A2 (en) 2004-05-06
GB2410582A (en) 2005-08-03
DE10393481B4 (de) 2009-02-12
US20040078790A1 (en) 2004-04-22
CN1717663A (zh) 2006-01-04
HK1074686A1 (en) 2005-11-18
CN1717663B (zh) 2010-05-12
AU2003288904A8 (en) 2004-05-13
US7467377B2 (en) 2008-12-16
GB0508442D0 (en) 2005-06-01
WO2004038583A3 (en) 2004-11-25
US20040133886A1 (en) 2004-07-08
WO2004038583A9 (en) 2005-06-09

Similar Documents

Publication Publication Date Title
DE10393481B4 (de) Verfahren und Vorrichtung zum Management einer Cache-Umgehung
DE69938218T2 (de) Vorrichtung und Verfahren zum Laden eines Java Anwendungsprogramms
Flood et al. Shenandoah: An open-source concurrent compacting garbage collector for openjdk
DE69030425T2 (de) Verfahren und Vorrichtung zur Kompilierung von Rechnerprogrammen mit Registerzuweisung zwischen Prozeduren
DE69834230T2 (de) Verfahren und Gerät zur Optimierung des Programmablaufs von Anwendungen
DE69434728T2 (de) Synchronisationssystem und verfahren in einem datencachesystem mit aufgeteiltem pegel
DE112013000486B4 (de) Anweisungsausgleich durch Anweisungsunsicherheit für Prozessoren mit mehreren Threads
DE112011105042B4 (de) Indikatoren zur Aufzeichnung einer letzten Verzweigung für einen Transaktionsspeicher
DE112012000303B4 (de) Dynamische binäre Optimierung
DE69615445T2 (de) Kompilierer zur Verbesserung der Leistung von Datencachespeichern
DE10050684B4 (de) Verfahren und System zur periodischen Ablaufverfolgung für Aufrufsequenzen zwischen Routinen
DE60207222T2 (de) Verfahren und system zur profilerstellung, zur kontinuierlichen detektion von profilphasen
DE69816044T2 (de) Zeitstrafen-basierende cache-speicherungs- und ersetzungs-techniken
DE112005002317B4 (de) Verfahren für die Verarbeitung von Abhängigkeitsketten
DE69622219T2 (de) Optimierungsgerät zum Entfernen von Gefahren durch Arrangierung der Befehlsreihenfolge
DE112011100258T5 (de) Durchführen von aggressiven Codeoptimierungen mit einer Fähigkeit zum Annulieren derdurch die aggressiven Optimierungen vorgenommenen Änderungen
DE69620057T2 (de) Optimierer
DE10393260T5 (de) Nachdurchgangs-Binäranpassung für eine auf Software basierende spekulative Vorberechnung
DE112011100715T5 (de) Hardware-hilfs-thread
DE112006002237T5 (de) Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem
DE102012210895A1 (de) Vorhersage der ungeordneten Parallelverarbeitung der Befehle von Threads in einem Multithread-Prozessor
DE102009046876A1 (de) Verfahren und System für die Datenvorabholung für Schleifen auf der Basis linearer Induktionsausdrücke
DE102013200508A1 (de) Ersetzungsreihenfolge von Cache-Sets auf der Grundlage von zeitbezogener Set-Aufzeichnung
DE10393968T5 (de) Dauerzwischenspeichervorrichtung und -verfahren
DE69128908T2 (de) Verfahren zum Durchführen von erlässlichen Befehlen in einem Rechner

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law

Ref document number: 10393481

Country of ref document: DE

Date of ref document: 20050901

Kind code of ref document: P

8364 No opposition during term of opposition
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20140401