DE10393481T5 - Verfahren und Vorrichtung zum Durchführen einer Cache-Umgehung - Google Patents
Verfahren und Vorrichtung zum Durchführen einer Cache-Umgehung Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000011068 loading method Methods 0.000 claims description 68
- 230000008569 process Effects 0.000 claims description 27
- 230000000750 progressive effect Effects 0.000 claims description 24
- 230000002250 progressing effect Effects 0.000 claims description 21
- 206010000210 abortion Diseases 0.000 description 9
- 230000007423 decrease Effects 0.000 description 3
- 238000007667 floating Methods 0.000 description 2
- 230000002902 bimodal effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0888—Addressing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches 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.
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 von2 verwirklicht. -
4 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine Finde_WB_Ladevorgänge, die durch das Programm von3 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 von3 aufgerufen wird. -
8 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine FQ_Identifizieren (Einzelpfad), die durch das Programm von7 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 von8 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 von3 aufgerufen wird. -
13 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine Finde_LU_Ladevorgänge_in_Pfad, die durch das Programm von12 aufgerufen wird. -
14 ist ein Flußdiagramm zum Veranschaulichen einer exemplarischen Routine Finde_LU_Ladevorgänge, die durch das Programm von3 aufgerufen wird. - AUSFÜHRLICHE BESCHREIBUNG
-
1 ist ein Blockdiagramm eines exemplarischen Computers10 , der in der Lage ist, die hier offengelegten Vorrichtungen und Verfahren zu verwirklichen. Der Computer10 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 Prozessor12 , der zum Beispiel durch einen oder mehrere Intel®-Mikroprozessoren realisiert ist. In dem dargestellten Beispiel ist der Prozessor12 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 Bus18 mit einem Hauptspeicher einschließlich eines flüchtigen Speichers14 und eines nicht-flüchtigen Speichers16 in Verbindung. Der flüchtige Speicher14 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 Speicher16 kann durch einen Flash-Speicher oder einen beliebigen anderen gewünschten Typ einer Speichervorrichtung realisiert werden. Der Zugriff auf den Hauptspeicher14 ,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 Schnittstellenschaltkreis20 . Der Schnittstellenschaltkreis20 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 Eingabevorrichtungen22 angeschlossen. Die Eingabevorrichtung(en)22 erlaubt(erlauben) dem Benutzer, Daten und Befehle in den Prozessor12 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 Ausgabevorrichtungen24 angeschlossen. Die Ausgabevorrichtungen24 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 Schnittstellenschaltkreis20 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 Netz26 (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 Massenspeichervorrichtungen28 zum Speichern von Software und Daten. Beispiele für solche Massenspeichervorrichtungen28 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 Prozessor12 zweite und dritte Ebenen eines Cache auf dem Chip (d. h. L2- und L3-Cache) auf. Der Computer10 enthält auch einen Cache vierter Ebene (L4), der auf demselben Chip wie der Prozessor12 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 von1 werden der L4-Cache und der Hauptspeicher durch den Direktzugriffsspeicher14 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 Massenspeichervorrichtung28 , 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 Massenspeichervorrichtung28 (falls sie im Cache nicht vorliegen) in ein oder mehrere Register im Prozessor12 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 Vorrichtung40 zum Durchführen der μCache-Umgehung dargestellt, um die Verfehlungen des μCache zu reduzieren, wenn ein Software-Programm ausgeführt wird. Wie in2 dargestellt ist, wirkt die exemplarische Vorrichtung40 auf ein durchzuführendes Software-Programm ein, das aktuell zumindest teilweise in einem gewissen Teilbereich des Speichers14 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-Ladeidentifikator42 versehen. Der Kandidaten-Ladeidentifikator42 durchsucht die Software nach Kandidaten-Ladeanweisungen, bevor die Software durch den Compiler terminiert wird. Der Kandidaten-Ladeidentifikator42 identifiziert Ladeanweisungen, die (1) eine erwartete Latenz größer als oder gleich einem ersten vorgegebenen Schwellwert (z. B. T2 Takte) und (2) eine Umgehungswahrscheinlichkeit größer als oder gleich einem zweiten vorgegebenen Schwellwert aufweisen, als Kandidaten-Ladeanweisungen. Der Kandidaten-Ladeidentifikator42 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 Takt1 und die zugeordnete Verwendungsanweisung erst im Takt10 ausgeführt werden könnte, dann beträgt der Freiraum10 Takte. Da die Anweisungen, die durch den Kandidaten-Ladeidentifikator42 ü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 Ablaufsteuerung44 versehen. Die Ablaufsteuerung44 arbeitet wie eine herkömmliche Ablaufsteuerung44 in einem herkömmlichen Compiler mit einer Abwandlung. Insbesondere versucht die Ablaufsteuerung44 von2 den Ablauf der Kandidaten-Ladeanweisungen (d. h. der Ladeanweisungen, die durch den Kandidaten-Ladeidentifikator42 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 Ablaufsteuerung44 verwendet wird, gleich T2, der Latenz des L2-Cache. Während die Ablaufsteuerung44 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 von2 außerdem mit einem Final-Ladeidentifikator46 ausgestattet. Der Final-Ladeidentifikator46 bearbeitet den von der Ablaufsteuerung44 terminierten Code, um Final-Ladeanweisungen zu identifizieren. Der Final-Ladeidentifikator46 identifiziert die Ladeanweisungen, die (1) eine tatsächliche (d. h. terminierte) Latenz größer als oder gleich einem ersten vorgegebenen Schwellwert (z. B. T2) und (2) eine Umgehungswahrscheinlichkeit größer als oder gleich einem zweiten vorgegebenen Schwellwert aufweisen, als Final-Ladeanweisungen. Der Final-Ladeidentifikator46 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-Ladeidentifikator46 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 von2 außerdem mit einem Objektcodeerzeuger48 ausgestattet. Der Objektcodeerzeuger48 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 von2 außerdem mit einem Fortschreitend-Ladeidentifikator50 ausgestattet. Der Fortschreitend-Ladeidentifikator50 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-Ladeidentifikator50 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-Ladeidentifikator50 vor dem Kandidaten-Ladeidentifikator42 auf die Software ein, um dadurch potentiell den Umfang des Codes, der eine Analyse durch den Kandidaten-Ladeidentifikator42 und den Final-Ladeidentifikator46 erfordert, zu verringern, während die Aufgabe der Ablaufsteuerung44 vereinfacht wird. - Wie in
2 dargestellt ist, ist die Vorrichtung40 auch mit einem Verfehlungs-Umgehungs-Ladeidentifikator52 versehen. Der Verfehlungs-Umgehungs-Ladeidentifikator52 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-Ladeidentifikator46 identifiziert wurden, den μCache umgehen. Der Verfehlungs-Umgehungs-Ladeidentifikator52 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-Ladeidentifikator52 (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-Ladeidentifikator52 die Ladeanweisung für ein Umgehen des μCache. - Sobald der Verfehlungs-Umgehungs-Ladeidentifikator
52 den gesamten Code analysiert hat, bearbeitet der Objektcodeerzeuger48 den Programm- oder Zwischencode, der durch den Final-Ladeidentifikator46 , den Fortschreitend-Ladeidentifikator50 , die Ablaufsteuerung44 und den Verfehlungs-Umgehungs-Ladeidentifikator52 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 Vorrichtung40 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 den3 –14 dargestellt. In diesem Beispiel ist das Programm durch den Prozessor12 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 Prozessor12 verbundenen Speicher gespeichert ist, aber Durchschnittsfachleute werden leicht einsehen, daß das gesamte Programm oder Teile davon alternativ durch eine andere Vorrichtung als der Prozessor12 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-Ladeidentifikatoren42 , Ablaufsteuerungen44 , Final- Ladeidentifikatoren46 , Objektcodeerzeugern48 , Fortschreitend-Ladeidentifikatoren50 und/oder isolierten Ladeidentifikatoren52 durch Software, Hardware und/oder Firmware realisiert werden. Außerdem werden Durchschnittsfachleute leicht einsehen, daß viele andere Verfahren zur Realisierung der Vorrichtung40 von2 alternativ verwendet werden können, obwohl das exemplarische Programm mit Bezug auf die in den3 –14 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 Vorrichtung40 einen ersten Kompilierungsdurchlauf (Block100 ) durch Löschen der Gruppe Final_Umgehungs_Ladevorgänge zu einer Leermenge (Block102 ). Dann wird der Fortschreitend-Ladeidentifikator50 aktiviert (Block104 ), um die fortschreitenden Ladeanweisungen für das Umgehen des μCache zu kennzeichnen (Block104 ). Wie in4 dargestellt ist, löscht insbesondere der Fortschreitend-Ladeidentifikator50 zuerst die Gruppe WB-Ladevorgänge zu einer Leermenge (Block110 ). Dann beginnt der Fortschreitend-Ladeidentifikator50 mit der Durchsicht des Subjektprogramms, um Ladeanweisungen zu identifizieren. Liegen im Programm keine Ladeanweisungen vor (Block112 ), dann gibt der Fortschreitend-Ladeidentifikator50 die WB-Ladevorgänge als eine Leermenge zurück, und die Steuerung kehrt zum Block130 (3 ) zurück. - Unter der Annahme, daß das bearbeitete Programm eine Ladeanweisung enthält (Block
112 ), ruft der Fortschreitend-Ladeidentifikator50 die überprüfte Ladeanweisung auf (Block114 ), um festzustellen, ob sie in einer Schleife liegt (Block116 ). Liegt die Ladeanweisung nicht in einer Schleife (Block116 ), dann setzt der Fortschreitend-Ladeidentifikator50 die Durchsuchung des Programms nach der nächsten Ladeanweisung fort. Liegen keine weiteren Ladeanweisungen vor (Block118 ), dann kehrt die Steuerung zum Block130 von3 zurück. Liegen weitere Ladeanweisungen vor, dann setzt die Steuerung das Durchlaufen der Schleife durch die Blocks114 –118 fort, bis es keine weiteren Ladeanweisungen mehr gibt (Block118 ) oder bis eine in einer Schleife liegende Ladeanweisung identifiziert ist (Block116 ). - Wird eine in einer Schleife liegende Ladeanweisung identifiziert (Block
116 ), dann bestimmt der Fortschreitend-Ladeidentifikator50 , ob die Ladeanweisung fortschreitend ist (Block120 ). 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 (Block120 ), dann setzt der Fortschreitend-Ladeidentifikator50 die Suche nach fortschreitenden Ladeanweisungen fort (Blöcke114 –120 ) oder springt heraus, wenn die letzte Ladeanweisung untersucht worden ist (Block118 ). - Ist die Ladeanweisung fortschreitend (Block
120 ), dann stellt der Fortschreitend-Ladeidentifikator50 fest, ob die fortschreitende Ladeanweisung mehr als einen vorgegebenen Umfang des μCache verwendet, wenn die Schleife ausgeführt wird. Insbesondere berechnet der Fortschreitend-Ladeidentifikator50 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 (Block122 ). Der Fortschreitend-Ladeidentifikator50 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) (Block124 ). Wenn der Schrittgrößenwert (SGW) über dem Schwellwert liegt (Block124 ), dann identifiziert der Fortschreitend-Ladeidentifikator50 die Ladeanweisung als einen Ladevorgang, der den μCache umgehen sollte, indem er ihn zur Gruppe WB_Ladevorgänge hinzufügt (Block126 ). Die Steuerung kehrt dann zum Block118 zurück. Liegt der Schrittgrößenwert (SGW) nicht über dem Schwellwert (Block124 ), dann kehrt die Steuerung zum Block118 zurück, ohne den Ladevorgang zur Gruppe WB_Ladevorgänge hinzuzufügen. - Die Steuerung setzt den Schleifendurchlauf durch die Blöcke
114 –126 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 (Block118 ), dann kehrt die Steuerung zum Block130 von3 zurück. - Beim Block
130 fügt der Final-Ladeidentifikator46 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 Vorrichtung40 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 Vorrichtung40 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 Block236 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-Ablaufsteuerung44 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 in6 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-Ladeidentifikator42 die Gruppe FQ_Ladevorgänge_Region zu einer Leermenge löscht (Block240 ). Der Kandidaten-Ladeidentifikator42 setzt dann die Regions-Frequenzvariable gleich der Frequenzvariablen, mit welcher der Eingangsblock der Region ausgeführt wird (Block242 ). Für jede der Ladeanweisungen in der Region setzt dann der Kandidaten-Ladeidentifikator42 eine zugehörige Umgehungs_Frequenz des Ladevorganges gleich Null (Block244 ). - Der Kandidaten-Ladeidentifikator
42 wählt als nächstes einen der Pfade in der Region zur Analyse aus (Block246 ). Er ruft dann die Routine FQ_Identifizieren (Einzelpfad) auf (Block248 ). 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-Ladeidentifikator42 die Gruppe FQ-Ladevorgänge zu einer Leermenge löscht (Block140 ), und setzt einen Schwellwert (T) für T2 ein (d. h. die Latenz des L2-Cache) (Block142 ). Der Kandidaten-Ladeidentifikator42 erzeugt dann einen Abhängigkeitsgraphen für den gerade analysierten Steuerungsablaufgraph-Pfad (Block144 ). Ein exemplarischer Abhängigkeitsgraph ist in9 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 in9 die Anweisung2 von der Anweisung1 ab und kann somit nicht ausgeführt werden, bis die Anweisung1 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 (Block144 ). - Beim Block
146 bestimmt der Kandidaten-Ladeidentifikator42 , ob die Gesamtheit-Gruppe irgendwelche Glieder aufweist. Wenn nicht (Block146 ), dann bricht die Routine FQ_Identifizieren (Einzelpfad) ab, und die Steuerung kehrt zum Block250 von7 zurück. Hat die Gesamtheit-Gruppe mindestens ein Glied (Block146 ), dann löscht der Ladeidentifikator42 die Gruppe Mögliche_Ladevorgänge zu einer Leermenge (Block148 ). - Der Kandidaten-Ladeidentifikator
42 ruft einen Ladevorgang aus der Gesamtheit-Gruppe (z. B. Ld1) auf (Block150 ) und berechnet den Freiraum dieses Ladevorganges (Block152 ). 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 (Block152 ), dann vergleicht der Kandidaten-Ladeidentifikator42 den Freiraum mit dem Schwellwert T (Block154 ). Ist der Freiraum größer als oder gleich dem Schwellwert T (Block154 ), dann wird der Ladevorgang (z. B. Ld1) zur Gruppe Mögliche_Ladevorgänge hinzugefügt (Block156 ). Ist der Freiraum kleiner als der Schwellwert T (Block154 ), 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 (Block154 ), bestimmt der Kandidaten-Ladeidentifikator42 , ob es andere Ladeanweisungen im Abhängigkeitsgraphen gibt (Block158 ). Gibt es dort andere Ladevorgänge, dann kehrt die Steuerung zum Block150 zurück, wo die Analyse des Freiraums der nächsten Ladeanweisung beginnt. Anderenfalls, wenn die letzte Ladeanweisung analysiert worden ist (Block158 ), fährt die Steuerung am Block160 fort. - Beim Block
160 bestimmt der Kandidaten-Ladeidentifikator42 , ob die Gruppe Mögliche_Ladevorgänge irgendwelche Glieder aufweist. Weist sie keinerlei Glieder auf (Block160 ), dann fährt die Steuerung am Block172 fort, wo der Schwellwert T zum Beispiel um 1 Takt herabgesetzt wird. Der Kandidaten-Ladeidentifikator42 bestimmt dann, ob der Schwellwert T unter einen vorgegebenen Minimalwert gefallen ist (Block174 ). Wenn das so ist, dann bricht die Routine FQ_Identifizieren (Einzelpfad) ab, und die Steuerung kehrt zum Block250 von7 zurück. Anderenfalls kehrt die Steuerung zum Block146 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 Block154 ). 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-Ladeidentifikator42 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 (Block162 ). 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-Ladeidentifikator42 einen Ladevorgang aus den möglichen Kandidaten-Ladevorgängen aus, wie es in10 dargestellt ist. - Mit Bezug auf
10 beginnt der Kandidaten-Ladeidentifikator42 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 (Block180 ). In11 ist ein exemplarischer reduzierter Abhängigkeitsgraph dargestellt, der auf dem Beispiel von9 basiert. Im Beispiel von11 wird angenommen, daß die Ladeanweisungen Ld1–Ld4 (siehe9 ) in der Gruppe Mögliche Kandidaten liegen und daß die Ladeanweisung Ld5 (siehe9 ) einen unzureichenden Freiraum aufweist, um in diese Gruppe eingeschlossen zu werden. Sobald der reduzierte Abhängigkeitsgraph konstruiert ist (Block180 ), wählt der Kandidaten-Ladeidentifikator42 eine Ladeanweisung mit den wenigsten Abhängigkeitsflanken aus dem Graphen aus, wobei ein herkömmlicher Sortieralgorithmus (Block182 ) verwendet wird. In dem Beispiel von11 weist jede Ladeanweisung Ld1 und Ld4 eine Abhängigkeitsflanke auf, wohingegen jede Ladeanweisung Ld2 und Ld3 ohne Abhängigkeitsflanke ist. Deshalb wird der Kandidaten-Ladeidentifikator42 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-Ladeidentifikator42 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 (Block186 ). Er entfernt auch den ausgewählten Ladevorgang aus der "Gesamtheit"-Gruppe (Block188 ). Der Kandidaten Ladeidentifikator42 prüft dann, um zu sehen, ob die "Gesamtheit"-Gruppe leer ist (Block146 ). Wenn nicht, dann kehrt die Steuerung zum Block148 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
146 –188 fort, bis die Gesamtheit-Gruppe leer (Block146 ) ist oder bis bei der Gruppe "Mögliche_Ladevorgänge" festgestellt wird, daß sie beim Block160 kein Glied aufweist. Im ersten Fall wird der Prozeß beendet. Im zweiten Fall wird der Schwellwert T um einen Takt herabgesetzt (Block172 ) und mit dem vorgegebenen Schwellwert verglichen (Block174 ), wie oben erläutert wurde. Wird der Schwellwert noch übertroffen (Block174 ), dann durchläuft die Steuerung die Schleife zurück zum Block146 . Anderenfalls bricht die Routine FQ_Identifizieren (Einzelpfad) ab, und die Steuerung kehrt zum Block250 (7 ) zurück. - Zu
7 zurückkehrend bestimmt der Kandidaten-Ladeidentifikator42 , nachdem die Routine FQ_Identifizieren (Einzelpfad) ausgeführt ist (Block248 ), ob die Gruppe FQ_Ladevorgänge irgendwelche Glieder aufweist (Block250 ). Gibt es keine Glieder in der Gruppe FQ_Ladevorgänge (Block250 ), dann fährt die Steuerung am Block260 fort. Anderenfalls fährt die Steuerung am Block252 fort. - Wird als ein Beispiel angenommen, daß die Gruppe FQ_Ladevorgänge nicht leer ist (Block
250 ), dann ruft der Kandidaten-Ladeidentifikator42 einen der Kandidaten-Ladevorgänge aus der Gruppe FQ_Ladevorgänge ab (Block252 ). 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 (Block254 ). Der Kandidaten-Ladeidentifikator42 bestimmt dann, ob es irgendeine andere Ladeanweisung in der Gruppe FQ_Ladevorgänge gibt (Block256 ). Wenn das so ist, dann durchläuft die Steuerung nochmals die Schleife durch die Blöcke252 –256 . Die Steuerung setzt den Schleifendurchlauf durch die Blöcke252 –256 fort, bis alle Ladevorgänge in FQ_Ladevorgängen analysiert wurden (Block256 ). - Der Kandidaten-Ladeidentifikator
42 fügt dann die Gruppe FQ_Ladevorgänge zur Gruppe FQ_Kandidaten hinzu (Block258 ) und bestimmt, ob es in der Region noch weitere Pfade zu analysieren gibt (Block260 ). Gibt es mehr zu analysierende Pfade (Block260 ), dann kehrt die Steuerung zum Block246 zurück, wo dann der nächste Pfad analysiert wird, wie oben erläutert wurde. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke246 –260 fort, bis jeder Pfad in der Region auf Kandidaten-Ladevorgänge hin analysiert wurde (Block260 ). - Nachdem alle Pfade derart analysiert wurden (Block
260 ), prüft der Kandidaten-Ladeidentifikator42 , um zu bestimmen, ob die Gruppe FQ_Kandidaten irgendein Glied enthält (Block262 ). Wenn sie keinerlei Glieder enthält (Block262 ), dann wurden keine Kandidaten-Ladevorgänge in der Region identifiziert. Dementsprechend wird der Schwellwert TS um einen Takt herabgesetzt (Block274 ) und mit dem vorgegebenen Schwellwert verglichen (Block276 ). Wird der Schwellwert noch übertroffen (Block276 ), dann durchläuft die Steuerung die Schleife zurück zum Block244 , 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 Block280 in3 . - Wird zur Veranschaulichung angenommen, daß die Gruppe FQ-Kandidaten nicht leer ist (Block
262 ), dann tritt der Kandidaten-Ladeidentifikator42 in eine Schleife (Blöcke264 –272 ) 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-Ladeidentifikator42 einen ersten Ladevorgang aus der Gruppe FQ_Kandidaten ab (Block264 ). Er berechnet dann die Region-Umgehungswahrscheinlichkeit (RUW) für den Ladevorgang, indem er die Ladevorgang Umgehungsfrequenz durch die Frequenz der Region dividiert (Block266 ). Der Kandidaten-Ladeidentifikator42 vergleicht dann die berechnete RUW mit einem Wahrscheinlichkeitsschwellwert (FQ_PROB) (Block268 ). 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 Ladeidentifikator42 den Ladevorgang als einen Kandidaten-Ladevorgang, indem er ihn zu der Gruppe FQ_Ladevorgänge Region hinzufügt (Block270 ). Liegt die RUW des Ladevorganges nicht über dem Schwellwert FQ_Prob (Block268 ), dann fährt die Steuerung am Block272 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öcke264 –272 . Anderenfalls bricht die Routine Finde_FQ_Ladevorgänge_in_Region ab, und die Steuerung kehrt zurück zum Block280 von3 . - Zur
3 zurückkehrend terminiert die Ablaufsteuerung44 die Region (Block280 ), wenn die Routine Finde_FQ_Ladevorgänge_in_Region zurückspringt (Block236 ). Dabei versucht die Ablaufsteuerung44 , 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 in5 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 in6 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-Ladeidentifikator46 die Gruppe LU_Ladevorgänge_Region zu einer Leermenge löscht (Block340 ). Für alle Ladeanweisungen in der Region setzt der Final-Ladeidentifikator46 eine zugehörige Variable Ladevorgangs Umgehungsfrequenz gleich Null (Block344 ). - Der Final-Ladeidentifikator
46 wählt als nächstes einen der Pfade in der Region für die Analyse aus (Block346 ). Er ruft dann die Routine Finde_LU_Ladevorgänge in Pfad auf (Block348 ). 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-Ladeidentifikator42 ausgewählt wurde, nicht sichergestellt, daß er durch die Ablaufsteuerung44 mit einer Latenz T2 terminiert wird. Die Anweisungs-Ablaufsteuerung44 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-Ladeidentifikator46 einen Abhängigkeitsgraphen für den Pfad erstellt (Block200 ). Der Abhängigkeitsgraph ist ähnlich zu dem in9 dargestellten, außer daß in diesem Beispiel der Abhängigkeitsgraph auf der Terminierung basiert, die durch die Ablaufsteuerung44 entwickelt ist. Deshalb unterscheidet sich die Reihenfolge der Lade- und Verwendungsanweisungen in dem bei Block202 entwickelten Abhängigkeitsgraphen üblicherweise von der Reihenfolge der Schritte im Abhängigkeitsgraphen, der bei Block144 von8 entwickelt wird. - Sobald der Abhängigkeitsgraph entwickelt ist (Block
200 ), löscht der Final-Ladeidentifikator46 die Gruppe LU_Ladevorgänge_Pfad zu einer Leermenge (Block202 ). Der Final-Ladeidentifikator46 bestimmt dann, ob es irgendwelche Ladevorgänge auf dem Pfad gibt (Block203 ). Gibt es keine Ladevorgänge auf dem Pfad (Block203 ), dann bricht die Routine Finde_LU_Ladevorgänge_in_Pfad ab. Anderenfalls ruft der Final-Ladeidentifikator46 den ersten terminierten Ladevorgang auf dem Pfad ab, um zu bestimmen, ob er ein Latenz-Umgehungsladevorgang ist, wie unten erläutert wird (Block204 ). Insbesondere wird die letzte Anweisung auf dem Pfad identifiziert (Block206 ). 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) (Block208 ), dann fährt die Steuerung am Block220 fort. Gibt es keine weiteren Ladeanweisungen auf dem Pfad (Block220 ), dann bricht die Routine Finde_LU_Ladevorgänge_in_Pfad ab. Anderenfalls geht die Steuerung zum Block204 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-Ladeidentifikator46 , ob die durch die Subjekt-Ladeanweisung geladenen Daten durch eine Anweisung in dem Pfad verwendet werden (Block210 ). Werden diese Daten nicht verwendet (Block210 ), dann fährt die Steuerung am Block222 fort, wo die Ladeanweisung als eine Latenz-Umgehungsladeanweisung identifiziert wird. Anderenfalls fährt die Steuerung am Block212 fort. - Unter der Annahme, daß der Ladevorgang verwendet wird (Block
210 ), bestimmt der Final-Ladeidentifikator46 , ob die terminierte Latenz zwischen irgendeiner Anweisung, welche die durch die Ladeanweisung geladenen Daten verwendet, und der Ladeanweisung selbst kleiner ist als der Schwellwert (Block214 ). Wenn ja, dann ist die Ladeanweisung keine Latenz-Umgehungsladeanweisung, so daß die Steuerung die durch die Blöcke212 –216 definierte Schleife verläßt, wobei der Final-Ladeidentifikator46 bestimmt, ob es noch irgendwelche weiteren Ladeanweisungen im Abhängigkeitsgraphen gibt, die zu analysieren sind (Block220 ). 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 (Block216 ), dann fügt der Final-Ladeidentifikator46 diese Ladeanweisung zu der Gruppe LU_Ladevorgänge Pfad hinzu (Block222 ). Die Steuerung fährt dann am Block220 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-Ladeidentifikator46 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 (Block214 ). Wenn ja, dann fährt die Steuerung am Block220 fort. Anderenfalls bestimmt der Final-Ladeidentifikator46 , ob die durch die Ladeanweisung geladenen Daten durch irgendeine andere Verwendungsanweisung in dem Pfad verwendet werden (Block216 ). Werden die Daten durch eine andere Anweisung verwendet (Block218 ), dann kehrt die Steuerung zum Block212 zurück, wo diese Verwendungsanweisung (Block218 ) aufgerufen (Block212 ) und analysiert wird (Block214 ), wie oben erläutert wurde. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke204 –222 fort, bis jede Ladeanweisung auf dem Pfad analysiert wurde (Block220 ). Sobald diese Analyse abgeschlossen ist, endet die Routine_LU_Ladevorgänge_in_Pfad, und die Steuerung kehrt zum Block350 (12 ) zurück. - Nachdem die Routine Finde_LU_Ladevorgänge_in_Pfad ausgeführt ist (Block
348 ), bestimmt der Final-Ladeidentifikator46 , ob die Gruppe LU-Ladevorgänge Pfad irgendwelche Glieder hat (Block350 ). Gibt es in der Gruppe LU_Ladevorgänge_Pfad keine Glieder (Block350 ), dann fährt die Steuerung am Block360 fort. Anderenfalls fährt die Steuerung am Block352 fort. - Wird als ein Beispiel angenommen, daß die Gruppe LU_Ladevorgänge Pfad nicht leer ist (Block
350 ), dann ruft der Final-Ladeidentifikator46 einen der finalen Ladevorgänge aus der Gruppe LU_Ladevorgänge_Pfad ab (Block352 ). Er fügt dann die Frequenz, mit welcher der Pfad, auf dem der Ladevorgang angeordnet ist, ausgeführt wird, zur Umgehungs_Frequenz des Ladevorgangs (Block354 ) hinzu. Der Final-Ladeidentifikator46 bestimmt dann, ob es irgendeine andere Ladeanweisung in der Gruppe LU_Ladevorgänge_Pfad gibt (Block356 ). Wenn ja, dann durchläuft die Steuerung erneut die Schleife durch die Blöcke352 –356 . Die Steuerung setzt den Schleifendurchlauf durch die Blöcke352 –356 fort, bis alle Ladevorgänge in LU_Ladevorgänge_Pfad analysiert wurden (Block356 ). - Der Final-Ladeidentifikator
46 setzt dann LU_Kandidaten auf LU_Ladevorgänge_Pfad (Block358 ) und bestimmt, ob es noch weitere zu analysierende Pfade in der Region gibt (Block360 ). Gibt es weitere zu analysierende Pfade (Block360 ), dann kehrt die Steuerung zum Block346 zurück, wo dann der nächste Pfad analysiert wird, wie oben erläutert wurde. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke346 –360 fort, bis jeder Pfad in der Region nach Kandidaten-Ladevorgängen untersucht wurde (Block360 ). - Wurden alle Pfade derart analysiert (Block
360 ), dann prüft der Final-Ladeidentifikator46 , um zu bestimmen, ob die Gruppe LU_Kandidaten irgendwelche Glieder enthält (Block362 ). Enthält sie keine Glieder (Block362 ), 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 Block380 in3 zurück. - Wird zur Veranschaulichung angenommen, daß die Gruppe LU_Kandidaten nicht leer ist (Block
362 ), dann tritt der Final-Ladeidentifikator46 in eine Schleife (Blöcke364 –372 ) 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-Ladeidentifikator46 einen ersten Ladevorgang aus der Gruppe LU_Kandidaten ab (Block364 ). 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, (Block366 ). Der Final-Ladeidentifikator46 vergleicht dann die berechnete LUP mit einem Wahrscheinlichkeitsschwellwert (LU_PROB) (Block368 ). 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-Ladeidentifikator46 den Ladevorgang als einen Latenz-Umgehungsladevorgang, indem er ihn zu der Gruppe LU_Ladevorgänge Region hinzufügt (Block370 ). Überschreitet die LUP des Ladevorganges nicht den Schwellwert LU_Prob (Block368 ), dann fährt die Steuerung am Block372 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öcke364 –372 . Anderenfalls bricht die Routine Finde_LU_Ladevorgänge_in_Region ab, und die Steuerung kehrt zum Block380 von3 zurück. Der Final-Ladeidentifikator46 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 (Block380 ). - Wurde jede Region in dem Software-Programm analysiert (Block
381 ), dann fährt die Steuerung am Block382 fort. Anderenfalls kehrt die Steuerung zum Block236 zurück, wenn die nächste Region analysiert wird, wie oben erläutert wurde. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke236 –381 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 Objektcodeerzeuger48 dann das terminierte Software-Programm in Objektcode um (Block382 ). 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 (Block388 ). Wie in14 gezeigt ist, startet die Routine Finde_VU_Ladevorgänge, wenn der Verfehlungs-Umgehungs-Ladeidentifikator52 entscheidet, ob es irgendwelche profilierten Ladeanweisungen im gerade analysierten Software-Programm gibt (Block390 ). Gibt es keine solchen Anweisungen (Block390 ), dann bricht die Routine Finde_VU_Ladevorgänge ab, und die Steuerung kehrt zum Block408 von3 zurück. - Wird zu Erläuterungszwecken angenommen, daß es in der Software profilierte Ladeanweisungen gibt (Block
390 ), dann löscht der Verfehlungs-Umgehungs-Ladeidentifikator52 die Gruppe VU_Ladevorgänge zu einer Leermenge (Block392 ). Er ruft dann die erste profilierte Ladeanweisung in dem Software-Programm auf (Block394 ). Der Verfehlungs-Umgehungs-Ladeidentifikator52 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 (Block396 ). - Der Verfehlungs-Umgehungs-Ladeidentifikator
52 vergleicht dann den berechneten VNWP-Wert mit einem Schwellwert (VU_PROB) (Block398 ). Liegt der VNWP des gerade analysierten Ladevorganges über dem Schwellwert (Block398 ), 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 (Block400 ). Liegt die VNWP des Ladevorganges nicht über dem Schwellwert LU_Prob (Block398 ), dann wird der Block400 übersprungen und die Steuerung fährt am Block402 fort. - Beim Block
402 bestimmt der Verfehlungs-Umgehungs-Ladeidentifikator52 , ob es weitere profilierte Ladeanweisungen gibt, die zu analysieren sind. Wenn ja, dann kehrt die Steuerung zum Block394 zurück. Anderenfalls bricht die Routine Finde_VU_Ladevorgänge ab. Die Steuerung setzt den Schleifendurchlauf durch die Blöcke394 –402 fort, bis alle Ladevorgänge analysiert sind (Block402 ). - 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 (Block408 ). Der Objektcodeerzeuger48 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ß von3 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)
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Verfahren nach Anspruch 24, außerdem das Erzeugen von Objektcode umfassend, nachdem die erste Ladeanweisung für ein Umgehen des ersten Cache gekennzeichnet wurde.
- 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.
- Vorrichtung nach Anspruch 26, wobei der Kandidaten-Ladeidentifikator Ladeanweisungen identifiziert, die eine erwartete Latenz größer als oder gleich einem vorgegebenen Schwellwert aufweisen.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Vorrichtung nach Anspruch 39, wobei der Objektcodeerzeuger Objektcode erzeugt, der die gekennzeichnete Verfehlungs-Umgehungs-Ladeanweisung einschließt.
- 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.
- Medium nach Anspruch 41, wobei die erste Software Ladeanweisungen identifiziert, die eine erwartete Latenz größer als oder gleich einem ersten vorgegebenen Schwellwert aufweisen.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Medium nach Anspruch 54, wobei die vierte Software Objektcode erzeugt, der die gekennzeichnete Verfehlungs-Umgehungs-Ladeanweisung einschließt.
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)
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)
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 |
-
2002
- 2002-10-22 US US10/278,682 patent/US7467377B2/en not_active Expired - Fee Related
-
2003
- 2003-09-12 CN CN038256983A patent/CN1717663B/zh not_active Expired - Fee Related
- 2003-09-12 GB GB0508442A patent/GB2410582B/en not_active Expired - Fee Related
- 2003-09-12 WO PCT/US2003/028783 patent/WO2004038583A2/en not_active Application Discontinuation
- 2003-09-12 DE DE10393481T patent/DE10393481B4/de not_active Expired - Fee Related
- 2003-09-12 AU AU2003288904A patent/AU2003288904A1/en not_active Abandoned
- 2003-12-17 US US10/739,500 patent/US7448031B2/en not_active Expired - Fee Related
-
2005
- 2005-08-11 HK HK05106929A patent/HK1074686A1/xx not_active IP Right Cessation
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 |