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 PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting 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
2A –2D 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 Computersystem100 zeigt, das zum Implementieren eines oder mehrerer Aspekte der vorliegenden Erfindung konfiguriert ist. Das Computersystem100 weist eine zentrale Verarbeitungseinheit (engl. „central processing unit”) (CPU)102 und einen Systemspeicher104 auf, die über einen Verbindungspfad (engl. „interconnection path”), der eine Speicherbrücke105 aufweisen mag, miteinander in Verbindung stehen bzw. kommunizieren. Die Speicherbrücke105 , die zum Beispiel ein Northbridge-Chip sein mag, ist über einen Bus oder einen anderen Kommunikationspfad106 (zum Beispiel einen HyperTransport-Links) mit einer I/O-(Input/Output)-Brücke107 verbunden. Die I/O-Brücke107 , welche zum Beispiel ein Southbridge-Chip sein mag, erhält User-Input von einer oder mehreren User-Input-Vorrichtungen108 (zum Beispiel Tastatur, Maus) und leitet den Input über den Kommunikationspfad106 und die Speicherbrücke105 an die CPU102 weiter. Ein Parallelverarbeitungssubsystem112 ist über einen Bus oder einen zweiten Kommunikationspfad113 (zum Beispiel einen Peripheral Component Interconnect (PCI) Express, einen beschleunigten Grafikport (engl. „Accelerated Graphics Port”), oder einen HyperTransport-Link) an die Speicherbrücke105 gekoppelt; in einer Ausführungsform ist das Parallelverarbeitungssubsystem112 ein Grafiksubsystem, das Pixel zu einer Displayvorrichtung110 liefert, die jede konventionelle Kathodenstrahlröhre, Flüssigkristalldisplay, LED-Display (engl. „light-emitting diode display”) oder ähnliches sein mag. Eine Systemdisk114 ist auch mit der I/O-Brücke107 verbunden und mag konfiguriert sein zum Speichern von Inhalt und Applikationen und Daten zur Verwendung durch die CPU102 und das Parallelverarbeitungssubsystem112 . Die Systemdisk114 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ücke107 und anderen Bauteilen, wie zum Beispiel einem Netzwerkadapter118 und verschiedenen Erweiterungskarten (engl. „add-in cards”)120 und121 , 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ücke107 verbunden sein. Die verschiedene Verbindungspfade, die in1 gezeigt sind, einschließlich der spezifisch gekennzeichneten Verbindungspfaden106 und113 , 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 Parallelverarbeitungssubsystem112 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 Parallelverarbeitungssubsystem112 mit einem oder mehreren anderen Systemelementen in einem einzigen Subsystem integriert sein, wie zum Beispiel durch Zusammenführung der Speicherbrücke105 , der CPU102 und der I/O-Brücke107 , 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)-Speicher204 gekoppelt ist. Im Allgemeinen weist ein Parallelverarbeitungssubsystem112 eine Anzahl U von PPUs auf, wobei U ≥ 1. In einigen Ausführungsformen sind einige oder alle der PPUs in dem Parallelverarbeitungssubsystem112 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 CPU102 und/oder dem Systemspeicher104 über die Speicherbrücke105 und den zweiten Kommunikationspfad113 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 Displayvorrichtung110 mit Pixeldaten, und ähnliches. In einigen Ausführungsformen mag das Parallelverarbeitungssubsystem112 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 CPUs102 und der Anzahl von Parallelverarbeitungssubsystemen112 , mag, wie gewünscht, variiert werden. In einigen Ausführungsformen ist der Systemspeicher104 zum Beispiel direkt mit der CPU102 verbunden, statt durch eine Brücke, und andere Vorrichtungen kommunizieren mit dem Systemspeicher104 über die Speicherbrücke105 und die CPU102 . In anderen alternativen Topologien ist das Parallelverarbeitungssubsystem112 mit der I/O-Brücke107 oder direkt mit der CPU102 verbunden, statt mit der Speicherbrücke105 . In noch anderen Ausführungsformen mögen die I/O-Brücke107 und Speicherbrücke105 in einem einzigen Chip integriert sein, statt als eine oder mehrere diskrete Vorrichtungen zu existieren. Große Ausführungsformen mögen zwei oder mehr CPUs102 und zwei oder mehr Parallelverarbeitungssubsysteme112 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 Netzwerkadapter118 und die Erweiterungskarten120 ,121 sind direkt mit der I/O-Brücke107 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 Computersystem100 der1 ausgeführt wird. Der Compiler150 ist dazu konfiguriert, einen Algorithmus zu implementieren, um die intermediären Instruktionen zu vereinfachen, die ein Computerprogramm bilden. Der Compiler150 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 Compiler150 den intermediären Code verarbeitet, folgt. - Die
2A –2D zeigen ein Flussdiagramm von Verfahrensschritten200 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 von1 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 Verfahren200 bei Schritt202 , in welchem der Compiler150 intermediären Code eines Computerprogramms erhält, der mindestens eine Programmschleife enthält. Bei Schritt204 initialisiert der Compiler150 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. -
- 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 Schritt208 stellt der Compiler150 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 Schrittes208 . 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 Compilers150 , den intermediären Code, der beim Schritt202 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 Compiler150 beim Schritt208 feststellt, dass die jetzige Programmschleife mindestens eine SEI von der Form „t1 = sxt(t2)” enthält, dann geht das Verfahren200 weiter zum Schritt210 . Anderenfalls geht das Verfahren200 weiter zum Schritt218 von2B , 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 Compiler150 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 Schrittes210 . Bei Schritt212 stellt der Compiler150 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 Schrittes212 wahr (engl. „true”) ist, dann ist die jetzige SEI eine Kandidatin eliminiert zu werden und das Verfahren200 geht weiter zu Schritt222 , der unten beschrieben wird. Anderenfalls geht das Verfahren200 weiter zu Schritt214 , der auch unten beschrieben wird. - Bei Schritt
222 stellt der Compiler150 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 Compiler150 im Schritt222 feststellt, dass t2 der jetzigen SEI ein Blatt der jetzigen Programmschleife ist, dann geht das Verfahren200 zurück zum Schritt214 , der unten beschrieben wird. Anderenfalls geht das Verfahren200 weiter zu Schritt224 , bei dem der Compiler150 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 Compiler150 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 Compiler150 fest, ob der Stack von SEIs leer ist. Falls der Compiler150 beim Schritt150 feststellt, dass der Stack von SEIs leer ist, dann geht das Verfahren200 weiter zum Schritt214 , der unten beschrieben wird. Anderenfalls geht das Verfahren200 weiter zu Schritt228 , in welchem der Compiler150 eine temporäre SEI von dem Stack von SEIs herausnimmt. - Bei Schritt
230 stellt der Compiler150 fest, ob die temporäre SEI ein Blatt der jetzigen Programmschleife ist. Falls der Compiler150 beim Schritt230 feststellt, dass t2 der temporären SEI ein Blatt der jetzigen Programmschleife ist, dann geht das Verfahren200 weiter zu Schritt232 von2C , der unten beschrieben wird. Anderenfalls geht das Verfahren200 zurück zum Schritt226 , 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 Compiler150 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 Compiler150 beim Schritt232 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 Verfahren200 weiter zu Schritt234 . Anderenfalls geht das Verfahren200 zurück zum Schritt226 von2B , der oben beschrieben wurde. - Beim Schritt
234 stellt der Compiler150 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 Compiler150 beim Schritt234 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 Verfahren200 weiter zu Schritt238 , der unten beschrieben wird. Anderenfalls geht das Verfahren200 weiter zu Schritt236 , bei welchem der Compiler150 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 Compiler150 fest, ob ein Wert in der Abbildung für den Schlüssel (y, <Typ von t1 von der temporären SEI>) existiert. Falls der Compiler150 beim Schritt238 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 Verfahren200 weiter zu Schritt242 , der unten beschrieben wird. Anderenfalls geht das Verfahren200 weiter zu Schritt240 , in welchem der Compiler150 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 Schritts240 umfasst insbesondere, dass eine Vorzeichenerweiterung in den Pre-Header der jetzigen Programmschleife hinein gefügt wird. - Das Verfahren
200 geht folglich weiter zu Schritt242 , bei welchem der Compiler150 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 Schritt244 der2D . 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: 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 Compiler150 den Schlüssel (t2, <Typ von t1 von der temporären SEI>) zu dem Wert von t2' in der Abbildung. Bei Schritt246 ersetzt der Compiler150 , in der jetzigen Programmschleife, alle Vorkommnisse von t1 durch t2'. Bei Schritt248 entfernt der Compiler150 die temporäre SEI aus der jetzigen Programmschleife. Das Verfahren200 returniert dann zum Schritt226 der2B , in welchem die Verfahrensschritte228 –248 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 Verfahren200 außer Acht gelassen. Alternativ ist die SEI „i2'.i64 = sxt(i2.i32)” für die Operation des Schritts240 geeignet. Gemäß der hierin beschriebenen Technik würde das Modifizieren der SEI „i2'.i64 = sxt(i2.i32)” beinhalten, dass der Compiler150 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: - 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 Compiler150 feststellt, dass die jetzige Programmschleife nicht mindestens eine SEI von der Form „t1 = sxt(t2)” enthält, dann geht das Verfahren200 weiter zum Schritt218 der2B , der oben beschrieben wurde. - Jetzt mit Rückbezug auf den Schritt
212 , falls der Compiler150 feststellt, dass „t2” von der jetzigen SEI keine affine Funktion einer Induktionsvariable der jetzigen Programmschleife ist, dann geht das Verfahren weiter zu Schritt214 , bei dem der Compiler150 feststellt, ob zusätzliche SEIs in der jetzigen Programmschleife enthalten sind. Falls der Compiler150 beim Schritt214 feststellt, dass zusätzliche SEIs in der jetzigen Programmschleife enthalten sind, dann geht das Verfahren200 weiter zu Schritt216 , der unten beschrieben wird. Anderenfalls geht das Verfahren200 weiter zum Schritt218 der2B , der oben beschrieben wurde. - Beim Schritt
216 setzt der Compiler150 die jetzige SEI zum Zeigen auf eine nächste SEI der jetzigen Programmschleife. Der Compiler150 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 Schritt218 stellt der Compiler150 fest, ob zusätzliche Programmschleifen in dem intermediären Code enthalten sind. Falls der Compiler150 beim Schritt218 feststellt, dass zusätzliche Programmschleifen in dem intermediären Code enthalten sind, dann geht das Verfahren200 weiter zu Schritt220 , der unten beschrieben wird. Anderenfalls endet das Verfahren200 , da jede Programmschleife, die in dem intermediären Code enthalten ist, von dem Compiler150 gemäß den hierein beschriebenen Techniken untersucht worden ist. - Beim Schritt
220 setzt der Compiler150 die jetzige Programmschleife zu einer nächsten Programmschleife, die in dem intermediären Code enthalten ist. Das Verfahren200 geht dann zurück zum Schritt208 , wonach die nachfolgenden Schritte210 –248 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 Compiler150 stellt gemäß dem oben beschriebenen Verfahren200 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)
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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)
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)
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 |
-
2012
- 2012-10-24 US US13/659,802 patent/US20130113809A1/en not_active Abandoned
- 2012-10-24 US US13/659,786 patent/US9009686B2/en active Active
- 2012-10-25 US US13/660,986 patent/US9639336B2/en active Active
- 2012-10-26 US US13/661,478 patent/US10228919B2/en active Active
- 2012-11-05 US US13/669,401 patent/US9436447B2/en active Active
- 2012-11-06 DE DE112012000195T patent/DE112012000195T5/de active Pending
- 2012-11-06 WO PCT/US2012/063754 patent/WO2013070635A1/en active Application Filing
- 2012-11-06 WO PCT/US2012/063756 patent/WO2013070636A1/en active Application Filing
- 2012-11-06 DE DE112012000214T patent/DE112012000214T5/de active Pending
- 2012-11-06 CN CN2012800066826A patent/CN103339621A/zh active Pending
- 2012-11-06 CN CN2012800132283A patent/CN103460188A/zh active Pending
- 2012-11-06 DE DE112012000187T patent/DE112012000187T5/de active Pending
- 2012-11-06 DE DE112012000209T patent/DE112012000209T5/de active Pending
- 2012-11-06 CN CN201280029582.5A patent/CN103608774A/zh active Pending
- 2012-11-06 WO PCT/US2012/063757 patent/WO2013070637A1/en active Application Filing
- 2012-11-06 DE DE112012000212T patent/DE112012000212T5/de active Pending
- 2012-11-06 WO PCT/US2012/063730 patent/WO2013070621A2/en active Application Filing
- 2012-11-06 WO PCT/US2012/063723 patent/WO2013070616A1/en active Application Filing
- 2012-11-06 CN CN201280003006.3A patent/CN104641350A/zh active Pending
- 2012-11-06 CN CN201280006681.1A patent/CN103348317B/zh active Active
- 2012-11-07 TW TW101141372A patent/TWI604410B/zh active
- 2012-11-07 TW TW101141369A patent/TWI509561B/zh active
- 2012-11-07 TW TW101141366A patent/TWI498817B/zh active
- 2012-11-07 TW TW101141361A patent/TWI483182B/zh not_active IP Right Cessation
- 2012-11-07 TW TW101141357A patent/TWI502509B/zh not_active IP Right Cessation
-
2018
- 2018-11-19 US US16/195,776 patent/US20190087164A1/en active Pending
Also Published As
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 |