DE102009046876A1 - Verfahren und System für die Datenvorabholung für Schleifen auf der Basis linearer Induktionsausdrücke - Google Patents

Verfahren und System für die Datenvorabholung für Schleifen auf der Basis linearer Induktionsausdrücke Download PDF

Info

Publication number
DE102009046876A1
DE102009046876A1 DE102009046876A DE102009046876A DE102009046876A1 DE 102009046876 A1 DE102009046876 A1 DE 102009046876A1 DE 102009046876 A DE102009046876 A DE 102009046876A DE 102009046876 A DE102009046876 A DE 102009046876A DE 102009046876 A1 DE102009046876 A1 DE 102009046876A1
Authority
DE
Germany
Prior art keywords
prefetch
candidates
induction
loop
commands
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.)
Withdrawn
Application number
DE102009046876A
Other languages
English (en)
Inventor
Dz-ching Saratoga Ju
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Priority to DE102009046876A priority Critical patent/DE102009046876A1/de
Priority to US12/724,813 priority patent/US8352686B2/en
Publication of DE102009046876A1 publication Critical patent/DE102009046876A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching

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)
  • Devices For Executing Special Programs (AREA)

Abstract

Es wird eine effiziente Kompiliertechnik für die Datenvorabholung offenbart, in der Speicherzugriffe im Voraus abgeholt werden, die in linearen Induktionsausdrücken repräsentiert sind. Des Weiteren können indirekte Speicherzugriffe, auf die durch andere Speicherzugriffe von linearen Induktionsausdrücken in skalaren Schleifen verwiesen wird, vorabgeholt werden.

Description

  • Gebiet der vorliegenden Offenbarung
  • Die vorliegende Offenbarung betrifft allgemein Techniken und Systeme zur Verbesserung des Betriebs elektronischer Geräte, die eine zentrale Recheneinheit aufweisen, die häufige Datenarrayzugriffe vornimmt.
  • Beschreibung des Stands der Technik
  • Die ständige Weiterentwicklung auf dem Gebiet der Halbleiterproduktion führte zur Herstellung schneller und leistungsfähiger integrierter Schaltungen, die Millionen einzelner Transistorelemente enthalten. Folglich wurden sehr komplexe Digitalschaltungen entwickelt und diese werden für die Gestaltung und die Herstellung aufwendiger zentraler Recheneinheiten (CPU) verwendet, wobei eine höhere Packungsdichte in Verbindung mit einer geringeren Leistungsaufnahme und einer großen internen Speicherkapazität eine Vielzahl von Entwicklungen vorangebracht haben, um komplexe CPUs in eine Vielzahl elektronischer Geräte zu integrieren.
  • Typischerweise wird eine CPU auf der Grundlage einer speziellen Bytekodierung oder Maschinenkodierung betrieben, die zu einer entsprechenden Änderung von Zuständen der Gerätekomponenten, etwa von Registern, I/O-(Eingabe/Ausgabe)-Anschlüssen und dergleichen gemäß der Sequenz aus Maschinenkodierungsbefehlen führt. Somit wird aus der tiefsten Ebene einer Kommunikation zwischen einer Anwendung und dem Gerätesystem, das die CPU oder andere Daten- und Befehlverarbeitungseinheiten aufweist, die entsprechende Sequenz aus Bytekodierungsbefehlen von der CPU ausgeführt, wodurch das gewünschte Ergebnis in Form von Registerinhalten und dergleichen erzeugt wird. Durch die ständigen Fortschritte in der Prozesstechnologie, die typischerweise zur Herstellung komplexer integrierter Schaltungen, etwa von CPUs, eingesetzt werden, wurde das Leistungsverhalten digitaler Schaltungen deutlich verbessert, wodurch enorme Rechenressourcen für das Ausführen diverser Aufgaben bereitgestellt werden. Beispielsweise werden sehr komplexe Bildverarbeitungsanwendungen, wissenschaftliche Berechnungen einschließlich der Modellierung komplexer Situationen und dergleichen, auf der Grundlage gut etablierter Computersysteme, die moderne Mikroprozessoren aufweisen, ausgeführt. Ein wichtiger Aspekt bei der Verbesserung des Leistungsverhaltens von Mikroprozessoren und derglei chen wurde darin gesehen, die Taktsignalfrequenz ständig zu erhöhen, d. h. die Geschwindigkeit der Verarbeitung einer Sequenz eines Maschinenkodierungsbefehls nach dem anderen. Dies wird typischerweise bewerkstelligt, indem die Strukturgrößen einzelner Transistorelemente verringert werden, wodurch auch der Widerstand kritischer Signalwege und dergleichen reduziert wird. Aufgrund der kleineren Abmessungen können zugehörige Gerätemodule in einem einzelnen Halbleiterchip bei einer hohen Packungsdichte angeordnet werden, wodurch ebenfalls zu einer höheren Arbeitsgeschwindigkeit beigetragen wird. Auch kann ein deutlicher Grad an Parallelität in Mikroprozessorbauelemente integriert werden, indem mehrere Submodule, beispielsweise welche, die die Ausführung einer Vielzahl von Befehlen in einer mehr oder minder parallelen Weise ermöglichen, vorgesehen werden und/oder indem auf Datenarrays in einer parallelen Weise zugegriffen wird.
  • Es zeigt sich jedoch, dass die technologischen Fortschritte in den Mikroprozessorarchitekturen und den Fertigungstechniken sich nicht direkt in einer entsprechenden Verbesserung des Leistungsverhaltens von Speicherbauelementen in gleicher Weise ausdrücken. Beispielsweise werden sehr hohe Bitdichten auf der Grundlage gewisser Speicherarchitekturen erreicht, etwa dynamische RAM-Bauelemente (Speicher mit wahlfreiem Zugriff), die beispielsweise einen einzelnen Speichertransistor in Verbindung mit einem Ladungsspeicherelement, etwa einem Kondensator, aufweisen. Andererseits ist typischerweise die hohe Bitdichte mit einer moderat langen Zeit zum Zugreifen auf die einzelnen Speicherstellen verknüpft, beispielsweise aufgrund der Signalausbreitungsverzögerung, die durch das Laden und Entladen der Speicherelemente hervorgerufen wird, aufgrund der entsprechenden Leitungen, die die einzelnen Speicherstellen miteinander verbinden, und dergleichen. Trotz der komplexen Hardwareumgebungen werden somit die Vorteile, die durch die sehr hohe Arbeitsgeschwindigkeit der zentralen Recheneinheit erreicht werden, gegebenenfalls durch die erhöhten Verarbeitungszeiten aufgehoben, die durch die komplexen Speichereinrichtungen hervorgerufen werden. Andererseits liefern schnelle Speicherbauelemente, etwa Register und dergleichen, sehr kurze Zugriffszeiten, jedoch besitzen diese einen hohen Grad an Komplexität, beispielsweise im Hinblick auf die Anzahl der Transistoren, wodurch eine große Fläche auf dem Halbleiterchip eingenommen wird, wenn moderat große Speicherbereiche in den Halbleiterchip zu integrieren sind. Aus diesem Grunde wird typischerweise ein geeigneter Speicherbereich in unmittelbarer Nähe der Verarbeitungsmodule eines Prozessors vorgesehen, jedoch mit einer sehr beschränkten Speicherkapazität, während andere Speicherbauelemente, etwa dynamische RAM-Bauelemente und dergleichen in peripheren Bereichen des Halbleiterchips vorgesehen werden oder typischerweise als externe Bauelemente bereitgestellt werden, die mit der zentralen Recheneinheit über ein geeignetes Bussystem verbunden sind.
  • Durch das Einrichten geeigneter Hardware- und Softwarekomponenten kann somit die Verarbeitungszeit, die durch eine hohe Speicherdichte hervorgerufen wird, deutlich verringert werden, indem schnelle Pufferspeicher verwendet werden, die auch als Cache-Speicher bezeichnet werden, in denen Speicherstellen des Hauptspeichersystems, auf die häufig zugegriffen wird, kopiert werden und damit für die zentrale Recheneinheit ohne wesentliche Verzögerungen verfügbar sind. Beispielsweise ist in sehr schnellen Cache-Speichern die Arbeitsgeschwindigkeit durch die gleiche Taktfrequenz festgelegt, wie sie in dem CPU-Kern verwendet wird. Um einen Cache-Speicher in einer effizienten Weise zu verwenden, wird vorteilhaft die Tatsache ausgenutzt, dass in einer komplexen Sequenz aus Befehlen, die eine beliebige Art an Anwendung repräsentieren, gewisse Befehle häufig zwei- oder mehrere Male ausgeführt werden, wobei lediglich einige andere Befehle dazwischen liegen, so dass ein entsprechender Block aus Befehlen innerhalb eines Cache-Speichers für Zugriff durch die CPU bewahrt werden kann und dynamisch gemäß dem Voranschreiten des Programms aktualisiert wird. In ähnlicher Weise wird in vielen Arten von Programmsequenzen die gleiche Speicherstelle mehrere Male innerhalb der sehr begrenzten Sequenz aus Programmkodierung abgerufen, so dass der entsprechende Inhalt in einem Cache-Speicher abgelegt wird und auf diesen effizient von der zentralen Recheneinheit bei hoher Geschwindigkeit zugegriffen werden kann. Aufgrund der sehr begrenzten Speicherkapazität des Cache-Speichers kann jedoch nur ein kleiner Teil des Hauptspeichers während einer gewissen Zeit im Cache-Speicher gehalten werden.
  • Folglich wurden geeignete Hardware- und Softwarestrategien entwickelt, um eine hohe Rate an ”Cache-Treffern” zu erhalten, die als Speicheroperationen betrachtet werden, die an Speicherstellen ausgeführt werden, von denen eine Kopie noch in dem schnellen Cache-Speicher enthalten ist, so dass Speicheroperationen unter Anwendung des Cache-Speichers ausgeführt werden können. In anderen Fällen müssen große Datenarrays in dem Hauptspeicher gehalten werden, beispielsweise wenn digitale Bilder und dergleichen gespeichert werden, wobei für gewöhnlich die Daten ein zusammenhängendes Teilarray bzw. Teilfeld des Speichers einnehmen. In vielen Arten von Programmen sind sehr viele Datenzugriffe erforderlich, um auf Datenarrays zu operieren, wobei das Zugreifen auf einen Arraypunkt mit dem Zugreifen auf einen weiteren Arraypunkt verknüpft ist, der in der ”Nachbarschaft” der Speicherstelle angeordnet ist, auf die zuvor zugegriffen wurde. Durch Kopie ren eines Bereichs der Nachbarschaft der Speicherstelle, auf die aktuell von der zentralen Recheneinheit zugegriffen wird, in den Cache-Speicher gibt es daher eine hohe Wahrscheinlichkeit, dass ein oder mehrere nachfolgende Speicherzugriffe zu Cache-Treffer führen. Auf diese Weise kann die bestehende Lücke zwischen dem Leistungsverhalten des Mikroprozessors und dem Leistungsverhalten eines Hauptspeichersystems, etwa von D-RAM-Einrichtungen, verringert werden, indem geeignete Techniken verwendet werden, die dazu gestaltet sind, die Verzögerung der Hauptspeicherzugriffe auf der Grundlage von Strategien, wie sie zuvor beschrieben sind, zu reduzieren oder zu ”verstecken”.
  • Obwohl diese Strategien in Verbindung mit geeignet gestalteten Cache-Speicherhierarchien, d. h. Cache-Speicher mit unterschiedlichen Ebenen des Leistungsverhaltens, sehr effizient sind beim Verringern der Bearbeitungszeiten für Daten, auf die am häufigsten zugegriffen wird, ist dennoch in vielen Anwendungen die Laufzeit im Wesentlichen durch Wartezeiten der zentralen Recheneinheit aufgrund der häufigen Speicherzugriffe auf das Hauptspeichersystem bestimmt. Beispielsweise enthalten eine Vielzahl von wissenschaftlichen Berechnungen, von Bildverarbeitungsanwendungen und dergleichen, große Datenarrays, auf die häufig zugegriffen wird. In dieser Situation kann das Leistungsverhalten eines Computersystems durch weitere Strategien verbessert werden, etwa das Optimieren der Quellenkodierung der betrachteten Anwendungen und dergleichen, wobei prozessorspezifische Eigenschaften Berücksichtigung finden, um damit die verfügbaren Ressourcen der interessierenden Plattform zu optimieren. Beispielsweise ist ein sehr effizientes Hilfsmittel zum Optimieren einer Anwendung die sogenannte Vorabholtechnik, in der Befehle und/oder Daten aus dem Hauptspeichersystem vor dem eigentlichen Ausführen oder Verarbeiten der Befehle und Daten in der zentralen Recheneinheit abgeholt werden. Das heißt, im Falle der Datenvorabholung wird auf das Hauptspeichersystem zugegriffen, um einen Teil eines Datenarrays in Cache-Speicher zu kopieren, wobei von dem Bereich angenommen wird, dass er in dem Programm später abgerufen wird. Eine Datenvorabholungstechnik kann in zwei Kategorien unterteilt werden, d. h. in eine softwareinitiierte Vorabholung und in eine hardwareinitiierte Vorabholung. Die softwareinitiierte Datenvorabholung kann als eine Technik betrachtet werden, in der zusätzliche Befehle in die anfängliche Programmkodierung eingefügt werden, was typischerweise auf der Grundlage von Compiler-Modulen bewerkstelligt wird, die einen anfänglichen Befehlssatz, der typischerweise als Quellenkodierung bereitgestellt wird, die in einer Hochsprache erstellt wird, etwa C++, Java, Fortran und dergleichen, in einem Maschinenkodierungsbefehlssatz übersetzt, der von einer speziellen Mikroprozessorplattform ausführbar ist. Zu diesem Zweck unterstützt typischerweise die Platt form eine Art an Vorabholbefehl, der zu einem Speicherzugriff führt, um damit eine Speicherstelle typischerweise in Verbindung mit der entsprechenden Nachbarschaft in den Cache-Speicher zu kopieren, während eine zentrale Recheneinheit weiterhin Befehle ausführt, die aktuell nicht den Inhalt der Speicherstelle benötigen, die aktuell im voraus abgeholt wird. Um eine hohe Effizienz der Datenvorabholtechnik zu erreichen, müssen zwei Kriterien berücksichtigt werden. Erstens, die im voraus abzuholenden Daten sollten vorzugsweise Daten repräsentieren, die zu einem ”Cach-Fehltreffer” zu dem Zeitpunkt führen würden, wenn der entsprechende Befehl, der die betrachtete Speicherstelle anspricht, ausgeführt wird. Beispielsweise führen Vorabholoperationen, die für Daten ausgegeben werden, die bereits in dem Cache-Speicher sind, zu einem zusätzlichen Aufwand und würden zu einer höheren Komplexität und damit zu einer größeren Laufzeit führen. Zweitens, das Ausgeben der Vorabholoperation während der Laufzeit muss in geeigneter Weise disponiert werden, so dass die interessierenden Daten im Cache-Speicher sind, wenn ein entsprechender Speicherzugriff für diese Daten von der zentralen Recheneinheit ausgeführt wird. Folglich erfordert eine geeignete Einfügung von Vorabholbefehlen in eine bestehende Programmkodierung eine entsprechende Analyse der Programmsequenz, wobei auch Vorteile und mögliche Nachteile, die durch die zusätzlichen Befehle hervorgerufen werden, im Hinblick aufeinander abgewogen werden müssen, um damit eine deutliche Leistungssteigerung während der Laufzeit des Programms zu erreichen.
  • Vielversprechende Kandidaten zur Steigerung der Leistungsfähigkeit durch Datenvorabholung durch das Einfügen zusätzlicher Vorabholbefehle während der Kompile-Zeit sind Programmschleifen, in denen eine Sequenz aus Befehlen häufig wiederholt wird. Wenn beispielsweise auf ein Datenarray auf der Grundlage einer oder mehrerer Schleifen operiert wird, die auch verschachtelte Schleifen, abhängig von der Dimension des betrachteten Datenarrays sein können, hängen die Speicherzugriffe von der Schleifenvariable, d. h. dem Schleifenzähler, in einer sehr vorhersagbaren Weise ab, so dass entsprechende Speicheradressen durch Datenvorabholoperationen zu einer geeigneten Zeit ermittelt werden können, d. h. eine geeignete Anzahl von Operationen der Schleife im voraus, so dass entsprechende Daten verfügbar sind, wenn auf diese in einem späteren Durchlauf der Schleife zugegriffen wird. Effiziente Datenvorabholstrategien während der Kompilation der Quellenkodierung wurden im Zusammenhang mit der Optimierung von Schleifenverarbeitungen entwickelt, indem ein gewisser Grad an Parallelität während des Programms angewendet wird. Beispielsweise erlauben gewisse Arten von Schleifen zumindest in Bereichen davon, eine parallele Verarbeitung, beispielsweise durch Operieren auf Datenarrays in paralleler Weise, auf die in der Quellenkodierung ursprünglich durch einen einzelnen Befehl zugegriffen wurde.
  • 1 zeigt schematisch eine Tabelle, die eine durch einen Schleifenzähler oder eine Schleifenvariable i definierte Schleife enthält, die die Anzahl an Durchläufen der Schleife bestimmt. In dem gezeigten Beispiel variiert der Schleifenzähler i zwischen 1 und 1000 mit einer Schrittweite von 1. Ferner sind die Schleifen-Speicherzugriffe auf der Grundlage von Datenarrays a, b und c auszuführen. Somit sind in dem in der Schleife enthaltenen Befehl auf die Datenarrays a, b, c in jedem Durchlauf zuzugreifen. Durch Bereitstellen geeigneter Ressourcen in einem Mikroprozessor kann somit die Schleife der 1 vektorisiert werden, indem mehrere Speicherzugriffe parallel ausgeführt werden. Wenn beispielsweise vier Datenpunkte parallel verarbeitet werden, erfordert die Schleife lediglich ein Viertel der anfänglichen Iterationen, wodurch deutlich das gesamte Leistungsverhalten verbessert wird. Aus diesem Grunde sind in vielen Prozessorarchitekturen geeignete Ressourcen eingerichtet, etwa SIMD-(einzelner Befehl, mehrere Daten) Befehle, die sehr effizient sind, um die gesamte Verarbeitungsgeschwindigkeit zu erhöhen, wobei diese noch weiter gesteigert werden kann durch Datenvorabholtechniken, um sicherzustellen, dass die durch die parallele Verarbeitung erforderlichen Daten in Cache-Speicher zum geeigneten Zeitpunkt verfügbar sind. Folglich ist in Kompiler-Systemen ein Mechanismus zum Erkennen geeigneter Kandidaten für die Datenvorabholung und für das Einfügen der entsprechenden Vorabholbefehle in eine Sequenz aus Befehlen für gewöhnlich eng mit einer Vektorisierungsphase während der Kompilation verknüpft.
  • Jedoch sind auch andere wichtige Vorabholgelegenheiten in Schleifen vorhanden, die nicht für die Vektorisierung ausgewählt werden, wenn entsprechende Voraussetzungen für den Vektorisierungsmechanismus nicht erfüllt sind. Derartige Schleifen werden im Weiteren als skalare Schleifen bezeichnet. Skalare Schleifen besitzen häufig Schleifenkörper mit mehreren Basisblöcken oder Schleifen, die während separater Phasen im Kompilierungsvorgang ”sequenziell abgewickelt” werden. Aus diesem Grund kann die Vorabholimplementierung, die in einer Vektorisierungsphase für vektorisierbare Schleifen integriert ist, nicht in einfacher Weise erweitert werden, um skalare Schleifen zu behandeln.
  • Aus diesem Grunde wurden in vielen wissenschaftlichen Aktivitäten mathematische Modelle entwickelt, um zu ermitteln und zusammenzufassen, wie Speicherstellen eines Arrays durch diverse Schleifenverschachtelungen und Programmkonstrukte komplexer Anwendungen abgerufen werden können. Die Implementierung entsprechender Module erfordert einen wesentlichen Aufwand und kann auch zu längeren Kompilationszeiten beitragen, wobei jedoch die Wirksamkeit aufgrund der Komplexizität in einem Speichersuchsystem und den komplexen Wechselwirkungen zwischen Software und den Hardwarekomponenten schwer vorhersagbar ist.
  • Beispielsweise ist in V. Santhanam, E. Garnisch, W. Hsu "Datenvorabholung auf dem HPPA-8000", Schriften des Internationalen Symposiums der Computerarchitektur (ISCA), Seiten 264 bis 273, 1997 ein Kompiler-Datenvorabholkonzept offenbart, das auf Arrayelementzugriffe abzielt, wobei eine komplexe Prozessstrategie erforderlich ist. Heanne Ferrante, Vivek Sarkar, W. Thrasch offenbaren in "Abschätzung und Verbesserung der Cache-Effektivität", gesammelte Schriften von Sprachen und Kompiler für die Parallel-Computerabarbeitung", 4. Internationaler Workshop, Seiten 328 bis 343, August 1991 und S. Ghosh, M. Martomosi, S. Milik in "Cache-Fehlgleichungen mit einem Kompilerkonzept zum Analysieren und Verbessern des Speicherverhaltens", ACM Transaktionen für Programmiersprachen und Systeme (TOPLAS), Band 21, Ausgabe 4, Seiten 703 bis 746, 1999 zwei entsprechende Module, um Speicherzugriffmuster in Programmen zu ermitteln und darzustellen, um damit unterschiedliche Speicheroptimierungen aufzuzeigen, die die Vorabholung enthalten. Ferner offenbaren C. Luk, T. Mowry, "Kompiler-basierte Vorabholung für rekursive Datenstrukturen", ACM SIGOPS Betriebssystemüberblick, Band 30, Ausgabe 5, Seiten 222 bis 233, 1996 eine wissenschaftliche Arbeit zum Erzeugen von Vorabholungen für rekursive Datenstrukturen, auf die durch Zeigerreferenzen zugegriffen wird, ohne dass jedoch der Arrayzugriff oder indirekte Zugriffe über indizierte Arrays beschrieben ist.
  • Angesichts der zuvor beschriebenen Situation betrifft die vorliegende Offenbarung effiziente Vorabholtechniken auf der Grundlage von Vorabholbefehlen, während ein oder mehrere der oben erkannten Probleme vermieden oder zumindest reduziert werden.
  • Überblick über die Offenbarung
  • Im Allgemeinen stellt die vorliegende Offenbarung Techniken und Systeme bereit, in denen die Datenvorabholung in einer effizienten Weise bewerkstelligt wird, indem ein wirksamer Satz an heuristischen Konzepten zum Bewerten von Schleifen in einer Sequenz aus Befehlen, d. h. in einer Programmkodierung, insbesondere für nicht-vektorisierbare Schleifen, bereitgestellt wird. Zu diesem Zweck werden die Induktionstabellen, die mit jeder der Schleifen verknüpft sind, als eine Basis zum Bestimmen geeigneter Kandidaten für die Datenvorabholung und zum Eliminieren von Kandidaten, die zu einer redundanten Cache-Zeilenab holung führen würden, verwendet. Die Induktionstabellen der diversen Schleifen werden typischerweise während der Kompile-Zeit des Quellencodes erstellt, um gewisse Optimierungen auszuführen, etwa das Aufrollen der Schleifen und dergleichen. Folglich kann die Implementierung einer Datenvorabholung für beliebige Arten von Schleifen, etwa skalare Schleifen, auf der Grundlage verfügbarer Datenstrukturen, d. h. der Induktionstabellen, bewerkstelligt werden, wodurch der zusätzliche Aufwand im Vergleich zu konventionellen Strategien reduziert wird, wobei auch für eine zusätzliche Flexibilität im Vergleich zu Vorabholalgorithmen gesorgt ist, die in der Vektorisierungsphase eingerichtet werden, da die hierin offenbarte Vorabholtechnik während einer beliebigen geeigneten Phase während der Kompilierzeit angewendet werden kann, sobald die Induktionstabellen verfügbar sind. Ferner kann in einigen anschaulichen, hierin offenbarten Aspekten, die Datenvorabholtechnik effizient auf Speicherzugriffe angewendet werden, die durch andere Speicherzugriffe in skalaren Schleifen adressiert sind. Somit kann auf der Grundlage linearer Ausdrücke der Induktionsvariablen eine sehr effiziente und flexible Vorabholtechnik erreicht werden, ohne dass aufwendige Aufwandsmodelle erforderlich sind, um Speicherzugriffe in dem Programm zu analysieren und zu erkennen, wie dies typischerweise in konventionellen Strategien der Fall ist.
  • Ein anschauliches, hierin offenbartes Verfahren betrifft die Erzeugung von Datenvorabholbefehlen für eine Verarbeitungseinheit, die Cache-Speicher aufweist. Das Verfahren umfasst das Erhalten einer Induktionstabelle für eine Schleife aus Befehlen, die in einem Zwischensatz aus Befehlen enthalten ist, der mit einem anfänglichen Satz aus Befehlen in Form einer Programmkodierung verknüpft ist. Das Verfahren umfasst ferner das Bestimmen eines möglichen Vorabholkandidaten aus jedem von mehreren Einträgen der Induktionstabelle, wobei die möglichen Vorabholkandidaten Induktionsvariable repräsentieren, die für einen Datenvorabholvorgang verwendbar sind. Das Verfahren umfasst ferner das Eliminieren eines oder mehrerer der potenziellen Vorabholkandidaten auf der Cache-Speicher-spezifischer Kriterien. Des Weiteren wird ein Vorabholbefehl für alle nicht eliminierten Vorabholkandidaten in der Schleife erzeugt. Ferner umfasst das Verfahren das Erzeugen einer Maschinenkodierung des Zwischensatzes, wobei die Maschinenkodierung einen Satz aus Maschinenbefehlen repräsentiert, der von der Verarbeitungseinheit ausführbar ist.
  • Eine anschauliche, hierin offenbarte Vorrichtung umfasst eine Prozessoreinheit und einen Speicher, der mit der Prozessoreinheit verbunden ist. Des Weiteren umfasst die Vorrich tung ein Kompilermodul, das in dem Speicher angeordnet und ausgebildet ist, einen Vorabholbefehl in eine Schleife aus Befehlen einzufügen, indem mögliche Vorabholkandidaten von Induktionsvariablen der Schleife auf der Grundlage einer Induktionstabelle bestimmt werden und indem zugehörige Vorabholabstände bestimmt werden.
  • Ein anschauliches, hierin offenbartes Speichermedium umfasst einen Satz aus Befehlen, die ein Computersystem beim Ausführen der Gruppe aus Befehlen veranlassen, die folgenden Aktivitäten auszuführen: Erhalten einer Induktionstabelle für eine Schleife aus Befehlen, die in einer Gruppe aus vorläufigen Befehlen enthalten sind, die einer Quellenprogrammkodierung entspricht; Bestimmen möglicher Vorabholkandidaten für jeden von mehreren Einträgen der Induktionstabelle, wobei die möglichen Vorabholkandidaten Induktionsvariablen repräsentieren, die zum Ausführen einer Datenvorabholoperation verwendbar sind; Eliminieren eines oder mehrerer der möglichen Vorabholkandidaten auf der Grundlage Cache-Speicher-spezifischer Kriterien eines Cache-Speichers, der in Verbindung mit einer speziellen Datenverarbeitungseinheit zu verwenden ist; Erzeugen eines Vorabholbefehls für alle nicht eliminierten Vorabholkandidaten in der Schleife; und Erzeugen einer Maschinenkodierung der vorläufigen Gruppe aus Befehlen, wobei die Maschinenkodierung eine Gruppe aus Maschinenbefehlen repräsentiert, die von der speziellen Verarbeitungseinheit ausführbar sind.
  • Kurze Beschreibung der Zeichnungen
  • Weitere Ausführungsformen der vorliegenden Offenbarung sind in den angefügten Patent ansprüchen definiert und gehen deutlicher aus der folgenden detaillierten Beschreibung hervor, wenn diese mit Bezug zu den begleitenden Zeichnungen studiert wird, in denen:
  • 1 eine Tabelle darstellt, die eine einfache Schleife aus Befehlen repräsentiert;
  • 2a schematisch ein Verarbeitungssystem, etwa einen Mikroprozessor in Verbindung mit einem Speichersystem darstellt, der auf der Grundlage einer Vorabholtechnik, basierend auf linearen Ausdrücken von Induktionsvariablen, gemäß anschaulicher Ausführungsformen betrieben wird;
  • 2b schematisch ein Kompilermodul mit einer Vorabholoptimierungseinheit für skalare Schleifen gemäß anschaulicher Ausführungsformen zeigt;
  • 2c schematisch verschachtelte Schleifen zeigt, die auf der Grundlage von Vorabholtechniken optimiert werden können;
  • 2d schematisch Induktionstabellen zeigt, die zum Bestimmen möglicher Kandidaten für Vorabholoperationen gemäß anschaulicher Ausführungsformen verwendet werden;
  • 2e schematisch ein Modul zum Einfügen von Vorabholbefehlen während der Kompilierphase gemäß anschaulicher Ausführungsformen zeigt;
  • 2f schematisch ein Flussdiagramm zum Auswählen möglicher Kandidaten für die Datenvorabholung auf der Grundlage vordefinierter Kriterien gemäß anschaulicher Ausführungsformen zeigt;
  • 2g schematisch ein Flussdiagramm zum Ermitteln von Vorabholadressen mit Indizes für indirekt angesprochene Datenarrays gemäß anschaulicher Ausführungsformen zeigt;
  • 2h schematisch ein Flussdiagramm zum Bestimmen eines Vorabholabstands gemäß anschaulicher Ausführungsformen zeigt;
  • 2i schematisch diverse Unterteilungen möglicher Kandidaten gemäß anschaulicher Ausführungsformen zeigt;
  • 2j schematisch ein Flussdiagramm zum Eliminieren potenzieller Kandidaten zeigt, um redundante Vorabholoperationen zu vermeiden, die die gleiche Cache-Zeile gemäß anschaulicher Ausführungsformen betreffen;
  • 2k schematisch das Erzeugen eines Vorabholbefehls zeigt; und
  • 2l schematisch ein Computersystem zeigt, das ein Speichersystem mit einem Kompilermodul gemäß den hierin offenbarten Prinzipien enthält.
  • Detaillierte Beschreibung
  • Obwohl die vorliegende Offenbarung mit Bezug zu den Ausführungsformen beschrieben ist, wie sie in der folgenden detaillierten Beschreibung sowie in den Zeichnungen dargestellt sind, sollte beachtet werden, dass die folgende detaillierte Beschreibung sowie die Zeichnungen nicht beabsichtigen, die vorliegende Offenbarung auf die speziellen anschaulichen offenbarten Ausführungsformen einzuschränken, sondern die beschriebenen anschaulichen Ausführungsformen stellen lediglich beispielhaft die diversen Aspekte der vorliegenden Offenbarung dar, deren Schutzbereich durch die angefügten Patentansprüche definiert ist.
  • Im Allgemeinen stellt die vorliegende Offenbarung Systeme, Techniken und Speichermedien bereit, die Datenvorabholtechniken betreffen, in denen lineare Ausdrücke von Induktionsvariablen als eine Basis zum Erkennen möglicher Kandidaten für den Vorabholvorgang verwendet werden, wobei zugehörige Vorabholabstände bzw. Distanzen bestimmt werden, um redundante Vorabholoperationen zu verhindern. Da die hierin offenbarten Techniken auf Daten beruhen, die Induktionsvariable der diversen Schleifen repräsentieren, können aufwendige Strategien zum Abschätzen der Schleifenkörper des Programms vermieden werden, wodurch zu einer besseren Effizienz und Flexibilität für das Einbauen der Datenvorabholtechnik in Kompilermodule beigetragen wird, ohne dass eine Beschränkung auf spezielle Kompilerphasen erfolgt. Im Gegensatz zu vielen konventionellen Vorgehensweisen ist folglich ein moderat geringer Aufwand für die Implementierung ausreichend und die gesamte Kompilierzeit kann verringert werden. Ferner können indirekte Speicherzugriffe auf der Grundlage der hierin offenbarten Prinzipien im voraus abgeholt werden.
  • Mit Bezug zu den 2a bis 2n werden nunmehr weitere anschauliche Ausführungsformen detaillierter beschrieben.
  • 2a zeigt schematisch ein Verarbeitungssystem 200, das eine Verarbeitungseinheit 210, etwa eine CPU, oder eine andere Digitalschaltung aufweist, die arithmetische Berechnungen und dergleichen ausführen kann, wie dies typischerweise für das Ausführen komplexer Anwendungen erforderlich ist. Die Verarbeitungseinheit 210 umfasst eine arithmetische logische Einheit 212 in Verbindung mit einem Cache-Speicher 211, beispielsweise einem Daten-Cache-Speicher, der einen geeigneten Aufbau im Hinblick auf Größe und Arbeitsgeschwindigkeit besitzt, wie dies auch zuvor erläutert ist. Beispielsweise umfasst der Cache-Speicher 211 eine gewisse Anzahl an Cache-Zeilen, wovon jede durch eine gewisse Anzahl an Bytes, etwa 64 Bytes, repräsentiert ist. Es sollte jedoch beachtet werden, dass die hierin offenbarten Prinzipien nicht als auf eine spezielle Konfiguration der Verarbeitungseinheit 210 und insbesondere des Cache-Speichers 211 beschränkt erachtet werden soll. Ferner ist ein Speichersystem 220 vorgesehen, das einen beliebigen Speicher repräsentiert, etwa einen DRAM, einen Flash-Speicher und dergleichen, der eine deutliche höhere Verarbeitungszeit im Vergleich zu dem Cache-Speicher 211 aufweist, wie dies auch zuvor erläutert ist. Zum Beispiel kann in dem Speicher 220 ein Speicherbereich für ein Datenarray reserviert sein, das als Array a bezeichnet wird, das Datenpunkte einer Anwendung repräsentiert, die in dem System 200 ausgeführt wird. Zum Beispiel wird eine Sequenz oder eine Gruppe aus Befehlen 213, die eine Anwendung oder einen Teil davon repräsentieren, in dem System 200 ausgeführt, indem beispielsweise Befehle aus dem Speicher 220 abgerufen werden, zumindest eine gewisse Anzahl an Befehlen in einem geeigneten Speicher innerhalb der Verarbeitungseinheit 210 abgelegt werden und indem die Befehle in der Einheit 212 ausgeführt werden. Beispielsweise enthalten die Befehle 213 eine Schleife 213L, die darin eingerichtet einen Vorabholbefehl aufweist, um damit in geeigneter Weise einen Bereich des Datenarrays a in dem Cache-Speicher 211 zu dem Zeitpunkt zu halten, wenn einer oder mehrere der entsprechenden Datenpunkte von der Einheit 212 abgerufen werden. In einer anschaulichen Ausführungsform repräsentiert die Schleife 213L eine skalare Schleife, d. h. eine nicht-vektorisierbare Schleife, die als eine Schleife betrachtet wird, die keine parallele Verarbeitung erlaubt. Wie zuvor erläutert ist, kann die Sequenz oder Gruppe aus Befehlen 213 als ein Satz aus Maschinenkodierungsbefehlen bereitgestellt werden und ist speziell angepasst an die Eigenschaften der Verarbeitungseinheit 210, was typischerweise durch Umwandeln der Quellenkodierung einer Anwendung in eine Maschinenkodierung bewerkstelligt wird, die von der Einheit 210 gelesen werden kann. Aufgrund der Komplexität moderner Anwendungen wird eine entsprechende Umwandlung in einer automatisierten Weise unter Anwendung eines Kompilersystems ausgeführt.
  • 2b zeigt schematisch ein Kompilersystem 250 gemäß anschaulicher Ausführungsformen, das mehrere Module 251, 252, 260 und 253 aufweist. Beispielsweise repräsentiert das Modul 251 ein sogenanntes Eingangsmodul, in welchem eine Quellenkodierung 213s empfangen und in eine Kodierung aus Zwischenbefehlen umgewandelt wird, wobei mehrere entsprechende Zwischenkodierungsformate im Stand der Technik gut etabliert sind. Ferner ist das Modul 252 vorgesehen, das die Sequenz aus Befehlen, die in einem Zwischenformat 251s bereitgestellt werden, analysiert, um das Leistungsverhalten eines tatsächlichen Satzes aus Maschinenkodierungsbefehlen, etwa der Gruppe 213 aus 2a, zu verbessern, wenn diese in einer speziellen Prozessorplattform, etwa dem System 200 aus 2a, ausgeführt wird. Zu diesem Zweck sind eine Vielzahl bekannter Optimierungsstrategien in dem Modul 252 eingerichtet. Zum Beispiel wird eine Schleifenoptimierung auf der Grundlage von Induktionstabellen und dergleichen ausgeführt. Das Kompilermodul 250 umfasst ferner ein Vorabholoptimierungsmodul 260, das ausgebildet ist, eine Datenvorabholung für beliebige Arten von Schleifen und insbesondere für skalare Schleifen, einzurichten. Zu diesem Zweck umfasst das Modul 260 einen geeigneten Mechanismus zum Operieren auf Datenstrukturen, etwa den Induktionstabellen, ohne dass eine aufwendige Analyse von Schleifenkörpern und dergleichen erforderlich ist, wie dies nachfolgend beschrieben ist. Des Weiteren umfasst das Kompilermodul 250 ein Maschinenkodierungsmodul 253, das ausgebildet ist, Maschinenkodierungsbefehle, etwa die Befehle 213 aus 2a, die von dem System 200 ausführbar sind, zu erzeugen.
  • 2c zeigt schematisch in vereinfachter Form eine Schleife, wie sie typischerweise in Quellenkodierungen vieler Arten von Anwendungen enthalten ist. Der Einfachheit halber enthält eine erste oder äußere Schleife, die als Schleife I bezeichnet ist, Befehle, die auf einem Datenarray A auf der Grundlage einer Schleifenvariable I und einer weiteren Variablen K operieren, die von der Schleifenvariablen I abhängt. Ferner repräsentiert eine zweite Schleife, die als Schleife J angegeben ist, eine innere Schleife und kann ebenfalls auf dem Datenarray A operieren. Es sollte beachtet werden, dass die Darstellungen der Schleifen I und J nicht der Darstellung einer etablierten Programmiersprache entsprechen und lediglich anschauliche Zwecke erfüllen. Wie zuvor erläutert ist. ergeben Datenzugriffe auf der Grundlage von Schleifenvariablen und linearen Ausdrücken davon einen sehr hohen Grad an Vorhersagbarkeit entsprechender Speicherzugriffe, wodurch günstige Voraussetzungen zum Einrichten einer Datenvorabholstrategie geschaffen werden. Beispielsweise repräsentieren in der äußeren Schleife I Variablen VAR1 und VAR2 Operationen, um auf das Datenarray A an unterschiedlichen Adressen zuzugreifen, die mit den Variablen I und K verknüpft sind. In ähnlicher Weise repräsentiert in der Schleife J eine Variable VAR3 eine Operation zum Zugreifen auf das Datenarray A auf der Grundlage einer Adresse, die mit der Schleifenvariablen J verknüpft ist.
  • Während einer geeigneten Phase eines Kompilierungsvorganges wird jede Schleife, die in der Anwendung definiert ist, im Hinblick auf Induktionsvariablen analysiert, die Variablen repräsentieren, die erhöht oder verringert werden, um einen festgelegten Betrag bei jedem Durchlauf bzw. jeder Iteration einer Schleife. Ferner kann auch eine lineare Funktion einer Induktionsvariable als eine Induktionsvariable betrachtet werden. In dem in 2c gezeigten Beispiel sind die Schleifenvariablen I und J, die bei jedem Durchlauf um einen konstanten Betrag erhöht oder verringert werden, als Induktionsvariable zu betrachten. Ferner ist auch die Variable K, die eine lineare Funktion der Schleifenvariablen I ist, als eine Induktionsvariable zu betrachten. Folglich enthält in dem gezeigten Beispiel die Schleife I zwei Induktionsvariablen I und K, während die Schleife J die Induktionsvariable J besitzt. Es soll te beachtet werden, dass typischerweise eine beliebige Anzahl an Induktionsvariablen mit einer speziellen Schleife, abhängig von der Komplexität der Datenzugriffe verknüpft ist.
  • 2d zeigt schematisch Induktionstabellen, die mit den Schleifen I und J aus 2c verknüpft sind. Wie gezeigt, repräsentiert die erste Induktionstabelle die Schleife J und enthält entsprechende Einträge für jede Induktionsvariable. In dem gezeigten Beispiel enthält die Tabelle Einträge, die der Variablen J und möglicherweise anderen Variablen entsprechen, die der Einfachheit halber nicht gezeigt sind. In ähnlicher Weise enthält eine zweite Induktionstabelle, die der Schleife I entspricht, zumindest die Einträge I und K, während auch andere Einträge, die weitere Variablen repräsentieren, enthalten sein können. Jeder der Einträge enthält Information und Attribute für jede Induktionsvariable. Gemäß den hierin offenbarten Prinzipien können diese Informationen bei Auswahl geeigneter Kandidaten für eine Vorabholoperation verwendet werden. Beispielsweise ist ein Attribut als LREF angegeben, das einen linearen Ausdruck für die interessierende Induktionsvariable auf der Grundlage einer Basis-Iriduktionsvariablen kennzeichnet. Ferner gibt BIV diejenige Basis-Induktionsvariable an, von der die aktuelle Variable abgeleitet ist. Ferner gibt der Begriff Is-LREF an, ob der Induktionsausdruck ein linearer Ausdruck ist oder nicht. Ein linearer Ausdruck ist als ein Ausdruck in der Form (a × BIV + b) zu verstehen, wobei a und b Konstanten während der Kompilier-Zeit sind. Des Weiteren zeigt der Punkt MEMOPS auf Speicheroperationen, in denen die Induktionsvariable für die Adressenberechnung verwendet wird. Ferner kann ein Attribut ”Vorabholadresse” der Ausdruck sein, um die vorabzuholende Adresse auf der Grundlage dieser Induktionsvariable bereitzustellen. Des Weiteren ist der Begriff Schrittweite ein weiterer Punkt, der den Änderungsbetrag der Induktionsvariable bei jedem Durchlauf der Schleife angibt. Die Schrittweite kann eine Konstante oder eine Variable zur Kompile-Zeit sein. Die Schrittweite kann negativ oder positiv sein.
  • Auf der Grundlage der Induktionstabellen und der zuvor beschriebenen entsprechenden Attribute können mögliche Kandidaten für das Vorabholen in jeder Schleife aus der Induktionstabelle, die mit einer interessierenden Schleife verknüpft ist, ermittelt werden.
  • 2e zeigt schematisch mehrere Module zum Einfügen geeigneter Vorabholbefehle in eine Sequenz aus Befehlen, was beispielsweise durch das Vorabholmodul 260, wie es in 2b gezeigt ist, bewerkstelligt werden kann. Das heißt, es wird ein Vorabholbefehl in eine betrachtete Schleife so eingefügt, dass Arraydaten in den Cache-Speicher zu jener Iteration der Schleife verfügbar sind, in der die Daten tatsächlich abgerufen werden. Wie gezeigt, wird im Modul 261 die Induktionstabelle für jede interessierende Schleife abgeru fen. Im Modul 262 wird jeder Eintrag der Induktionstabelle beispielsweise im Hinblick auf die Attribute, die zuvor mit Bezug zu 2d erläutert sind, geprüft. Im Modul 263 werden mögliche Vorabholkandidaten auf der Grundlage der Induktionstabelle und der jeweiligen Einträge ermittelt und im Modul 264 werden mögliche Kandidaten eliminiert, um damit ineffiziente Vorabholoperationen zu vermeiden, beispielsweise das Vorabholen von Arraydaten, die bereits in dem Cache-Speicher vorhanden sind. Schließlich werden im Modul 265 Vorabholbefehle für die verbleibenden Kandidaten der betrachteten Schleife erzeugt.
  • 2f zeigt schematisch ein Flussdiagramm, zum Ermitteln potenzieller Kandidaten für das Vorabholen. Im Schritt 261a wird der Punkt Is-LREF verifiziert, d. h. es wird bestimmt, ob der Wert wahr oder falsch ist. Wenn Is-LREF wahr ist, ist die zugehörige Induktionsvariable ein linearer Ausdruck. In diesem Fall geht der Prozessablauf weiter zum Schritt 261b, in welchem bestimmt wird, ob die Induktionsvariable tatsächlich in der Schleife verwendet wird. Beispielsweise werden die jeweiligen Speicheroperationen geprüft, um zu bestimmen, ob die Induktionsvariable tatsächlich benötigt wird oder nicht. Wenn die Verwendung der Induktionsvariable mit einer Bedingung verknüpft ist, beispielsweise wenn die Induktionsvariable zum Zugreifen auf das Datenarray auf der Grundlage einer speziellen Bedingung verwendet wird, wird eine geeignete Regel eingerichtet, um die Induktionsvariable als einen möglichen Kandidaten oder nicht zu betrachten. Beispielsweise kann die Bedingung, die den Arrayzugriff regelt, ignoriert werden und die Induktionsvariable kann als eine ”unbedingte Variable” betrachtet werden. In anderen Fällen wird eine dynamische profile Rückkopplungsinformation verwendet, um zu entscheiden, ob eine Induktionsvariable einen möglichen Kandidaten repräsentiert oder nicht. Wenn beispielsweise die Datei zugehörige Information angibt, dass eine Bedingung häufig erfüllt wird, kann die Variable als eine nicht-bedingte Variable betrachtet werden. Wenn Schritt 261b wahr ist, geht der Prozess zum Schritt 261c weiter, in welchem verifiziert wird, ob der Schleifenkörper einen vorbestimmten Schwellwert übersteigt. Es sollte beachtet werden, dass die Datenvorabholung gegebenenfalls nicht effizient ist oder das Leistungsverhalten verringern kann, wenn diese für Schleifen mit einem moderat kleinen Schleifenkörper ausgeführt wird. Beispielsweise wird ein Schwellwert von 15 verwendet. Jedoch kann der Schwellwert von prozessorspezifischen Kriterien und dergleichen abhängen. Die Schleifengröße wird als die Anzahl interner Noten betrachtet, die mit der relativen Ausführungshäufigkeit gewichtet sind. Wenn der Schritt 261c durchlaufen ist, dann wird im Schritt 261d die Schrittweite im Hinblick auf einen zulässigen Bereich hin überprüft. Beispielsweise kann ein zulässiger Bereich 8 Bytes sein, die um den betrachteten Speicherzugriff herum angeordnet sind. In anderen Fällen ist ein un zulässiger Bereich (–256B, 0B). Wenn die Verifizierung im Schritt 261d erfolgreich durchlaufen ist, kann der Prozessablauf zum Schritt 261e weitergehen, in welchem die entsprechende Induktionsvariable als ein möglicher Kandidat für die Datenvorabholung markiert wird. Wenn keine der Verifizierungen erfüllt wird, geht der Prozess zum Schritt 261f weiter, in welchem die Induktionsvariable nicht als eine mögliche Datenvorabholoperation Berücksichtigung findet.
  • 2g zeigt schematisch ein Flussdiagramm zum Bestimmen einer Vorabholadresse für einen möglichen Kandidaten, der im Schritt 261e ermittelt wurde. Wie gezeigt, wird im Schritt 261f eine Vorabholadresse auf der Grundlage des linearen Ausdrucks bestimmt, der mit der Induktionsvariable verknüpft ist, die als möglicher Kandidat erkannt wurde, wobei auch ein Vorabholabstand bzw. eine Vorabholdistanz in Bytes addiert wird.
  • Im Schritt 261g wird bestimmt, ob der lineare Ausdruck der Induktionsvariablen als ein Index für einen weiteren Speicherzugriff verwendet wird. Beispielsweise besitzt ein entsprechender Speicherzugriff die Form B[A[i]], so dass der Inhalt des Arrayelements A[i] die Adresse eines Arrayelements des Arrays B repräsentiert. Wenn die Induktionsvariable als ein Index verwendet wird, geht der Prozessablauf zum Schritt 261h weiter, in welchem die Vorabholadresse berechnet wird zu:
    i + Schrittweite/Größe von (Typ des Arrays A).
  • Das heißt, die Vorabholadresse für den Speicherzugriff im Array B ist durch das Arrayelement repräsentiert, das durch den zuvor angegebenen Ausdruck bezeichnet ist. Daraufhin geht der Prozessablauf zum Schritt 261i weiter, in welchem die Vorabholadresse zu dem zugehörigen Induktionstabelleneintrag hinzugefügt wird.
  • 2h zeigt schematisch einen Prozess zum Bestimmen des Vorabholabstands bzw. der Vorabholdistanz. Im Schritt 266a wird bestimmt, ob die Schrittweite gleich ist zu (–64B, 64B). Wenn dies der Fall ist, geht der Prozessablauf zum Schritt 266b weiter, in welchem der Vorabholabstand auf eine Länge von vier Cachezeilen festgelegt wird. Im Schritt 266c wird bestimmt, ob die Schrittweite größer als 1024 Bytes ist, in welchem Falle im Schritt 266d der Vorabholabstand auf zweimal die Schrittweite festgelegt wird. In jedem anderen Fall wird der Vorabholabstand auf die Länge der Schrittweite im Schritt 266e festgelegt.
  • Es sollte beachtet werden, dass die obengenannten Prozesse während der Kompilierzeit ausgeführt werden können, wenn die Schrittweite konstant ist. Im Falle einer variablen Schrittweite wird ein geeigneter Ausdruck so eingefügt, dass die Schrittweite zur Laufzeit berechnet wird, indem beispielsweise eine entsprechende Variable definiert wird, die die Differenz der Schrittweite zwei aufeinanderfolgender Durchläufe ”misst”, und indem die Variable zum Ausführen der Prozessschritte, die zuvor für eine konstante Schrittweite spezifiziert sind, während der Laufzeit verwendet wird.
  • Nach dem Identifizieren möglicher Kandidaten und dem Bestimmen der entsprechenden Vorabholadressen werden ein oder mehrere der möglichen Kandidaten eliminiert, um ungeeignete Vorabholoperationen zu vermeiden.
  • 2i zeigt schematisch ein entsprechendes Schema zum Bestimmen von Kandidaten, die für die Datenvorabholung zu verwerfen sind. Zu diesem Zweck werden alle Vorabholkandidaten, die zuvor erkannt wurden, und die durch einen Ausdruck a × BIV + b mit gleichem a und BIV repräsentiert sind, in eine spezielle Unterteilung einsortiert. Beispielsweise, wie in 2i gezeigt ist, werden alle möglichen Kandidaten, d. h. Induktionsvariablen, die durch einen entsprechenden linearen Ausdruck der Form a1 × BIV1, in die Unterteilung oder Gruppe 1 eingestuft. In ähnlicher Weise werden Induktionsvariablen, die durch a2 × BIV2 repräsentiert sind, in die Gruppe 2 eingeteilt. Folglich unterscheiden sich alle möglichen Kandidaten innerhalb einer speziellen Gruppe, etwa der Gruppe 1 und 2, voneinander durch unterschiedliche Koeffizienten b1, b2, b3 bzw. c1, c2. Es sollte beachtet werden, dass eine beliebige Anzahl an Kandidaten in einer speziellen Gruppe abhängig von der Anzahl an Variablen und ihren linearen Repräsentationen, vorhanden sein kann.
  • In einer anschaulichen Ausführungsform werden die Kandidaten einer speziellen Gruppe in aufsteigender Reihenfolge der Koeffizienten b sortiert, wie dies beispielsweise in 2i für die Gruppe 1 gezeigt ist. In diesem Fall sei angenommen, dass die folgende Reihenfolge erhalten wird: b3 < b1 < b2. Eine entsprechende Sortierung kann für jede Gruppe ausgeführt werden.
  • Auf der Grundlage der diversen Gruppen werden geeignete Kandidaten in der folgenden Weise ausgewählt. Der erste Kandidat wird in jeder Gruppe beibehalten. Wenn der nächste Kandidat in einer jeweiligen Gruppe einen Abstand bzw. Offsetwert b besitzt, der kleiner ist als eine Cache-Zeile in Bezug auf den letzten verbleibenden Kandidaten dieser Gruppe wird dieser nächste Kandidat entfernt. Dieser Vorgang wird für die restlichen Kandidaten in der betrachten Gruppe wiederholt.
  • 2j zeigt schematisch ein Flussdiagramm zum Eliminieren von Kandidaten für die anschauliche Gruppe 1, die redundante Vorabholoperationen hervorrufen. Es sollte beachtet werden, dass der Ablauf zum Eliminieren von Kandidaten leicht auf die Anzahl an Kandidaten in jeder Gruppe angepasst werden kann, wie dies zuvor beschrieben ist. Im Schritt 264a der Kandidat der Gruppe 1 mit dem Koeffizienten b3 ausgewählt. Im Schritt 264d wird die Gültigkeit des nächsten Kandidaten, d. h. in dem gezeigten Beispiel, des Kandidaten mit dem Koeffizienten b1, geprüft, indem ein Abstand zu dem vorhergehenden Kandidaten bestimmt wird, d. h. dem Kandidaten, der durch den Koeffizienten b3 repräsentiert ist. Wenn der entsprechende Abstand kleiner ist als die Größe einer Cachezeile, etwa 64B, geht der Prozessablauf zum Schritt 264g weiter, in welchem dieser Kandidat entfernt wird, da dieser zu einer unnötigen Vorabholoperation führen würde. Im Schritt 264h wird der dem Abstand b2 entsprechende Kandidat durch Vergleichen von b2 und b3 bewertet. Wenn der Abstand b2 innerhalb der Cache-Zeile liegt, wird der b2 entsprechende Kandidat im Schritt 264i eliminiert. Wenn der Abstand b2 größer oder gleich der Cache-Zeilengröße ist, wird der dem Abstand b2 entsprechende Kandidat im Schritt 264e als ein geeigneter Kandidat bewertet.
  • Wenn im Schritt 264b der Abstand größer oder gleich einer Cachezeile ist, geht der Prozessablauf zum Schritt 264c weiter, in welchem ein durch den Koeffizienten b1 repräsentierter Kandidat als ein geeigneter Kandidat ausgewählt wird. Dieser Kandidat wird dann mit dem verbleibenden Kandidaten, der zum Abstand b2 gehört, verglichen. Daher werden im Schritt 264d die Abstände b1 und b2 mit der Cache-Zeilengröße verglichen. Bei einem „Nein” im Schritt 264d wird der dem Abstand b2 entsprechende Kandidat im Schritt 264e als ein geeigneter Kandidat gewählt. Ansonsten wird dieser Kandidat im Schritt 264f entfernt.
  • 2k zeigt schematisch ein Flussdiagramm gemäß einem Prozess zum Einfügen einer geeigneten Vorabholoperation in eine zugehörige Schleife. Im Schritt 265a wird ein Vorabholbefehl für jeden Kandidaten erzeugt, der als ein geeigneter Kandidat in der einen oder mehreren zuvor ermittelten Gruppen erkannt wurde. Es sollte beachtet werden, dass geeignete Vorabholbefehle typischerweise von der entsprechenden Prozessorplattform unterstützt werden und damit effizient implementiert werden können. Daraufhin werden im Schritt 265b die Vorabholbefehle am Beginn der jeweiligen Schleife angeordnet.
  • 2l zeigt schematisch ein System 270 zum Erzeugen eines Maschinenkodierungsprogramms 213 mit Vorabholbefehlen, wie dies zuvor erläutert ist. Die erzeugte Kodierung kann dann in einer geeigneten Plattform verwendet werden, d. h., in einem Prozessorsystem mit einem Cache-Speicher in Verbindung mit einem Arbeitsspeicher, wobei aufgrund der eingefügten Vorabholbefehle Daten vom Speicher in den Cache vor der eigentlichen Verwendung der Daten im Prozessor eingeladen werden können. Beispielsweise umfasst das System 270 eine Verarbeitungseinheit 271 und ein Speichersystem 272, in welchem ein Kompilermodul zum Verbessern der Datenvorabholung eingerichtet ist. Beispielsweise ist das Modul 260, wie es zuvor beschrieben ist, in dem Speichersystem 272 eingerichtet. Beim Ausführen der diversen Submodule des Kompilermoduls 260 auf der Basis einer Quellkodireung 213s erzeugt damit die CPU 271 eine Gruppe aus Maschinenkodierungsbefehlen, etwa die Gruppe aus Befehlen 213 mit einer Schleife, die einen Vorabholbefehl aufweisen, der auf der Grundlage der zuvor beschriebenen Techniken eingefügt ist. Die Gruppe aus Befehlen 213 kann zum Betreiben einer komplexen Mikroprozessorplattform verwendet werden, etwa dem System 200, wie es in 2a gezeigt ist, wodurch eine deutliche Verbesserung erreicht wird, wenn direkte und/oder indirekte Arrayzugriffe in einer oder mehreren Schleifen auszuführen sind.
  • Es gilt als: Die vorliegende Offenbarung stellt eine effiziente Vorabholstrategie bereit, ohne dass aufwendige Abschätzmodelle erforderlich sind, und ohne dass das Ermitteln und das Analysieren von Arrayzugriffen für die betrachteten Programme erforderlich sind. In der vorliegenden Offenbarung werden einfache heuristische Konzepte beim Auswählen von Vorabholkandidaten und beim Bestimmen von Vorabholdistanzen angewendet. Der entsprechende Schleifenkörper muss nicht untersucht werden, um geeignete Vorabholkandidaten zu ermitteln. Des Weiteren ist die Vorabholstrategie von der Vektorisierung, dem Aufrollen von Schleifen und vielen anderen Optimierungsphasen entkoppelt, die typischerweise in gut etablierten Kompilertechniken eingesetzt werden. Dies ermöglicht eine effiziente Änderung in der Reihenfolge der Kompilerphasen während der Kompilierung, falls dies erforderlich ist, sofern die Induktionstabellen bereits verfügbar sind. Folglich können skalare Schleifen und Schleifenkörper mit mehreren Blöcken effizient im Hinblick auf die Datenvorabholung gehandhabt werden. Des Weiteren können indirekte Arrayzugriffe über indizierte Arrays im voraus abgeholt werden.
  • Weitere Modifizierungen und Variationen der vorliegenden Offenbarung werden für den Fachmann angesichts dieser Beschreibung offenkundig. Daher ist diese Beschreibung le diglich anschaulicher Natur und dient dem Zweck, dem Fachmann die allgemeine Art und Weise des Ausführens der hierin offenbarten Prinzipien zu vermitteln. Selbstverständlich sind die hierin gezeigten und beschriebenen Formen als die gegenwärtig bevorzugten Ausführungsformen zu betrachten.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • - V. Santhanam, E. Garnisch, W. Hsu ”Datenvorabholung auf dem HPPA-8000”, Schriften des Internationalen Symposiums der Computerarchitektur (ISCA), Seiten 264 bis 273, 1997 [0012]
    • - Heanne Ferrante, Vivek Sarkar, W. Thrasch offenbaren in ”Abschätzung und Verbesserung der Cache-Effektivität”, gesammelte Schriften von Sprachen und Kompiler für die Parallel-Computerabarbeitung”, 4. Internationaler Workshop, Seiten 328 bis 343, August 1991 [0012]
    • - S. Ghosh, M. Martomosi, S. Milik in ”Cache-Fehlgleichungen mit einem Kompilerkonzept zum Analysieren und Verbessern des Speicherverhaltens”, ACM Transaktionen für Programmiersprachen und Systeme (TOPLAS), Band 21, Ausgabe 4, Seiten 703 bis 746, 1999 [0012]
    • - C. Luk, T. Mowry, ”Kompiler-basierte Vorabholung für rekursive Datenstrukturen”, ACM SIGOPS Betriebssystemüberblick, Band 30, Ausgabe 5, Seiten 222 bis 233, 1996 [0012]

Claims (20)

  1. Verfahren zum Erzeugen von Datenvorabholbefehlen für eine Verarbeitungseinheit, die einen Cache-Speicher aufweist, wobei das Verfahren umfasst: Ermitteln einer Induktionstabelle für eine Schleife aus Befehlen, die in einer Gruppe aus Zwischenbefehlen enthalten ist, die mit einer anfänglichen Gruppe aus Befehlen verknüpft ist; Bestimmen möglicher Vorabholkandidaten für jeden von mehreren Einträgen der Induktionstabelle, wobei die möglichen Vorabholkandidaten Induktionsvariablen repräsentieren, die für eine Datenvorabholoperation verwendbar sind; Eliminieren eines oder mehrerer der möglichen Vorabholkandidaten auf der Grundlage Cache-Speicher-spezifischer Kriterien; Erzeugen eines Vorabholbefehls für alle nicht-eliminierten Vorabholkandidaten in der Schleife; und Erzeugen einer Maschinenkodierung aus der Gruppe aus Zwischenbefehlen, wobei die Maschinenkodierung eine Gruppe aus Maschinenbefehlen repräsentiert, die von der Verarbeitungseinheit ausführbar sind.
  2. Verfahren nach Anspruch 1, wobei Bestimmen möglicher Vorabholkandidaten umfasst: Verifizieren vordefinierter Attribute jedes Eintrags der Induktionstabelle.
  3. Verfahren nach Anspruch 2, wobei Verifizieren vordefinierter Attribute umfasst: Verifizieren der Linearität einer Induktionsvariable, die durch einen speziellen Eintrag repräsentiert ist.
  4. Verfahren nach Anspruch 3, wobei Verifizieren vordefinierter Attribute umfasst: Verifizieren der tatsächlichen Verwendung der Induktionsvariablen in der Schleife.
  5. Verfahren nach Anspruch 4, wobei Verifizieren vordefinierter Attribute umfasst: Verifizieren, dass eine Schleifenkörpergröße der Schleife größer als ein vordefinierter Schwellwert ist.
  6. Verfahren nach Anspruch 5, wobei Verifizieren vordefinierter Attribute umfasst: Verifizieren, dass eine Schrittweite, die mit der Induktionsvariablen verknüpft ist, innerhalb eines gültigen Bereichs liegt.
  7. Verfahren nach Anspruch 3, wobei Bestimmen eines möglichen Vorabholkandidaten ferner umfasst: Bestimmen einer Vorabholadresse auf der Grundlage der Induktionsvariablen und eines Vorabholabstands und Hinzufügen der Vorabholadresse zu dem Eintrag.
  8. Verfahren nach Anspruch 3, wobei Bestimmen eines möglichen Vorabholkandidaten umfasst: Bestimmen einer Vorabholadresse auf der Grundlage einer Schrittweite, die mit der Induktionsvariablen verknüpft ist, um auf ein erstes Datenarray zuzugreifen, und auf der Grundlage einer Größe des ersten Datenarrays, wenn die Induktionsvariable als ein Index zum Zugreifen auf ein zweites Datenarray verwendet wird.
  9. Verfahren nach Anspruch 7, das ferner umfasst: Bestimmen des Vorabholabstands auf der Grundlage einer Schrittweite, die mit der Induktionsvariablen verknüpft ist, und auf der Grundlage Cache-Speicher-spezifischer Eigenschaften.
  10. Verfahren nach Anspruch 7, wobei der Vorabholabstand gleich vier Cachezeilen ist, wenn die Schrittweite eine Länge von minus 64 Bytes plus 64 Bytes besitzt.
  11. Verfahren nach Anspruch 7, wobei der Vorabholabstand gleich ist zweimal der Schrittweite, wenn die Schrittweite größer als 1024 Bytes ist.
  12. Verfahren nach Anspruch 7, wobei der Vorabholabstand gleich ist der Schrittweite, wenn die Schrittweite gleich oder kleiner ist als 1024 Bytes und die Schrittweite eine Länge aufweist, die nicht minus 64 Bytes bis plus 64 Bytes beträgt.
  13. Verfahren nach Anspruch 3, wobei Bestimmen eines möglichen Vorabholkandidaten ferner umfasst: Bestimmen einer Vorabholadresse auf der Grundlage der Induktionsvariablen und einer Schrittweite, die mit der Induktionsvariablen verknüpft ist, und Hinzufügen eines Ausdrucks zum Berechnen eines Vorabholabstands auf der Grundlage der Schrittweite während der Laufzeit, wenn die Schrittweite eine Variable ist.
  14. Verfahren nach Anspruch 1, wobei Eliminieren eines oder mehrerer der möglichen Vorabholkandidaten umfasst: Entfernen redundanter Kandidaten, die mit der gleichen Basis-Induktionsvariablen verknüpft sind, wenn die redundanten Kandidaten zu einer Vorabholung der gleichen Cachezeile des Cache-Speichers führen.
  15. Verfahren nach Anspruch 14, wobei Entfernen redundanter Kandidaten umfasst: Gruppieren möglicher Kandidaten, die mit der gleichen Basis-Induktionsvariablen ver knüpft sind, in eine Gruppe und Beibehalten zumindest eines potenziellen Kandidaten, der den kleinsten Offsetwert in dem linearen Ausdruck besitzt, der mit dem mindestens einen potenziellen Kandidaten verknüpft ist.
  16. Verfahren nach Anspruch 15, das ferner umfasst: Sortieren der möglichen Kandidaten in aufsteigender Reihenfolge im Hinblick auf den Offsetwert der linearen Ausdrücke.
  17. Verfahren nach Anspruch 16, das ferner umfasst: Vergleichen entsprechender zweier benachbarter Kandidaten in der Reihenfolge und Entfernen eines Kandidaten mit dem größeren Offsetwert, wenn eine Differenz der Offsetwerte der zwei benachbarten Kandidaten kleiner als eine Cachezeile ist.
  18. Vorrichtung mit: einer Prozessoreinheit; einem mit der Prozessoreinheit verbundenen Speicher; und einem Kompilermodul, das in dem Speicher angeordnet und ausgebildet ist, einen Vorabholbefehl in eine Schleife aus Befehlen einzufügen, indem mögliche Vorabholkandidaten von Induktionsvariablen der Schleife auf der Grundlage einer Induktionstabelle bestimmt und indem zugehörige Vorabholabstände ermittelt werden.
  19. Vorrichtung nach Anspruch 18, wobei das Kompilermodul umfasst: ein erstes Sub-Modul, das zum Ermitteln der Induktionstabelle ausgebildet ist, ein zweites Sub-Modul, das ausgebildet ist, die möglichen Vorabholkandidaten aus jedem von mehreren Einträgen der Induktionstabelle zu bestimmen, ein drittes Sub-Modul, das ausgebildet ist, einen oder mehrere der möglichen Vorabholkandidaten auf der Grundlage spezieller Kriterien zu eliminieren, die mit einem Cache-Speicher eines speziellen Prozessors, der den Cache-Speicher enthält, verknüpft sind und wobei der Prozessor ausgebildet ist, Maschinenkodierungsbefehle auszuführen, ein viertes Sub-Modul, das ausgebildet ist, einen Vorabholbefehl für alle nicht-eliminierten Vorabholkandidaten in der Schleife zu erzeugen, und ein fünftes Sub-Modul, das ausgebildet ist, die Gruppe aus Maschinenkodierungsbefehlen aus der Gruppe aus Zwischenbefehlen zu erzeugen.
  20. Speichermedium mit einer Gruppe aus Befehlen, die ein Computersystem beim Ausführen der Gruppe aus Befehlen veranlassen, um eine Induktionstabelle für eine Schleife aus Befehlen, die in einer Gruppe aus Zwischenbefehlen, die mit einer Quellenprogrammierkodierung verknüpft ist, zu erhalten; mögliche Vorabholkandidaten aus jedem von mehreren Einträgen der Induktionstabelle zu bestimmen, wobei die möglichen Vorabholkandidaten Induktionsvariable repräsentieren, die zum Ausführen einer Datenvorabholoperation verwendbar sind; einen oder mehrere der möglichen Vorabholkandidaten auf der Grundlage Cache-Speicher-spezifischer Kriterien eines Cache-Speichers zu eliminieren, der in Verbindung mit einer speziellen Datenverarbeitungseinheit verwendet wird; einen Vorabholbefehl für alle nicht-eliminierten Vorabholkandidaten in der Schleife zu erzeugen; und eine Maschinenkodierung der Gruppe aus Zwischenbefehlen zu erzeugen, wobei die Maschinenkodierung eine Gruppe aus Maschinenbefehlen repräsentiert, die von der speziellen Verarbeitungseinheit ausführbar ist.
DE102009046876A 2009-03-31 2009-11-19 Verfahren und System für die Datenvorabholung für Schleifen auf der Basis linearer Induktionsausdrücke Withdrawn DE102009046876A1 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102009046876A DE102009046876A1 (de) 2009-03-31 2009-11-19 Verfahren und System für die Datenvorabholung für Schleifen auf der Basis linearer Induktionsausdrücke
US12/724,813 US8352686B2 (en) 2009-03-31 2010-03-16 Method and system for data prefetching for loops based on linear induction expressions

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
DE102009015750.6 2009-03-31
DE102009015750 2009-03-31
DE102009046876A DE102009046876A1 (de) 2009-03-31 2009-11-19 Verfahren und System für die Datenvorabholung für Schleifen auf der Basis linearer Induktionsausdrücke

Publications (1)

Publication Number Publication Date
DE102009046876A1 true DE102009046876A1 (de) 2010-10-07

Family

ID=42675142

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102009046876A Withdrawn DE102009046876A1 (de) 2009-03-31 2009-11-19 Verfahren und System für die Datenvorabholung für Schleifen auf der Basis linearer Induktionsausdrücke

Country Status (2)

Country Link
US (1) US8352686B2 (de)
DE (1) DE102009046876A1 (de)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8260602B1 (en) * 2006-11-02 2012-09-04 The Math Works, Inc. Timer analysis and identification
JP2014112327A (ja) * 2012-12-05 2014-06-19 Fujitsu Ltd 変換プログラム、変換装置及び変換方法
US9280474B2 (en) 2013-01-03 2016-03-08 Intel Corporation Adaptive data prefetching
US9047173B2 (en) * 2013-02-21 2015-06-02 Advanced Micro Devices, Inc. Tracking and eliminating bad prefetches generated by a stride prefetcher
CN104750696B (zh) * 2013-12-26 2018-07-20 华为技术有限公司 一种数据预取方法及装置
US10394536B2 (en) * 2017-03-02 2019-08-27 International Business Machines Corporation Compiling a parallel loop with a complex access pattern for writing an array for GPU and CPU
US11100001B2 (en) * 2017-05-04 2021-08-24 Sisense Ltd. Techniques for improving space utilization in a cache
US11327891B2 (en) 2019-09-20 2022-05-10 Samsung Electronics Co., Ltd. Prefetching operations in storage devices
KR20220049396A (ko) 2020-10-14 2022-04-21 삼성전자주식회사 간접 어드레싱을 위한 시스템, 장치 및 방법
CN113741567B (zh) * 2021-11-08 2022-03-29 广东省新一代通信与网络创新研究院 矢量加速器及其控制方法、装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8312442B2 (en) * 2008-12-10 2012-11-13 Oracle America, Inc. Method and system for interprocedural prefetching

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
C. Luk, T. Mowry, "Kompiler-basierte Vorabholung für rekursive Datenstrukturen", ACM SIGOPS Betriebssystemüberblick, Band 30, Ausgabe 5, Seiten 222 bis 233, 1996
Heanne Ferrante, Vivek Sarkar, W. Thrasch offenbaren in "Abschätzung und Verbesserung der Cache-Effektivität", gesammelte Schriften von Sprachen und Kompiler für die Parallel-Computerabarbeitung", 4. Internationaler Workshop, Seiten 328 bis 343, August 1991
S. Ghosh, M. Martomosi, S. Milik in "Cache-Fehlgleichungen mit einem Kompilerkonzept zum Analysieren und Verbessern des Speicherverhaltens", ACM Transaktionen für Programmiersprachen und Systeme (TOPLAS), Band 21, Ausgabe 4, Seiten 703 bis 746, 1999
V. Santhanam, E. Garnisch, W. Hsu "Datenvorabholung auf dem HPPA-8000", Schriften des Internationalen Symposiums der Computerarchitektur (ISCA), Seiten 264 bis 273, 1997

Also Published As

Publication number Publication date
US8352686B2 (en) 2013-01-08
US20100250854A1 (en) 2010-09-30

Similar Documents

Publication Publication Date Title
DE102009046876A1 (de) Verfahren und System für die Datenvorabholung für Schleifen auf der Basis linearer Induktionsausdrücke
DE10393481B4 (de) Verfahren und Vorrichtung zum Management einer Cache-Umgehung
Ahn et al. Improving JavaScript performance by deconstructing the type system
Klein et al. Advances in probabilistic model checking with PRISM: variable reordering, quantiles and weak deterministic Büchi automata
US6721943B2 (en) Compile-time memory coalescing for dynamic arrays
US8539442B2 (en) Reverse engineering for code file refactorization and conversion
DE112013001747T5 (de) Optimieren des Verbindens von Anweisungen
EP0689694A1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
EP0373361A2 (de) Erzeugung eines wirksamen Kodes für einen unähnliche Registrierräume enthaltenden Computer
DE202014010942U1 (de) Rahmenumgebung für anwenderorientierte, profilgesteuerte Optimierungen
US7308681B2 (en) Control flow based compression of execution traces
DE112013001735T5 (de) Optimieren des Verbindens von Anweisungen
DE102012224363A1 (de) Informationsverarbeitungssystem mit Hardware- und Softwarevorablesezugriff
DE112004001214T5 (de) Schnelles Merkmalsauswahlverfahren und System zur Maximalentropiemodellierung
DE202015009297U1 (de) Programmprodukt zum Eliminieren zusätzlicher Speicherladungen während des Zugriffs auf globale Variablen in positionsunabhängigem Code
Cabrera et al. DIBS: A data integration benchmark suite
Inagaki et al. Stride prefetching by dynamically inspecting objects
Abdelfattah et al. Optimizing memory-bound SYMV kernel on GPU hardware accelerators
Chen et al. HC-Sim: A fast and exact L1 cache simulator with scratchpad memory co-simulation support
DE102020131154A1 (de) Gefährdungsabschwächung für leichte Prozessorkerne
US10102099B2 (en) Performance information generating method, information processing apparatus and computer-readable storage medium storing performance information generation program
US20150100834A1 (en) Processing core data produced by a computer process
US8443352B2 (en) Processing strings based on whether the strings are short strings or long strings
CN105487911A (zh) 一种基于编译指导的众核数据分片方法
Vanbroekhoven et al. A practical dynamic single assignment transformation

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20120601