DE112012000209T5 - Ein nachfragegesteuerter Algorithmus zum Reduzieren der Vorzeichenerweiterungsinstruktionen, die in Programmschleifen eines 64-Bit-Computerprogramms enthalten sind - Google Patents

Ein nachfragegesteuerter Algorithmus zum Reduzieren der Vorzeichenerweiterungsinstruktionen, die in Programmschleifen eines 64-Bit-Computerprogramms enthalten sind Download PDF

Info

Publication number
DE112012000209T5
DE112012000209T5 DE112012000209T DE112012000209T DE112012000209T5 DE 112012000209 T5 DE112012000209 T5 DE 112012000209T5 DE 112012000209 T DE112012000209 T DE 112012000209T DE 112012000209 T DE112012000209 T DE 112012000209T DE 112012000209 T5 DE112012000209 T5 DE 112012000209T5
Authority
DE
Germany
Prior art keywords
sei
program
program loop
computer program
loop structure
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.)
Pending
Application number
DE112012000209T
Other languages
English (en)
Inventor
Akella Sastry
Yuan Lin
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.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE112012000209T5 publication Critical patent/DE112012000209T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level

Abstract

Eine Ausführungsform der vorliegenden Erfindung legt eine Technik zum Reduzieren von Vorzeichenerweiterungsinstruktionen (SEIs) dar, die in einem Computerprogramm enthalten sind, die Technik enthält Erhalten eines intermediären Codes, der mit dem Computerprogramm assoziiert ist und eine erste SEI enthält, die in einer Programmschleifenstruktur innerhalb des Computerprogramms enthalten ist, Feststellen, dass die erste SEI dazu geeignet ist, aus der Programmschleifenstruktur heraus bewegt zu werden, Einfügen einer zweiten SEI in einen Pre-Header der Programmschleife hinein, wobei die zweite SEI, wenn sie von einem Prozessor ausgeführt wird, einen ursprünglichen Wert, auf den die erste SEI zielt, von einem kleineren Typ zu einem größeren Typ befördert, und Ersetzen der ersten SEI durch eine oder mehrere intermediäre Instruktionen, die für zusätzliche Compiler-Optimierungen geeignet sind.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Diese Anmeldung nimmt die Priorität der US-Provisional-Patentanmeldung mit dem Aktenzeichen 61/556,782, welche am 7. November 2011 eingereicht wurde, sowie die Priorität der US-Patentanmeldung mit dem Aktenzeichen 13/661,478, welche am 26. Oktober 2012 eingereicht wurde, in Anspruch. Jede dieser Anmeldungen wird hiermit durch Bezugnahme hierin aufgenommen.
  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich im Allgemeinen auf Rechnerverarbeitung und spezifischer auf einen nachfragegesteuerten (engl. „demand-driven”) Algorithmus zum Reduzieren der Vorzeichenerweiterungsinstruktionen (engl. „sign-extension instructions”), die in Programmschleifen eines 64-Bit-Computerprogramms enthalten sind.
  • Beschreibung des verwandten Standes der Technik
  • Entwickler verwenden Compiler zur Erzeugung von ausführbaren Programmen aus höherem Quellcode (engl. „high-level source code”). Ein Compiler ist typischerweise dazu konfiguriert, einen höheren Quellcode eines Programms (zum Beispiel in C++ oder Java geschrieben) zu erhalten, eine Ziel-Hardwareplattform (zum Beispiel einen x86-Prozessor) zu bestimmen, auf welcher das Programm auszuführen ist, und dann den höheren Quellcode in einen Assemblercode (engl. „assembly-level code”), der auf der Ziel-Hardwareplattform ausgeführt werden kann, zu übersetzen. Diese Konfiguration bietet den Vorteil, dass es Entwickler ermöglicht wird, ein einziges höheres Quellcode-Programm zu schreiben und dieses Programm dann zur Ausführung auf einer Vielfalt von Hardwareplattformen vorzugeben, wie zum Beispiel mobilen Geräten, persönlichen Rechnern oder Servern.
  • Ein Compiler enthält im Allgemeinen drei Teile: ein Frontend (engl. „front-end”), ein Mittelend (engl. „middle-end”) und ein Backend (engl. „back-end”). Das Frontend ist konfiguriert zum Sicherstellen, dass der höhere Quellcode Programmiersprache-Syntax und -Semantik erfüllt, worauf die Frontendeinheit eine erste intermediäre Darstellung (engl. „intermediate representation”) (IR) des höheren Quellcodes erzeugt. Das Mittelend ist zum Erhalten und Optimieren der ersten IR konfiguriert, was üblicherweise zum Beispiel ein Entfernen von unerreichbarem (engl. „unreachable”) Code umfasst, der, falls vorhanden, in der ersten IR enthalten ist. Nach dem Optimieren der ersten IR erzeugt das Mittelend eine zweite IR, die von dem Backend verarbeitet werden soll. Das Backend erhält insbesondere die zweite IR und übersetzt die zweite IR in einen Assemblercode. Der Assemblercode enthält niedrigere (engl. „low-level”) Assemblerinstruktionen, die auf einem Prozessor, der Teil der Ziel-Hardwareplattform ist, direkt ausgeführt werden können.
  • In einigen Fällen werden Programme in einem „64-Bit-Modus” ausgeführt, in dem Basis-Speicheradressen 64-Bit-Werte (zum Beispiel int64-Variable) sind und Speicheroffsets 32-Bit-Werte (zum Beispiel int32-Variable) sind. Demzufolge fordert eine typische Berechnung von einer Adresse, zum Beispiel von einer bestimmten aus einem Index von einem Array, eine Addition eines 32-Bit-Speicheroffsets zu einer 64-Bit-Basisadresse. Damit der Prozessor diese Addition durchführen kann, muss der Prozessor erst das 32-Bit-Speicheroffset in ein 64-Bit-Speicheroffset umwandeln, so dass die Anzahl der Bits, die mit dem Speicheroffset assoziiert ist, an die Anzahl der Bits, die mit der 64-Bit-Basisadresse assoziiert ist, angepasst ist. Eine solche Umwandlung wird hierin als „Vorzeichenerweiterung” (engl. „sign-extension”) bezeichnet, welche insbesondere ein Erhöhen der Anzahl von Bits von einer Binärzahl aufweist, während das Vorzeichen (das heißt, positiv/negativ) und der Wert der Zahl bewahrt werden.
  • Obwohl eine Vorzeichenerweiterungsoperation keine besonders teure Operation ist, hindert eine Vorzeichenerweiterungsoperation, die in einer Programmschleife enthalten ist, wichtige Programmschleifenoptimierung, die als „Programmschleifenstärkereduktion” (engl. „loop strength reduction”) bekannt ist. Insbesondere weist fast aller Code, der im „64-Bit-Modus” ausgeführt wird, eine erhebliche Anzahl von Programmschleifen auf, und viele dieser Programmschleifen enthalten Vorzeichenerweiterungsinstruktionen. Eine Technik zum Eliminieren einer Vorzeichenerweiterung von einer 32-Bit-Variable in eine 64-Bit-Variable innerhalb einer Programmschleife beinhaltet eine Umwandlung der Variable in eine 64-Bit-Variable außerhalb der Programmschleife durch Ausführen einer Vorzeichenerweiterung in einem Pre-Header von der Programmschleife und Ersetzen aller 32-Bit-Operationen auf der ursprünglichen 32-Bit-Variable durch 64-Bit-Operationen auf der beförderten Variable. Diese Transformation macht aber die wichtige Annahme, dass keine der ursprünglichen 32-Bit-Operationen Ganzzahlüberlauf verursachen. Diese Annahme ist für gängige Programmiersprachen gültig, wie zum Beispiel C und C++, bei denen ein jegliches Programm, das auf Überlauf von Vorzeichen-Arithmetik-Operatoren (engl. „signed-arithmetic operators”) baut, undefiniert ist. Bei solchen Architekturen, wo 64-Bit-Register und -Operationen keine extra Kosten verursachen, ist diese Optimierung immer ein Erfolg. Bei Architekturen, wo 64-Bit-Register und -Operationen Additionsressourcen benötigen, muss sorgfältige Überlegung verwendet werden, und eine Kosten-Nutzen-Analyse zum wahlweisen Auswählen dieser Optimierung ist wünschenswert, da die Verwendung von 64-Bit-Registern und -Operationen den Registerdruck (engl. „register pressure”) erhöhen und mehr Zyklen verbrauchen kann.
  • Folglich ist das, was auf dem technischen Gebiet benötigt wird, eine Technik zum Identifizieren von Vorzeichenerweiterungsinstruktionen, die eliminiert werden sollen, unter Verwendung von Kosten-Nutzen-Analyse, und ein Verfahren zum Durchführen der Transformation auf niedrigerer intermediärer Darstellung (IR) eines Programms.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Eine Ausführungsform der vorliegenden Erfindung legt ein Verfahren zum Reduzieren von Vorzeichenerweiterungsinstruktionen (SEIs) dar, die in einem Computerprogramm enthalten sind. Das Verfahren weist folgende Schritte auf: Erhalten eines intermediären Codes, der mit dem Computerprogramm assoziiert ist und eine erste SEI enthält, die in einer Programmschleifenstruktur innerhalb des Computerprogramms enthalten ist, Feststellen, dass die erste SEI dazu geeignet ist, aus der Programmschleifenstruktur heraus bewegt zu werden, Einfügen einer zweiten SEI in einen Pre-Header der Programmschleife hinein, wobei die zweite SEI, wenn sie von einem Prozessor ausgeführt wird, einen ursprünglichen Wert, auf den die erste SEI zielt, von einem kleineren Typ zu einem größeren Typ befördert, und Ersetzen der ersten SEI durch eine oder mehrere intermediäre Instruktionen, die für zusätzliche Compiler-Optimierungen geeignet sind.
  • Ein Vorteil der offenbarten Ausführungsformen ist, dass ein Compiler automatisch Vorzeichenerweiterungsinstruktionen identifiziert, die in Programmschleifen von einem Computerprogramm enthalten sind, und die Vorzeichenerweiterungsinstruktionen nach Außerhalb der Programmschleifen verschieben, in welchen sie ursprünglich enthalten sind. Der Compiler modifiziert dann die Instruktionen innerhalb der Programmschleifen, um die entfernten Vorzeichenerweiterungsinstruktionen zu berücksichtigen, so dass die Richtigkeit des Computerprogramms intakt verbleibt. Als ein Ergebnis mag die Anzahl der Taktzyklen, die von dem Prozessor benötigt wird, um das Programm auszuführen, reduziert werden, was in direkter Korrelation mit Gesamtenergieeinsparungen steht.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • So dass die Art und Weise, in der die oben angeführten Merkmale der vorliegenden Erfindung im Detail verstanden werden kann, mag eine detailliertere Beschreibung der oben kurz zusammengefassten Erfindung durch Bezugnahme auf Ausführungsformen gehabt haben, von denen einige in der angehängten Zeichnungen dargestellt sind. Es muss aber bemerkt werden, dass die angehängten Zeichnungen nur typische Ausführungsformen der Erfindung illustrieren und somit nicht als den Umfang der Erfindung beschränkend angesehen werden dürfen, da die Erfindung andere gleich effektive Ausführungsformen zulassen mag.
  • 1 ist ein Blockdiagramm, das ein Computersystem darstellt, das zum Implementieren eines oder mehrerer Aspekte der vorliegenden Erfindung konfiguriert ist.
  • Die 2A2D zeigen ein Flussdiagramm von Verfahrensschritten zur Reduktion von Vorzeichenerweiterungsinstruktionen, die in Programmschleifen eines 64-Bit-Computerprogramms enthalten sind, gemäß einer Ausführungsform der vorliegenden Erfindung.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt, um ein eingehenderes Verständnis der vorliegenden Erfindung bereitzustellen. Es wird aber für einen Fachmann offenkundig sein, dass die vorliegende Erfindung auch ohne ein oder mehrere von diesen spezifischen Details ausgeübt werden kann.
  • Systemübersicht
  • 1 ist ein Blockdiagramm, das ein Computersystem 100 zeigt, das zum Implementieren eines oder mehrerer Aspekte der vorliegenden Erfindung konfiguriert ist. Das Computersystem 100 weist eine zentrale Verarbeitungseinheit (engl. „central processing unit”) (CPU) 102 und einen Systemspeicher 104 auf, die über einen Verbindungspfad (engl. „interconnection path”), der eine Speicherbrücke 105 aufweisen mag, miteinander in Verbindung stehen bzw. kommunizieren. Die Speicherbrücke 105, die zum Beispiel ein Northbridge-Chip sein mag, ist über einen Bus oder einen anderen Kommunikationspfad 106 (zum Beispiel einen HyperTransport-Links) mit einer I/O-(Input/Output)-Brücke 107 verbunden. Die I/O-Brücke 107, welche zum Beispiel ein Southbridge-Chip sein mag, erhält User-Input von einer oder mehreren User-Input-Vorrichtungen 108 (zum Beispiel Tastatur, Maus) und leitet den Input über den Kommunikationspfad 106 und die Speicherbrücke 105 an die CPU 102 weiter. Ein Parallelverarbeitungssubsystem 112 ist über einen Bus oder einen zweiten Kommunikationspfad 113 (zum Beispiel einen Peripheral Component Interconnect (PCI) Express, einen beschleunigten Grafikport (engl. „Accelerated Graphics Port”), oder einen HyperTransport-Link) an die Speicherbrücke 105 gekoppelt; in einer Ausführungsform ist das Parallelverarbeitungssubsystem 112 ein Grafiksubsystem, das Pixel zu einer Displayvorrichtung 110 liefert, die jede konventionelle Kathodenstrahlröhre, Flüssigkristalldisplay, LED-Display (engl. „light-emitting diode display”) oder ähnliches sein mag. Eine Systemdisk 114 ist auch mit der I/O-Brücke 107 verbunden und mag konfiguriert sein zum Speichern von Inhalt und Applikationen und Daten zur Verwendung durch die CPU 102 und das Parallelverarbeitungssubsystem 112. Die Systemdisk 114 stellt nichtflüchtiger Speicher für Applikationen und Daten bereit und mag feste oder ausbaubare Festplattenlaufwerke, Flash-Speichervorrichtungen, und CD-ROM (engl. „compact disc read-only-memory”), DVD-ROM (engl. „digital versatile disc-ROM”), Blu-ray, HD-DVD (engl. „high definition DVD) oder andere magnetische, optische oder Festkörper-Speichervorrichtungen aufweisen.
  • Ein Switch 116 stellt Verbindungen zwischen der I/O-Brücke 107 und anderen Bauteilen, wie zum Beispiel einem Netzwerkadapter 118 und verschiedenen Erweiterungskarten (engl. „add-in cards”) 120 und 121, bereit. Andere (nicht explizit dargestellte) Bauteile, einschließlich „universal serial bus” (USB) oder anderer Portanschlüsse (engl. „port connections”), „compact disc”(CD)-Laufwerke, „digital versatile disc”-(DVD)-Laufwerke, Filmaufzeichnungsvorrichtungen und ähnliches, mögen auch mit der I/O-Brücke 107 verbunden sein. Die verschiedene Verbindungspfade, die in 1 gezeigt sind, einschließlich der spezifisch gekennzeichneten Verbindungspfaden 106 und 113, mögen unter Verwendung von jeglichen geeigneten Protokollen, wie zum Beispiel PCI-Express, AGP (engl. „Accelerated Graphics Port”), HyperTransport oder jedem anderen Bus oder Punkt-zu-Punkt-Kommunikationsprotokoll(en) (engl. „Point-to-Point Communication Protocol(s)”) implementiert sein, und Verbindungen zwischen verschiedenen Vorrichtungen mögen verschiedene Protokolle benutzen, wie es aus dem Stand der Technik bekannt ist.
  • Das Parallelverarbeitungssubsystem 112 weist in einer Ausführungsform Schaltkreise auf, die für Grafik- und Videoverarbeitung optimiert sind, einschließlich zum Beispiel Videoausgabeschaltkreise, und stellt eine Grafikverarbeitungseinheit (GPU) dar. In einer anderen Ausführungsform weist das Parallelverarbeitungssubsystem 112 Schaltkreise auf, die für Universalverarbeitung (engl. „general purpose processing”) optimiert sind, während die unterliegende rechnerische Architektur aufrechterhalten wird (wie es hierin detaillierter beschrieben wird). In noch einer anderen Ausführungsform mag das Parallelverarbeitungssubsystem 112 mit einem oder mehreren anderen Systemelementen in einem einzigen Subsystem integriert sein, wie zum Beispiel durch Zusammenführung der Speicherbrücke 105, der CPU 102 und der I/O-Brücke 107, um ein System-auf-Chip (engl. „system on chip”) (SoC) zu bilden.
  • In einer Ausführungsform weist das Parallelverarbeitungssubsystem 112 eine oder mehrere Parallelverarbeitungseinheiten („Parallel Processing Units”) (PPUs) auf, wobei jede von denen an einen lokalen Parallelverarbeitungs-(PP)-Speicher 204 gekoppelt ist. Im Allgemeinen weist ein Parallelverarbeitungssubsystem 112 eine Anzahl U von PPUs auf, wobei U ≥ 1. In einigen Ausführungsformen sind einige oder alle der PPUs in dem Parallelverarbeitungssubsystem 112 Grafikprozessoren mit Rendering-Pipelines, die konfiguriert werden können zum Ausführen verschiedener Operationen im Zusammenhang mit Erzeugung von Pixeldaten aus Grafikdaten, die von der CPU 102 und/oder dem Systemspeicher 104 über die Speicherbrücke 105 und den zweiten Kommunikationspfad 113 bereitgestellt werden, zum Interagieren mit dem lokalen Parallelverarbeitungsspeicher (der als Grafikspeicher verwendet werden kann, einschließlich zum Beispiel eines konventionellen Framepuffer), um Pixeldaten zu speichern und aktualisieren, zum Beliefern einer Displayvorrichtung 110 mit Pixeldaten, und ähnliches. In einigen Ausführungsformen mag das Parallelverarbeitungssubsystem 112 eine oder mehrere PPUs, die als Grafikprozessoren operieren, und eine oder mehrere PPUs, die für Universalberechnungen (engl. „general-purpose computations”) verwendet werden, aufweisen. Die PPUs mögen identisch oder unterschiedlich sein, und jede PPU mag eine dedizierte Parallelverarbeitungsspeichervorrichtung(en) aufweisen.
  • Es wird verstanden werden, dass das System von 1 illustrativ ist und dass Variationen und Modifikationen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, der Anzahl von CPUs 102 und der Anzahl von Parallelverarbeitungssubsystemen 112, mag, wie gewünscht, variiert werden. In einigen Ausführungsformen ist der Systemspeicher 104 zum Beispiel direkt mit der CPU 102 verbunden, statt durch eine Brücke, und andere Vorrichtungen kommunizieren mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102. In anderen alternativen Topologien ist das Parallelverarbeitungssubsystem 112 mit der I/O-Brücke 107 oder direkt mit der CPU 102 verbunden, statt mit der Speicherbrücke 105. In noch anderen Ausführungsformen mögen die I/O-Brücke 107 und Speicherbrücke 105 in einem einzigen Chip integriert sein, statt als eine oder mehrere diskrete Vorrichtungen zu existieren. Große Ausführungsformen mögen zwei oder mehr CPUs 102 und zwei oder mehr Parallelverarbeitungssubsysteme 112 aufweisen.
  • Die jeweiligen hierin gezeigten Bauteile sind optional; zum Beispiel mag jede Anzahl von Erweiterungskarten oder Peripherievorrichtungen unterstützt werden. In einigen Ausführungsformen ist der Switch 116 entfernt und der Netzwerkadapter 118 und die Erweiterungskarten 120, 121 sind direkt mit der I/O-Brücke 107 verbunden.
  • Reduzieren von Vorzeichenerweiterungsinstruktionen, die in Programmschleifen eines 64-Bit-Computerprogramms enthalten sind
  • Wie es hierin detaillierter dargelegt wird, weist die vorliegende Erfindung einen Compiler 150 auf, der in dem Computersystem 100 der 1 ausgeführt wird. Der Compiler 150 ist dazu konfiguriert, einen Algorithmus zu implementieren, um die intermediären Instruktionen zu vereinfachen, die ein Computerprogramm bilden. Der Compiler 150 ist insbesondere dazu konfiguriert, Programmschleifen in dem intermediären Code zu identifizieren, die mindestens eine Vorzeichenerweiterungsinstruktion enthalten, die dazu geeignet ist, aus dem Programmschleifen heraus bewegt zu werden. Die Programmschleifen werden in einer innerste-Programmschleife-zuerst-Reihenfolge (engl. „innermost loop-first Order”) verarbeitet. Eine detaillierte Beschreibung von der Art und Weise, in welcher der Compiler 150 den intermediären Code verarbeitet, folgt.
  • Die 2A2D zeigen ein Flussdiagramm von Verfahrensschritten 200 zum Reduzieren von Vorzeichenerweiterungsinstruktionen, die ein Programmschleifen eines 64-Bit-Computerprogramms enthalten sind, gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Zusammenhang mit dem System von 1 beschrieben werden, werden durchschnittliche Fachleute verstehen, dass jedes System, das zum Durchführen der Verfahrensschritte, in jeder beliebigen Reihenfolge, konfiguriert ist, innerhalb des Umfangs der Erfindung ist.
  • Wie es in 2A gezeigt ist, beginnt das Verfahren 200 bei Schritt 202, in welchem der Compiler 150 intermediären Code eines Computerprogramms erhält, der mindestens eine Programmschleife enthält. Bei Schritt 204 initialisiert der Compiler 150 eine Abbildung (engl. „map”) mit einem (Schlüssel)→(Wert)-Format von (v1, <Typ>)→(v2), wobei v2 der vorzeichenerweiterte Wert von v1 ist und ein Typ v2 <Typ> ist. Beispielhafte „Typen” enthalten int32 (das heißt, 32-Bit Ganzzahlen) und int64 (das heißt, 64-Bit Ganzzahlen). Falls zum Beispiel v1 eine 32-Bit Ganzzahl ist, dann bedeutet (v1, int64)→(v2), dass v2 eine 64-Bit Ganzzahl-Darstellung von dem 32-Bit Ganzzahlwert von v1 ist. v2 ist äquivalent zu Vorzeichenerweiterung von v1 und kann anstelle einer solchen Vorzeichenerweiterung verwendet werden.
  • Bei Schritt 206 setzt der Compiler 150 eine jetzige Programmschleife zum Zeigen auf die erste Programmschleife in einer innerste-Programmschleife-zuerst-Reihenfolge. In einem Beispiel ist der intermediäre Code wie folgt:
    Figure 00100001
  • Erläuterung: Im obigen Beispiel ist unter ”preheader” Pre-Header zu verstehen, unter ”loop body” Programmschleifenkörper zu verstehen und unter „if (cond)” wenn (Bedingung) zu verstehen.
  • Die erste Programmschleife des intermediären Codes ist im obigen Beispiel der „Körper” der Programmschleife und enthält sechs separate Instruktionen. Folglich zeigt die jetzige Programmschleife nach dem ersten Durchlauf des Schrittes 206 auf die „Körper”-Programmschleife. Bei Schritt 208 stellt der Compiler 150 fest, ob die jetzige Programmschleife mindestens eine Vorzeichenerweiterungsinstruktion (SEI) von der Form „t1 = sxt(t2)” enthält. Die intermediäre Instruktion „temp1.i64 = sxt(i1.i32)” in dem obigen Beispiel erfüllt die Kriterien des Schrittes 208. In diesem Beispiel verhindert die Instruktion „temp1.i64 = sxt(i1.i32)” eine Aufwandsreduktion (engl. „strength reduction”) des Ausdrucks „4*tmp1.i64”. Es ist folglich das Ziel des Compilers 150, den intermediären Code, der beim Schritt 202 erhalten wurde, so zu modifizieren, dass die Vorzeichenerweiterung von „i1.i32” durch Befördern von i1.32 zu einem 64-Bit Wert eliminiert wird. Falls der Compiler 150 beim Schritt 208 feststellt, dass die jetzige Programmschleife mindestens eine SEI von der Form „t1 = sxt(t2)” enthält, dann geht das Verfahren 200 weiter zum Schritt 210. Anderenfalls geht das Verfahren 200 weiter zum Schritt 218 von 2B, welcher, wie es unter dargelegt wird, ein Feststellen enthält, ob zusätzliche Programmschleifen, die Vorzeichenerweiterungsinstruktionen enthalten mögen, in dem intermediären Code enthalten sind.
  • Bei Schritt 210 setzt der Compiler 150 eine jetzige SEI zum Zeigen auf eine erste SEI der ersten Programmschleife. Fortsetzend mit dem obigen Beispiel würde die jetzige SEI auf die SEI „temp1.i64 = sxt(i1.i32)” zeigen nach dem ersten Durchlauf des Schrittes 210. Bei Schritt 212 stellt der Compiler 150 fest, ob die jetzige SEI (das heißt, „temp1.i64 = sxt(i1.i32)”) von einer Induktionsvariable der jetzigen Programmschleife angewendet wird und dass alle Anwendungen von t1 (das heißt, „temp1.i64”) der jetzigen SEI affin sind. Der Code „4*temp1.i64” in dem obigen Beispiel ist zum Beispiel eine affine Anwendung. Falls das Ergebnis des Schrittes 212 wahr (engl. „true”) ist, dann ist die jetzige SEI eine Kandidatin eliminiert zu werden und das Verfahren 200 geht weiter zu Schritt 222, der unten beschrieben wird. Anderenfalls geht das Verfahren 200 weiter zu Schritt 214, der auch unten beschrieben wird.
  • Bei Schritt 222 stellt der Compiler 150 fest, ob der Operand t2 der jetzigen SEI ein Blatt (engl. „leaf”) in der jetzigen Programmschleife ist. In einer Ausführungsform wird t2 als ein Blatt der jetzigen Programmschleife erachtet, falls t2 außerhalb der jetzigen Programmschleife definiert ist oder falls t2 weder ein nicht überlaufender binärer Operator noch ein Phi-Operator noch ein Umwandlungsoperator (engl. „convert operator”) (zum Beispiel Vorzeichenerweiterung oder Nullerweiterung (engl. „zero-extension”)) ist. Falls der Compiler 150 im Schritt 222 feststellt, dass t2 der jetzigen SEI ein Blatt der jetzigen Programmschleife ist, dann geht das Verfahren 200 zurück zum Schritt 214, der unten beschrieben wird. Anderenfalls geht das Verfahren 200 weiter zu Schritt 224, bei dem der Compiler 150 die jetzige SEI auf einen Stack von SEIs hinauf schiebt (engl. „pushes”). Dieser Stack stellt eine Liste von Vorzeichenerweiterungsinstruktionen dar, die verarbeitet werden sollen, und ermöglicht, dass der Compiler 150 SEIs auf den Stack von SEIs hinauf schiebt und SEIs von dem Stapel von SEIs herausnimmt (engl. „pop SEIs off of the stack of SEIs”). Fortsetzend mit dem obigen Beispiel wird der Stack {„tmp1.i64=sxt(i1.i32)”} und die Abbildung ist {}.
  • Bei Schritt 226 stellt der Compiler 150 fest, ob der Stack von SEIs leer ist. Falls der Compiler 150 beim Schritt 150 feststellt, dass der Stack von SEIs leer ist, dann geht das Verfahren 200 weiter zum Schritt 214, der unten beschrieben wird. Anderenfalls geht das Verfahren 200 weiter zu Schritt 228, in welchem der Compiler 150 eine temporäre SEI von dem Stack von SEIs herausnimmt.
  • Bei Schritt 230 stellt der Compiler 150 fest, ob die temporäre SEI ein Blatt der jetzigen Programmschleife ist. Falls der Compiler 150 beim Schritt 230 feststellt, dass t2 der temporären SEI ein Blatt der jetzigen Programmschleife ist, dann geht das Verfahren 200 weiter zu Schritt 232 von 2C, der unten beschrieben wird. Anderenfalls geht das Verfahren 200 zurück zum Schritt 226, der oben beschrieben wurde. Fortsetzend mit dem obigen Beispiel ist „i1.i32” in der Programmschleife definiert, so „i1.i32” wird nicht als ein Blatt erachtet.
  • Beim Schritt 232 stellt der Compiler 150 fest, ob 1) die temporäre SEI von der Form „t1 = sxt(t2)” ist und ob 2) t2 von der temporären SEI von der Form „t2 = op x y” ist. Falls der Compiler 150 beim Schritt 232 feststellt, dass 1) die temporäre SEI von der Form „t1 = sxt(t2)” ist, und dass 2) t2 von der temporären SEI von der Form „t2 = op x y” ist, dann geht das Verfahren 200 weiter zu Schritt 234. Anderenfalls geht das Verfahren 200 zurück zum Schritt 226 von 2B, der oben beschrieben wurde.
  • Beim Schritt 234 stellt der Compiler 150 fest, ob ein Wert für den Schlüssel (x, <Typ von t1 von der temporären SEI>) in der Abbildung existiert. Fortsetzend mit dem obigen Beispiel ist t2 „i1.i32 = phi(i0.i32:preheader, i2.i32:loop body)” und die Abbildung ist leer. Falls der Compiler 150 beim Schritt 234 feststellt, dass ein Wert für den Schlüssel (x, <Typ von t1 von der temporären SEI>) in der Abbildung existiert, dann geht das Verfahren 200 weiter zu Schritt 238, der unten beschrieben wird. Anderenfalls geht das Verfahren 200 weiter zu Schritt 236, bei welchem der Compiler 150 1) die SEI „x' = sxt(x)” auf den Stack von SEIs hinauf schiebt und 2) x' in den intermediären Code hinein fügt vor der Verwendung von x in t2 von der temporären SEI.
  • Beim Schritt 238 stellt der Compiler 150 fest, ob ein Wert in der Abbildung für den Schlüssel (y, <Typ von t1 von der temporären SEI>) existiert. Falls der Compiler 150 beim Schritt 238 feststellt, dass ein Wert in der Abbildung für den Schlüssel (y, <Typ von t1 von der temporären SEI>) existiert, dann geht das Verfahren 200 weiter zu Schritt 242, der unten beschrieben wird. Anderenfalls geht das Verfahren 200 weiter zu Schritt 240, in welchem der Compiler 150 1) die SEI „y' = sxt(y)” auf den Stack von SEIs hinauf schiebt und 2) y' in der intermediären Code hinein fügt vor der Verwendung von y in t2 von der temporären SEI. Die Ausführung des Schritts 240 umfasst insbesondere, dass eine Vorzeichenerweiterung in den Pre-Header der jetzigen Programmschleife hinein gefügt wird.
  • Das Verfahren 200 geht folglich weiter zu Schritt 242, bei welchem der Compiler 150 die SEI „t2' = op x' y'” nach t2 der temporären SEI in die intermediäre Code hinein einfügt und die Abbildung derart aktualisiert, dass sie das Mapping (t2, <Typ(t2')>) → t2' enthält. Das Verfahren geht dann weiter zu Schritt 244 der 2D. Fortsetzend mit dem obigen Beispiel enthält der Stack von SEIs {„i0'.i64 = sxt(i0.i32)”, „i2'.i64 = sxt(i2.i32)”} und die Abbildung enthält {<i1.i64> → i1'}. Der intermediäre Code wird des Weiteren:
    Figure 00140001
    so dass alle Verwendungen von ”tmp1.i64” durch ”i1'.i64” ersetzt werden und „tmp1.i64 = sxt(i1.i32)” gelöscht wird. Wenn neue Vorzeichenerweiterungsinstruktionen vor Verwendungen eingefügt werden, werden Phi-Instruktionen insbesondere speziell behandelt. Eine Verwendung in Phi, wie zum Beispiel „i0.i32:preheader”, wird als eine Verwendung der letzten Instruktion auf einem Pre-Header-Block der jetzigen Programmschleife behandelt. Dies ist eine Standardinterpretation von Verwendungen, die in Phi-Instruktion in SSA-Darstellung (engl. „SSA representation”) vorkommen.
  • Bei Schritt 244 mappt der Compiler 150 den Schlüssel (t2, <Typ von t1 von der temporären SEI>) zu dem Wert von t2' in der Abbildung. Bei Schritt 246 ersetzt der Compiler 150, in der jetzigen Programmschleife, alle Vorkommnisse von t1 durch t2'. Bei Schritt 248 entfernt der Compiler 150 die temporäre SEI aus der jetzigen Programmschleife. Das Verfahren 200 returniert dann zum Schritt 226 der 2B, in welchem die Verfahrensschritte 228248 wiederholt werden bis der Stack von SEIs leer ist. Fortsetzend das obige Beispiel ist die SEI „i0'.i64 = sxt(i0.i32)” ein Blatt, da i0.i32 außerhalb der Programmschleife definiert ist, und wird folglich von dem Verfahren 200 außer Acht gelassen. Alternativ ist die SEI „i2'.i64 = sxt(i2.i32)” für die Operation des Schritts 240 geeignet. Gemäß der hierin beschriebenen Technik würde das Modifizieren der SEI „i2'.i64 = sxt(i2.i32)” beinhalten, dass der Compiler 150 eine SEI „i3.i64 = i1'.i64 + 1” nach der SEI „i2.i32 = i1.i32 + 1” einfügen, alle Vorkommnisse von „i2'.i64” durch „i3'.i64” ersetzen und die SEI „i2'.i64 = sxt(i2.i32)” löschen wurde. Folglich ist der intermediäre Code nach Elimination aller Vorzeichenerweiterungen wie folgt:
    Figure 00150001
    Figure 00160001
  • Als ein Ergebnis werden die 32-Bit-Berechnungen von {i0, i1, i2} zu 64-Bit-Berechnungen von {i0', i1', i3') befördert. Dies erlaubt vorteilhafterweise, dass nachfolgende Optimierungsdurchläufe von dem Compiler 150 durchgeführt werden, wie zum Beispiel Aufwandsreduktion und Eliminierung von Induktionsvariablen, um die redundanten 32-Bit-Berechnungen zu eliminieren.
  • Jetzt mit Rückbezug auf den Schritt 208, falls der Compiler 150 feststellt, dass die jetzige Programmschleife nicht mindestens eine SEI von der Form „t1 = sxt(t2)” enthält, dann geht das Verfahren 200 weiter zum Schritt 218 der 2B, der oben beschrieben wurde.
  • Jetzt mit Rückbezug auf den Schritt 212, falls der Compiler 150 feststellt, dass „t2” von der jetzigen SEI keine affine Funktion einer Induktionsvariable der jetzigen Programmschleife ist, dann geht das Verfahren weiter zu Schritt 214, bei dem der Compiler 150 feststellt, ob zusätzliche SEIs in der jetzigen Programmschleife enthalten sind. Falls der Compiler 150 beim Schritt 214 feststellt, dass zusätzliche SEIs in der jetzigen Programmschleife enthalten sind, dann geht das Verfahren 200 weiter zu Schritt 216, der unten beschrieben wird. Anderenfalls geht das Verfahren 200 weiter zum Schritt 218 der 2B, der oben beschrieben wurde.
  • Beim Schritt 216 setzt der Compiler 150 die jetzige SEI zum Zeigen auf eine nächste SEI der jetzigen Programmschleife. Der Compiler 150 ist, wie es früher hierin erwähnt wurde, dazu konfiguriert, die Programmschleifen in einer innerste-Programmschleife-zuerst-Reihenfolge zu verarbeiten, was erlaubt, dass Vorzeichenerweiterungen, die in einem Programmschleifen-Pre-Header eingefügt worden sind, eliminiert werden, wenn die einschließende (engl. „enclosing”) Programmschleife anschließend verarbeitet wird. Beim Schritt 218 stellt der Compiler 150 fest, ob zusätzliche Programmschleifen in dem intermediären Code enthalten sind. Falls der Compiler 150 beim Schritt 218 feststellt, dass zusätzliche Programmschleifen in dem intermediären Code enthalten sind, dann geht das Verfahren 200 weiter zu Schritt 220, der unten beschrieben wird. Anderenfalls endet das Verfahren 200, da jede Programmschleife, die in dem intermediären Code enthalten ist, von dem Compiler 150 gemäß den hierein beschriebenen Techniken untersucht worden ist.
  • Beim Schritt 220 setzt der Compiler 150 die jetzige Programmschleife zu einer nächsten Programmschleife, die in dem intermediären Code enthalten ist. Das Verfahren 200 geht dann zurück zum Schritt 208, wonach die nachfolgenden Schritte 210248 gemäß der obigen Beschreibung durchgeführt werden.
  • Zusammengefasst legen Ausführungsbeispiele der Erfindung eine Technik zum Reduzieren von SEIs dar, die in Programmschleifen eines Computerprogramms enthalten sind. Der Compiler 150 erhält intermediären Code des Computerprogramms, wobei der intermediäre Code mindestens eine SEI enthält, die in einer Programmschleifenstruktur enthalten ist. Der Compiler 150 stellt gemäß dem oben beschriebenen Verfahren 200 fest, dass die mindestens eine SEI dazu geeignet ist, aus der Programmschleifenstruktur heraus bewegt zu werden, fügt eine zusätzliche SEI in einen Pre-Header von der Programmschleifenstruktur hinein und eliminiert dann die SEI in der Programmschleife, was der Code für zusätzliche Aufwandsreduktionsmöglichkeiten geeignet macht.
  • Ein Vorteil von den hierin offenbarten Techniken ist, dass kompilierte intermediäre Instruktionen von dem Compiler 150 automatisch auf zusätzliche Optimierungsmöglichkeiten geprüft werden. In dieser Weise mag die gesamte Anzahl von Instruktionen reduziert werden, aus denen das Computerprogramm besteht oder die das Computerprogramm fordert, dass ein Prozessor beim Ausführen des Computerprogramms durchführt, wobei die gesamte Ausführungseffizienz des Computerprogramm erhöht wird. Des Weiteren führen weniger oder effizientere Instruktionen dazu, dass weniger Taktzyklen benötigt werden, um das Computerprogramm auszuführen, was mit einer Einsparung der Gesamtenergieverbrauch direkt korreliert ist.
  • Eine Ausführungsform der Erfindung mag als ein Computerprogrammprodukt zur Verwendung mit einem Computersystem implementiert sein. Das Programm bzw. die Programme des Programmprodukts definiert bzw. definieren Funktionen der Ausführungsformen (einschließlich der hierin beschriebenen Verfahren) und kann bzw. können auf einer Vielfalt von computerlesbaren Speichermedien enthalten werden. Beispielhafte computerlesbare Speichermedien umfassen, sind aber nicht darauf begrenzt: (i) nicht-schreibbare Speichermedien (zum Beispiel schreibgeschützte („read-only”) Speichervorrichtungen in einem Computer, wie zum Beispiel CD-ROM-(„compact disc read only memory”)-Discs, die mittels eines CD-ROM-Laufwerks lesbar sind, Flash-Speicher, ROM-(„read only memory”)-Chips oder jede andere Art von nichtflüchtigem Festkörper-Halbleiterspeicher („solid-state non-volatile semiconductor memory”)), auf welchen Informationen permanent gespeichert werden; und (ii) schreibbare Speichermedien (zum Beispiel Floppy-Disks in einem Diskettenlaufwerk oder Festplattenlaufwerk oder jeder Art Festkörper-Halbleiterspeicher mit wahlfreiem Zugriff („solid-state random-access semiconductor memory”)), auf welchem veränderbare Informationen gespeichert sind.
  • Die Erfindung ist mit Bezug auf spezifische Ausführungsformen oben beschrieben worden. Durchschnittsfachleute werden aber verstehen, dass verschiedene Modifikationen und Änderungen davon gemacht werden mögen, ohne von dem breiteren Geist und Umfang der Erfindung abzuweichen, wie diese in den angehängten Patentansprüchen dargestellt ist. Die vorhergehende Beschreibung und vorhergehenden Zeichnungen sind folglich eher in einer illustrativen wie in einer restriktiven Bedeutung zu beachten.
  • Folglich ist der Umfang der Ausführungsformen der vorliegenden Erfindung in den nachfolgenden Patentansprüchen dargelegt.

Claims (10)

  1. Ein Verfahren zum Reduzieren von Vorzeichenerweiterungsinstruktionen (SEIs), die in einem Computerprogramm enthalten sind, das Verfahren aufweisend: Erhalten eines intermediären Codes, der mit dem Computerprogramm assoziiert ist und eine erste SEI enthält, die in einer Programmschleifenstruktur innerhalb des Computerprogramms enthalten ist; Feststellen, dass die erste SEI dazu geeignet ist, aus der Programmschleifenstruktur heraus bewegt zu werden; Einfügen einer zweiten SEI in einen Pre-Header der Programmschleife hinein, wobei die zweite SEI, wenn sie von einem Prozessor ausgeführt wird, einen ursprünglichen Wert, auf den die erste SEI zielt, von einem kleineren Typ zu einem größeren Typ befördert; und Ersetzen der ersten SEI durch eine oder mehrere intermediäre Instruktionen, die für zusätzliche Compiler-Optimierungen geeignet sind.
  2. Das Verfahren gemäß Anspruch 1, wobei ein Operand, der mit der ersten SEI assoziiert ist, 32-Bits enthält, und wobei die erste SEI, wenn sie von einem Prozessor ausgeführt wird, den Operanden in 64-Bits umwandelt, aber das Vorzeichen oder den Wert, die mit dem Operanden assoziiert sind, nicht ändert.
  3. Das Verfahren gemäß Anspruch 2, wobei die erste SEI dazu geeignet ist, aus der Programmschleifenstruktur heraus bewegt zu werden, wenn der Operand, der mit der ersten SEI assoziiert ist, eine affine Funktion von einer mit der Programmschleifenstruktur assoziierten Induktionsvariable aufweist.
  4. Das Verfahren gemäß Anspruch 3, wobei der Operand das Format „Operand = C1*i + C2” hat, wobei der Wert von „i” während des Ausführens der Programmschleifenstruktur modifiziert wird, und wobei C1 und C2 konstante Werte sind.
  5. Das Verfahren gemäß Anspruch 1, wobei die zweite SEI, wenn sie von dem Prozessor ausgeführt wird, bewirkt, dass der Prozessor einen vorzeichenerweiterten Wert von einem mit der zweiten SEI assoziierten Operanden in einer Variable speichert.
  6. Das Verfahren gemäß Anspruch 5, wobei die eine oder mehreren intermediären Instruktionen Bezug auf die Variable nimmt, um den vorzeichenerweiterten Wert des mit der zweiten SEI assoziierten Operanden zu erlangen.
  7. Das Verfahren gemäß Anspruch 1, ferner aufweisend: Feststellen, dass der intermediäre Code, der mit dem Computerprogramm assoziiert ist, eine dritte SEI enthält, die in der Programmschleifenstruktur enthalten ist; Feststellen, dass ein Operand, der mit der dritten SEI assoziiert ist, einen konstanten Wert aufweist; und Ersetzen der dritten SEI durch einen konstanten Wert, der eine Anzahl von Bits hat, die von der dritten SEI definiert ist.
  8. Das Verfahren gemäß Anspruch 1, ferner aufweisend: Feststellen, dass der intermediäre Code, der mit dem Computerprogramm assoziiert ist, eine vierte SEI enthält, die in der Programmschleifenstruktur enthalten ist; Feststellen, dass ein Operand, der mit der vierten SEI assoziiert ist, eine Anzahl von Bits hat, die von der vierten SEI definiert ist; und Ersetzen der vierten SEI durch den Operanden, der mit der vierten SEI assoziiert ist, wobei der intermediäre Code, wenn er von dem Prozessor ausgeführt wird, den Operanden der vierten SEI nicht vorzeichenerweitert.
  9. Verfahren gemäß Anspruch 1, wobei die intermediären Instruktionen, die in dem Pre-Header der Programmschleifenstruktur enthalten sind, nur einmal vor dem Ausführen der intermediären Instruktionen, die in der Programmschleifenstruktur enthalten sind, ausgeführt werden.
  10. Ein System zum Reduzieren von Vorzeichenerweiterungsinstruktionen (SEIs), die in einem Computerprogramm enthalten sind, das System aufweisend: einen Prozessor, der konfiguriert ist zum: Erhalten eines intermediären Codes, der mit dem Computerprogramm assoziiert ist und eine erste SEI enthält, die in einer Programmschleifenstruktur innerhalb des Computerprogramms enthalten ist; Feststellen, dass die erste SEI dazu geeignet ist, aus der Programmschleifenstruktur heraus bewegt zu werden; Einfügen einer zweiten SEI in einen Pre-Header der Programmschleife hinein, wobei die zweite SEI, wenn sie von einem Prozessor ausgeführt wird, einen ursprünglichen Wert, auf den die erste SEI zielt, von einem kleineren Typ zu einem größeren Typ befördert; und Ersetzen der ersten SEI durch eine oder mehrere intermediäre Instruktionen, die für zusätzliche Compiler-Optimierungen geeignet sind.
DE112012000209T 2011-11-07 2012-11-06 Ein nachfragegesteuerter Algorithmus zum Reduzieren der Vorzeichenerweiterungsinstruktionen, die in Programmschleifen eines 64-Bit-Computerprogramms enthalten sind Pending DE112012000209T5 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201161556782P 2011-11-07 2011-11-07
USUS-61/556,782 2011-11-07
USUS-13/661,478 2012-10-26
US13/661,478 US10228919B2 (en) 2011-11-07 2012-10-26 Demand-driven algorithm to reduce sign-extension instructions included in loops of a 64-bit computer program
PCT/US2012/063754 WO2013070635A1 (en) 2011-11-07 2012-11-06 A demand-driven algorithm to reduce sign-extension instructions included in loops of a 64-bit computer program

Publications (1)

Publication Number Publication Date
DE112012000209T5 true DE112012000209T5 (de) 2013-08-22

Family

ID=48223398

Family Applications (5)

Application Number Title Priority Date Filing Date
DE112012000195T Pending DE112012000195T5 (de) 2011-11-07 2012-11-06 Ein Algorithmus zur Vektorisierung und Speicherkoaleszierung während Kompilierung
DE112012000214T Pending DE112012000214T5 (de) 2011-11-07 2012-11-06 Technik zur inter-prozeduralen Speicheradressenraumoptimierung in GPU-Rechencompiler
DE112012000187T Pending DE112012000187T5 (de) 2011-11-07 2012-11-06 Ein Algorithmus zur Optimierung eines 64-Bit-Adressiermodus
DE112012000209T Pending DE112012000209T5 (de) 2011-11-07 2012-11-06 Ein nachfragegesteuerter Algorithmus zum Reduzieren der Vorzeichenerweiterungsinstruktionen, die in Programmschleifen eines 64-Bit-Computerprogramms enthalten sind
DE112012000212T Pending DE112012000212T5 (de) 2011-11-07 2012-11-06 Technik für live Analyse-basierte Rematerialisation zur Reduktion von Registerdruck und zur Verbesserung von Parallelität

Family Applications Before (3)

Application Number Title Priority Date Filing Date
DE112012000195T Pending DE112012000195T5 (de) 2011-11-07 2012-11-06 Ein Algorithmus zur Vektorisierung und Speicherkoaleszierung während Kompilierung
DE112012000214T Pending DE112012000214T5 (de) 2011-11-07 2012-11-06 Technik zur inter-prozeduralen Speicheradressenraumoptimierung in GPU-Rechencompiler
DE112012000187T Pending DE112012000187T5 (de) 2011-11-07 2012-11-06 Ein Algorithmus zur Optimierung eines 64-Bit-Adressiermodus

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE112012000212T Pending DE112012000212T5 (de) 2011-11-07 2012-11-06 Technik für live Analyse-basierte Rematerialisation zur Reduktion von Registerdruck und zur Verbesserung von Parallelität

Country Status (5)

Country Link
US (6) US20130113809A1 (de)
CN (5) CN103339621A (de)
DE (5) DE112012000195T5 (de)
TW (5) TWI604410B (de)
WO (5) WO2013070635A1 (de)

Families Citing this family (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9395957B2 (en) * 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US20130113809A1 (en) * 2011-11-07 2013-05-09 Nvidia Corporation Technique for inter-procedural memory address space optimization in gpu computing compiler
US9250879B2 (en) * 2012-07-02 2016-02-02 International Business Machines Corporation Strength reduction compiler optimizations
US10588691B2 (en) 2012-09-12 2020-03-17 Relievant Medsystems, Inc. Radiofrequency ablation of tissue within a vertebral body
WO2014176587A2 (en) * 2013-04-26 2014-10-30 The Trustees Of Columbia University In The City Of New York Systems and methods for mobile applications
US9710388B2 (en) * 2014-01-23 2017-07-18 Qualcomm Incorporated Hardware acceleration for inline caches in dynamic languages
CN104915180B (zh) * 2014-03-10 2017-12-22 华为技术有限公司 一种数据操作的方法和设备
US9389890B2 (en) 2014-03-27 2016-07-12 Microsoft Technology Licensing, Llc Hierarchical directives-based management of runtime behaviors
EP3123316B1 (de) * 2014-03-27 2020-09-02 Microsoft Technology Licensing, LLC Unterstützung von dynamischem verhalten in statisch kompilierten programmen
US10061591B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Company, Ltd. Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing
US10061592B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Co., Ltd. Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices
CN104834532B (zh) * 2015-06-03 2018-01-02 星环信息科技(上海)有限公司 一种分布式数据向量化处理方法和装置
CN106708593B (zh) * 2015-07-16 2020-12-08 中兴通讯股份有限公司 一种程序链接的编译方法及装置
CN105183433B (zh) * 2015-08-24 2018-02-06 上海兆芯集成电路有限公司 指令合并方法以及具有多数据通道的装置
KR20170047957A (ko) * 2015-10-26 2017-05-08 삼성전자주식회사 반도체 장치의 동작 방법 및 반도체 시스템
CN105302577B (zh) * 2015-11-26 2019-05-07 上海兆芯集成电路有限公司 驱动执行单元的机器码产生方法以及装置
GB2546308B (en) * 2016-01-15 2019-04-03 Advanced Risc Mach Ltd Data processing systems
CN107292808B (zh) * 2016-03-31 2021-01-05 阿里巴巴集团控股有限公司 图像处理方法、装置及图像协处理器
CN105955892A (zh) * 2016-04-25 2016-09-21 浪潮电子信息产业股份有限公司 一种计算机系统中地址空间的扩展方法
US10198259B2 (en) 2016-06-23 2019-02-05 Advanced Micro Devices, Inc. System and method for scheduling instructions in a multithread SIMD architecture with a fixed number of registers
EP3270371B1 (de) * 2016-07-12 2022-09-07 NXP USA, Inc. Verfahren und vorrichtung verwaltung von grafikschichten in einer grafikanzeigekomponente
CN108021563B (zh) * 2016-10-31 2021-09-07 华为技术有限公司 一种指令间数据依赖的检测方法和装置
US10359971B2 (en) * 2017-07-17 2019-07-23 Hewlett Packard Enterprise Development Lp Storing memory profile data of an application in non-volatile memory
US11755382B2 (en) * 2017-11-03 2023-09-12 Coherent Logix, Incorporated Programming flow for multi-processor system
US10866806B2 (en) * 2017-11-14 2020-12-15 Nvidia Corporation Uniform register file for improved resource utilization
US11468312B2 (en) 2018-02-02 2022-10-11 Samsung Electronics Co., Ltd. Memory management for machine learning training on GPU
US11068247B2 (en) 2018-02-06 2021-07-20 Microsoft Technology Licensing, Llc Vectorizing conditional min-max sequence reduction loops
CN108304218A (zh) * 2018-03-14 2018-07-20 郑州云海信息技术有限公司 一种汇编代码的编写方法、装置、系统和可读存储介质
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
US10691430B2 (en) * 2018-08-27 2020-06-23 Intel Corporation Latency scheduling mehanism
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
CN111428327A (zh) * 2018-12-24 2020-07-17 深圳市中兴微电子技术有限公司 一种指令硬件架构的构建方法、装置及存储介质
WO2020154678A1 (en) * 2019-01-25 2020-07-30 The Regents Of The University Of California Coalescing operand register file for gpus
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (de) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. System und verfahren zur kollektiven kommunikation
US11294685B2 (en) * 2019-06-04 2022-04-05 International Business Machines Corporation Instruction fusion using dependence analysis
CN110162330B (zh) * 2019-07-08 2021-04-13 上海赫千电子科技有限公司 一种应用于汽车ecu升级文件的系统及方法
US11200061B2 (en) * 2019-11-19 2021-12-14 Microsoft Technology Licensing, Llc Pre-instruction scheduling rematerialization for register pressure reduction
CN112862658A (zh) * 2019-11-28 2021-05-28 中兴通讯股份有限公司 Gpu运行方法、装置、设备及存储介质
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11429310B2 (en) 2020-03-06 2022-08-30 Samsung Electronics Co., Ltd. Adjustable function-in-memory computation system
US11210071B2 (en) 2020-04-01 2021-12-28 Microsoft Technology Licensing, Llc Compiler sub expression directed acyclic graph (DAG) remat for register pressure
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
CN112214443B (zh) 2020-10-22 2021-12-03 上海壁仞智能科技有限公司 设置于图形处理器中的二次卸载装置和方法
CN112230931B (zh) 2020-10-22 2021-11-02 上海壁仞智能科技有限公司 适用于图形处理器的二次卸载的编译方法、装置和介质
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
US20220374236A1 (en) * 2021-05-20 2022-11-24 Huawei Technologies Co., Ltd. Method and system for optimizing address calculations
US11645076B2 (en) * 2021-07-26 2023-05-09 International Business Machines Corporation Register pressure target function splitting
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations

Family Cites Families (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4449196A (en) 1979-04-27 1984-05-15 Pritchard Eric K Data processing system for multi-precision arithmetic
TW237529B (de) * 1990-08-23 1995-01-01 Supercomp Systems Ltd Partnership
IL100990A (en) 1991-02-27 1995-10-31 Digital Equipment Corp Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher
US6286135B1 (en) * 1997-03-26 2001-09-04 Hewlett-Packard Company Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses
DE69804708T2 (de) * 1997-03-29 2002-11-14 Imec Vzw Verfahren und Gerät für Grössenoptimierung von Speichereinheiten
US7548238B2 (en) * 1997-07-02 2009-06-16 Nvidia Corporation Computer graphics shader systems and methods
US6785888B1 (en) * 1997-08-29 2004-08-31 International Business Machines Corporation Memory allocator for a multiprocessor computer system
US5903761A (en) 1997-10-31 1999-05-11 Preemptive Solutions, Inc. Method of reducing the number of instructions in a program code sequence
JP4751510B2 (ja) * 1997-12-10 2011-08-17 株式会社日立製作所 メモリアクセス最適化方法
US6748587B1 (en) * 1998-01-02 2004-06-08 Hewlett-Packard Development Company, L.P. Programmatic access to the widest mode floating-point arithmetic supported by a processor
US6256784B1 (en) 1998-08-14 2001-07-03 Ati International Srl Interpreter with reduced memory access and improved jump-through-register handling
US6415311B1 (en) 1999-06-24 2002-07-02 Ati International Srl Sign extension circuit and method for unsigned multiplication and accumulation
US6757892B1 (en) 1999-06-24 2004-06-29 Sarnoff Corporation Method for determining an optimal partitioning of data among several memories
US6438747B1 (en) * 1999-08-20 2002-08-20 Hewlett-Packard Company Programmatic iteration scheduling for parallel processors
US20020129340A1 (en) 1999-10-28 2002-09-12 Tuttle Douglas D. Reconfigurable isomorphic software representations
US6523173B1 (en) 2000-01-11 2003-02-18 International Business Machines Corporation Method and apparatus for allocating registers during code compilation using different spill strategies to evaluate spill cost
US6941549B1 (en) * 2000-03-31 2005-09-06 International Business Machines Corporation Communicating between programs having different machine context organizations
US20020038453A1 (en) 2000-08-09 2002-03-28 Andrew Riddle Method and system for software optimization
US7039906B1 (en) * 2000-09-29 2006-05-02 International Business Machines Corporation Compiler for enabling multiple signed independent data elements per register
GB2367650B (en) 2000-10-04 2004-10-27 Advanced Risc Mach Ltd Single instruction multiple data processing
US20030028864A1 (en) 2001-01-29 2003-02-06 Matt Bowen System, method and article of manufacture for successive compilations using incomplete parameters
US20040205740A1 (en) * 2001-03-29 2004-10-14 Lavery Daniel M. Method for collection of memory reference information and memory disambiguation
JP3763516B2 (ja) 2001-03-30 2006-04-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 変換プログラム、コンパイラ、コンピュータ装置およびプログラム変換方法
US20020144101A1 (en) 2001-03-30 2002-10-03 Hong Wang Caching DAG traces
US7162716B2 (en) * 2001-06-08 2007-01-09 Nvidia Corporation Software emulator for optimizing application-programmable vertex processing
US6865614B2 (en) * 2001-07-02 2005-03-08 Hewlett-Packard Development Company, L.P. Method for transferring a packed data structure to an unpacked data structure by copying the packed data using pointer
US7032215B2 (en) * 2001-10-11 2006-04-18 Intel Corporation Method and system for type demotion of expressions and variables by bitwise constant propagation
US7107584B2 (en) * 2001-10-23 2006-09-12 Microsoft Corporation Data alignment between native and non-native shared data structures
US8914590B2 (en) 2002-08-07 2014-12-16 Pact Xpp Technologies Ag Data processing method and device
US20110161977A1 (en) 2002-03-21 2011-06-30 Martin Vorbach Method and device for data processing
US7243342B2 (en) 2002-06-11 2007-07-10 Intel Corporation Methods and apparatus for determining if a user-defined software function is a memory allocation function during compile-time
US6954841B2 (en) 2002-06-26 2005-10-11 International Business Machines Corporation Viterbi decoding for SIMD vector processors with indirect vector element access
US7353243B2 (en) * 2002-10-22 2008-04-01 Nvidia Corporation Reconfigurable filter node for an adaptive computing machine
US7051322B2 (en) * 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US7451278B2 (en) * 2003-02-13 2008-11-11 Silicon Graphics, Inc. Global pointers for scalable parallel applications
JP2004303113A (ja) * 2003-04-01 2004-10-28 Hitachi Ltd 階層メモリ向け最適化処理を備えたコンパイラおよびコード生成方法
US20040221283A1 (en) 2003-04-30 2004-11-04 Worley Christopher S. Enhanced, modulo-scheduled-loop extensions
US20050071823A1 (en) 2003-09-29 2005-03-31 Xiaodong Lin Apparatus and method for simulating segmented addressing on a flat memory model architecture
US7124271B2 (en) * 2003-10-14 2006-10-17 Intel Corporation Method and system for allocating register locations in a memory during compilation
US7457936B2 (en) * 2003-11-19 2008-11-25 Intel Corporation Memory access instruction vectorization
US7567252B2 (en) 2003-12-09 2009-07-28 Microsoft Corporation Optimizing performance of a graphics processing unit for efficient execution of general matrix operations
US7814467B2 (en) * 2004-01-15 2010-10-12 Hewlett-Packard Development Company, L.P. Program optimization using object file summary information
US7376813B2 (en) 2004-03-04 2008-05-20 Texas Instruments Incorporated Register move instruction for section select of source operand
US8689202B1 (en) * 2004-03-30 2014-04-01 Synopsys, Inc. Scheduling of instructions
US8677312B1 (en) * 2004-03-30 2014-03-18 Synopsys, Inc. Generation of compiler description from architecture description
US7386842B2 (en) * 2004-06-07 2008-06-10 International Business Machines Corporation Efficient data reorganization to satisfy data alignment constraints
US7802076B2 (en) * 2004-06-24 2010-09-21 Intel Corporation Method and apparatus to vectorize multiple input instructions
US7472382B2 (en) * 2004-08-30 2008-12-30 International Business Machines Corporation Method for optimizing software program using inter-procedural strength reduction
US7389499B2 (en) * 2004-10-21 2008-06-17 International Business Machines Corporation Method and apparatus for automatically converting numeric data to a processor efficient format for performing arithmetic operations
US7730114B2 (en) * 2004-11-12 2010-06-01 Microsoft Corporation Computer file system
US7681187B2 (en) * 2005-03-31 2010-03-16 Nvidia Corporation Method and apparatus for register allocation in presence of hardware constraints
TWI306215B (en) * 2005-04-29 2009-02-11 Ind Tech Res Inst Method and corresponding apparatus for compiling high-level languages into specific processor architectures
CN100389420C (zh) * 2005-09-13 2008-05-21 北京中星微电子有限公司 用协处理器加速文件系统操作的方法及装置
US8037465B2 (en) * 2005-09-30 2011-10-11 Intel Corporation Thread-data affinity optimization using compiler
US7450131B2 (en) * 2005-09-30 2008-11-11 Intel Corporation Memory layout for re-ordering instructions using pointers
US7694288B2 (en) * 2005-10-24 2010-04-06 Analog Devices, Inc. Static single assignment form pattern matcher
US20070124631A1 (en) 2005-11-08 2007-05-31 Boggs Darrell D Bit field selection instruction
JP4978025B2 (ja) * 2006-02-24 2012-07-18 株式会社日立製作所 ポインタの圧縮・伸張方法、これを実行するプログラム、及び、これを用いた計算機システム
WO2008002173A1 (en) * 2006-06-20 2008-01-03 Intel Corporation Method and apparatus to call native code from a managed code application
US9601199B2 (en) * 2007-01-26 2017-03-21 Intel Corporation Iterator register for structured memory
US8321849B2 (en) * 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US9361078B2 (en) 2007-03-19 2016-06-07 International Business Machines Corporation Compiler method of exploiting data value locality for computation reuse
US8671401B2 (en) * 2007-04-09 2014-03-11 Microsoft Corporation Tiling across loop nests with possible recomputation
US8411096B1 (en) * 2007-08-15 2013-04-02 Nvidia Corporation Shader program instruction fetch
US20090070753A1 (en) 2007-09-07 2009-03-12 International Business Machines Corporation Increase the coverage of profiling feedback with data flow analysis
US8555266B2 (en) 2007-11-13 2013-10-08 International Business Machines Corporation Managing variable assignments in a program
US7809925B2 (en) 2007-12-07 2010-10-05 International Business Machines Corporation Processing unit incorporating vectorizable execution unit
JP5244421B2 (ja) 2008-02-29 2013-07-24 株式会社ソニー・コンピュータエンタテインメント 情報処理装置およびプログラム分割方法
US8255884B2 (en) * 2008-06-06 2012-08-28 International Business Machines Corporation Optimized scalar promotion with load and splat SIMD instructions
US20100184380A1 (en) 2009-01-20 2010-07-22 Qualcomm Incorporated Mitigating intercarrier and intersymbol interference in asynchronous wireless communications
US20100199270A1 (en) 2009-01-30 2010-08-05 Ivan Baev System, method, and computer-program product for scalable region-based register allocation in compilers
US8713543B2 (en) * 2009-02-11 2014-04-29 Johnathan C. Mun Evaluation compiler method
US8831666B2 (en) 2009-06-30 2014-09-09 Intel Corporation Link power savings with state retention
US8819622B2 (en) 2009-09-25 2014-08-26 Advanced Micro Devices, Inc. Adding signed 8/16/32-bit integers to 64-bit integers
US8271763B2 (en) * 2009-09-25 2012-09-18 Nvidia Corporation Unified addressing and instructions for accessing parallel memory spaces
CA2684226A1 (en) * 2009-10-30 2011-04-30 Ibm Canada Limited - Ibm Canada Limitee Eleminating redundant operations for common properties using shared real registers
US8578357B2 (en) * 2009-12-21 2013-11-05 Intel Corporation Endian conversion tool
US8453135B2 (en) 2010-03-11 2013-05-28 Freescale Semiconductor, Inc. Computation reuse for loops with irregular accesses
CN101833435A (zh) * 2010-04-19 2010-09-15 天津大学 基于传输触发架构可配置处理器指令冗余消除方法
US8645758B2 (en) * 2010-04-29 2014-02-04 International Business Machines Corporation Determining page faulting behavior of a memory operation
US8954418B2 (en) * 2010-05-14 2015-02-10 Sap Se Performing complex operations in a database using a semantic layer
US8799583B2 (en) * 2010-05-25 2014-08-05 International Business Machines Corporation Atomic execution over accesses to multiple memory locations in a multiprocessor system
JP5583514B2 (ja) * 2010-08-11 2014-09-03 インターナショナル・ビジネス・マシーンズ・コーポレーション バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
US8538912B2 (en) * 2010-09-22 2013-09-17 Hewlett-Packard Development Company, L.P. Apparatus and method for an automatic information integration flow optimizer
KR101782373B1 (ko) * 2010-11-10 2017-09-29 삼성전자 주식회사 X-y 스택 메모리를 이용한 컴퓨팅 장치 및 방법
US8997066B2 (en) * 2010-12-27 2015-03-31 Microsoft Technology Licensing, Llc Emulating pointers
GB2488980B (en) * 2011-03-07 2020-02-19 Advanced Risc Mach Ltd Address generation in a data processing apparatus
US8566537B2 (en) * 2011-03-29 2013-10-22 Intel Corporation Method and apparatus to facilitate shared pointers in a heterogeneous platform
US8640112B2 (en) * 2011-03-30 2014-01-28 National Instruments Corporation Vectorizing combinations of program operations
US20130113809A1 (en) * 2011-11-07 2013-05-09 Nvidia Corporation Technique for inter-procedural memory address space optimization in gpu computing compiler
US9092228B2 (en) * 2012-01-17 2015-07-28 Texas Instruments Incorporated Systems and methods for software instruction translation from a high-level language to a specialized instruction set
JP5840014B2 (ja) * 2012-02-01 2016-01-06 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation コンパイル方法、プログラムおよび情報処理装置
US9043582B2 (en) * 2012-09-14 2015-05-26 Qualcomm Innovation Center, Inc. Enhanced instruction scheduling during compilation of high level source code for improved executable code
US9411558B2 (en) * 2012-10-20 2016-08-09 Luke Hutchison Systems and methods for parallelization of program code, interactive data visualization, and graphically-augmented code editing
US10140403B2 (en) * 2012-12-01 2018-11-27 Synopsys Inc. Managing model checks of sequential designs
US9396240B2 (en) * 2013-12-03 2016-07-19 Business Objects Software Ltd. Extreme visualization enabling extension for large data sets
US9710245B2 (en) * 2014-04-04 2017-07-18 Qualcomm Incorporated Memory reference metadata for compiler optimization
US10444759B2 (en) * 2017-06-14 2019-10-15 Zoox, Inc. Voxel based ground plane estimation and object segmentation

Also Published As

Publication number Publication date
US10228919B2 (en) 2019-03-12
TWI502509B (zh) 2015-10-01
US20190087164A1 (en) 2019-03-21
CN103348317B (zh) 2017-02-15
WO2013070621A2 (en) 2013-05-16
US20130117548A1 (en) 2013-05-09
WO2013070635A1 (en) 2013-05-16
US9639336B2 (en) 2017-05-02
DE112012000195T5 (de) 2013-08-08
WO2013070616A1 (en) 2013-05-16
TWI498817B (zh) 2015-09-01
US20130117734A1 (en) 2013-05-09
TWI483182B (zh) 2015-05-01
CN103608774A (zh) 2014-02-26
TW201333877A (zh) 2013-08-16
CN103339621A (zh) 2013-10-02
DE112012000214T5 (de) 2013-09-12
US20130113809A1 (en) 2013-05-09
TW201337764A (zh) 2013-09-16
US9009686B2 (en) 2015-04-14
WO2013070637A1 (en) 2013-05-16
US20130117735A1 (en) 2013-05-09
US9436447B2 (en) 2016-09-06
DE112012000212T5 (de) 2013-08-01
TW201331833A (zh) 2013-08-01
WO2013070621A3 (en) 2016-05-19
DE112012000187T5 (de) 2013-09-12
TW201333816A (zh) 2013-08-16
WO2013070636A1 (en) 2013-05-16
CN103348317A (zh) 2013-10-09
CN103460188A (zh) 2013-12-18
CN104641350A (zh) 2015-05-20
TW201333874A (zh) 2013-08-16
US20130117737A1 (en) 2013-05-09
TWI604410B (zh) 2017-11-01
TWI509561B (zh) 2015-11-21

Similar Documents

Publication Publication Date Title
DE112012000209T5 (de) Ein nachfragegesteuerter Algorithmus zum Reduzieren der Vorzeichenerweiterungsinstruktionen, die in Programmschleifen eines 64-Bit-Computerprogramms enthalten sind
DE112012000303B4 (de) Dynamische binäre Optimierung
US7757221B2 (en) Apparatus and method for dynamic binary translator to support precise exceptions with minimal optimization constraints
CA2675686C (en) Object collocation
DE202012009380U1 (de) Befehl und Logik zum Durchführen einer dynamischen Binärübersetzung
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102008005515A1 (de) Virtuelle Architektur und virtueller Befehlssatz für die Berechnung paralleler Befehlsfolgen
DE10297624T5 (de) Steuerung von Kompatibilitätsgraden von Binärcode-Übersetzungen zwischen Befehlssatzarchitekturen
US20150046684A1 (en) Technique for grouping instructions into independent strands
DE102013019333A1 (de) Registerzuweisung für als cluster vorliegende mehrebenen-registerdaten
DE102018003612A1 (de) Befehle für Dualzieltyp-Umwandlung-, Akkumulation- mit gemischter Präzision und atomare Speicheroperationen mit gemischter Präzision
DE102014002840A1 (de) Vorrichtung und Verfahren für die Bindung von Speicherinformationen
DE102013208418A1 (de) Verfahren und System zur separaten Kompilierung von Geräte-Code, welcher in Host-Code eingebettet ist
DE102015122908A1 (de) System und Verfahren zur Compiler-Unterstützung zur Code-Kompilierungszeit-Anpassung
CN103077011B (zh) 一种在JavaScript脚本语言中预生成机器码指令的方法和装置
DE102019134388A1 (de) Filteroptimierung zur verbesserung der rechnerischen effizienz von faltungsoperationen
DE112020003634T5 (de) Automatische verifizierung der optimierung von konstrukten auf hoher ebene unter verwendung von prüfvektoren
DE60037229T2 (de) Verfahren zum Übersetzen eines Quellbefehls in einen Zielbefehl und Rechnerprogramm für das Verfahren
CN112114817B (zh) 基于cobol语言的数据字典字段信息获取方法及装置
Huang et al. HFGD: High-level Feature Guided Decoder for Semantic Segmentation
DE112013007841B3 (de) System, vorrichtung und verfahren zum empfangen einer sync-kopfzeile und protokollidentifikationsdaten
DE102018128497A1 (de) Einheitliche registerdatei zur verbesserten ressourcennutzung
DE112013007842B3 (de) System, vorrichtung und verfahren zum erzeugen und senden von flits verschiedener protokolle in unterschiedlichen modi
CN116149793A (zh) 一种二进制翻译的寄存器映射方法
DE102018127732A1 (de) Binden von Konstanten bei Laufzeit zur verbesserten Ressourcennutzung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: KRAUS & WEISERT PATENTANWAELTE PARTGMBB, DE

Representative=s name: DILG HAEUSLER SCHINDELMANN PATENTANWALTSGESELL, DE

R082 Change of representative

Representative=s name: KRAUS & WEISERT PATENTANWAELTE PARTGMBB, DE

R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0007380000

Ipc: G06F0009450000

R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0009450000

Ipc: G06F0009440000

R016 Response to examination communication