DE112012000212T5 - Technik für live Analyse-basierte Rematerialisation zur Reduktion von Registerdruck und zur Verbesserung von Parallelität - Google Patents

Technik für live Analyse-basierte Rematerialisation zur Reduktion von Registerdruck und zur Verbesserung von Parallelität Download PDF

Info

Publication number
DE112012000212T5
DE112012000212T5 DE112012000212T DE112012000212T DE112012000212T5 DE 112012000212 T5 DE112012000212 T5 DE 112012000212T5 DE 112012000212 T DE112012000212 T DE 112012000212T DE 112012000212 T DE112012000212 T DE 112012000212T DE 112012000212 T5 DE112012000212 T5 DE 112012000212T5
Authority
DE
Germany
Prior art keywords
live
variables
block
subset
control flow
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
DE112012000212T
Other languages
English (en)
Inventor
Yuan Lin
Vinod Grover
Xiangyun Kong
Jian-Zhong Wang
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 DE112012000212T5 publication Critical patent/DE112012000212T5/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Ein Geräte-Compiler-und-Linker innerhalb einer Parallelverarbeitungseinheit (PPU) ist konfiguriert zum Optimieren eines Programmcode von einer Coprozessor-geeigneten Anwendung durch Rematerialisation einer Teilmenge von Live-in-Variablen für einen bestimmten Block in einem Kontrollflussgraphen, der für diesen Programmcode erzeugt worden ist. Der Geräte-Compiler-und-Linker identifiziert den Block des Kontrollflussgraphen, welcher Block die größte Anzahl von Live-in-Variablen hat, und wählt dann eine Teilmenge von den Live-in-Variablen aus, die mit dem identifizierten Block assoziiert sind, für welchen eine Rematerialisation die größte geschätzte Profitabilität gewährt. Die Profitabilität von einer Rematerialisation einer gegebenen Teilmenge von Live-in-Variablen wird basierend auf der Anzahl von reduzierten Live-in-Variablen, den Kosten der Rematerialisation und der potentiellen Risiko bestimmt, der mit der Rematerialisation verbunden ist.

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/669,401, welche am 5. November 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 Compiler für Parallelverarbeitungseinheiten (PPUs) und spezifischer auf eine Technik für live Analyse-basierte Rematerialisation (engl. „live analysis-based rematerialization”) zur Reduktion von Registerdruck (engl. „register pressure”) und zur Verbesserung von Parallelität.
  • Beschreibung des verwandten Standes der Technik
  • Graphikverarbeitungseinheiten (GPUs) sind mit der Zeit so entwickelt worden, dass sie zusätzlich zu graphikorientierten Operationen eine Vielzahl von Operationen unterstützen. Eine moderne GPU mag in der Tat dazu fähig sein, arbiträre Programmbefehle auszuführen. Eine solche GPU weist typischerweise einen Compiler auf, der Programmbefehle zur Ausführung auf einem oder mehreren Verarbeitungskernen kompiliert, die innerhalb der GPU enthalten sind. Jeder solche Kern mag einen oder mehrere verschiedenen Ausführungsthreads parallel zu anderen Verarbeitungskernen ausführen, die Ausführungsthreads ausführen.
  • Wenn ein Verarbeitungskern innerhalb der GPU eine Menge bzw. einen Satz von Programmbefehle ausführt, mag der Verarbeitungskern die Programmvariable, die mit diesen Befehlen assoziiert sind, in Registerspeicher speichern. Wenn der Registerspeicher von den Programmvariablen vollständig verbraucht ist, mögen zusätzliche Programmvariable in den Systemspeicher hinein „überlaufen” (engl. „spill”), wie es in der Technik bekannt ist. Ein Problem bei der konventionellen Vorgehensweise bzgl. „Überlaufens” ist, dass der Systemspeicher eine viel größere Latenz als der Registerspeicher hat. Folglich mag die Geschwindigkeit, mit der die Programmbefehle ausgeführt werden, dramatisch abfallen, nachdem ein „Überlauf”-Ereignis stattgefunden hat, da die Programmvariable aus dem Systemspeicher statt aus dem Registerspeicher abgerufen werden müssen. Ein zweites Problem ist, dass die Anzahl von Threads, die ein gegebener Verarbeitungskern innerhalb einer Verarbeitungseinheit simultan ausführen kann, von dem verfügbaren Registerspeicher abhängig ist. Das Auffüllen des Registerspeichers mit Programmvariablen mag folglich letztendlich dazu führen, dass die Anzahl von simultan ausführenden Threads reduziert wird, und demzufolge, dass der gesamte Verarbeitungsdurchsatz der GPU reduziert wird.
  • Folglich ist das, was auf dem technischen Gebiet benötigt wird, eine effizientere Technik zum Managen von Registerspeicher innerhalb einer GPU.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Eine Ausführungsform der vorliegenden Erfindung legt ein computerimplementiertes Verfahren zur Optimierung von Programmcode dar, der zur Ausführung auf einer Parallelverarbeitungseinheit (PPU) kompiliert werden kann, aufweisend ein Erzeugen eines Kontrollflussgraphen (engl. „control flow graph”) für den Programmcode, ein Identifizieren eines ersten Blocks in dem Kontrollflussgraphen, welcher Block im Vergleich mit anderen Blöcken in dem Kontrollflussgraphen die größte Anzahl von Live-in-Variablen aufweist, ein Auswählen einer ersten Teilmenge von Live-in-Variablen, die mit den ersten Block assoziiert sind, durch Ausführen einer Profitabilitätsanalyse (engl. „profitability analysis”) auf unterschiedlichen Teilmengen von Live-in-Variablen, die mit dem ersten Block assoziiert sind, und ein Optimieren des Programmcodes durch Rematerialisieren (engl. „rematerializing”) der ersten Teilmenge von Live-in-Variablen in einen zweiten Block in dem Kontrollflussgraphen, welcher zweite Block nachfolgend zu dem ersten Block in dem Kontrollflussgraphen ist, wobei der optimierte Programmcode auf der PPU ausgeführt werden soll.
  • Ein Vorteil der offenbarten Technik ist, dass das Rematerialisieren bestimmter Teilmengen von Live-in-Variablen den Registerdruck reduziert, wodurch die Wahrscheinlichkeit eines „Überlauf”-Ereignisses reduziert wird. Das Reduzieren des Registerdrucks erlaubt auch, dass eine größere Anzahl von Ausführungsthreads innerhalb einer PPU simultan ausgeführt wird, wodurch der gesamte Verarbeitungsdurchsatz der PPU erhöht wird.
  • 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;
  • 2 ist ein Blockdiagramm von einem Parallelverarbeitungssubsystem für das Computersystem von 1, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3 zeigt einen Erstellungsprozess (engl. „build process”), der zum Kompilieren einer Coprozessor-geeigneten Anwendung (engl. „co-processor enabled application”) verwendet wird, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 4 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung von live Analyse-basierter Rematerialisation mit einer Menge von Live-in-Variablen, gemäß einer Ausführungsform der Erfindung;
  • 5 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung von einen Profitabilitätsanalyse auf einer Menge von Live-in-Variablen, gemäß einer Ausführungsform der Erfindung; und
  • 6 legt einen beispielhaften Kontrollflussgraphen dar, um die Operation eines Geräte-Compiler-und-Linker (engl. „device compiler and linker”) zu illustrieren, 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. Der Systemspeicher 104 enthält ein Abbild eines Operativsystems 130, einen Treiber 103 und eine Coprozessor-geeignete Anwendung 134. Das Operativsystem 130 stellt detaillierte Befehle zum Managen und Koordinieren der Operation des Computersystems 100 bereit. Der Treiber 103 stellt detaillierte Befehle zum Managen und Koordinieren der Operation vom Parallelverarbeitungssubsystem 112 und einem oder mehreren darin residierenden Parallelverarbeitungseinheiten (PPUs) bereit, wie es unten in Verbindung mit der 2 detaillierter beschrieben wird. Der Treiber 103 stellt auch Kompilierungsmittel zum Erzeugen von Maschinencode bereit, der für solche PPUs spezifisch optimiert ist, wie es unten in Verbindung mit den 36 detaillierter beschrieben wird. Die Coprozessor-geeignete Anwendung 134 enthält Befehle, die auf der CPU 102 und den PPUs ausgeführt werden können, wobei diese Befehle in einem abstrakten Format implementiert sind, wie zum Beispiel virtuellem Assembler (engl. „virtual assembly”), und zu Maschinencode für die PPUs innerhalb des Verarbeitungssubsystem 112 mappt. Der Maschinencode für diese PPUs mag im Systemspeicher 104 oder in einem Speicher, der an die PPUs gekoppelt ist, gespeichert sein.
  • In einer Ausführungsform stellt die Coprozessor-geeignete Anwendung 134 CUDATM-Code dar, der Programmbefehle enthält, die für Ausführung auf dem Parallelverarbeitungssystem 112 bestimmt sind. Im Kontext der vorliegenden Beschreibung mag der Begriff „Anwendung” oder „Programm” auf jeglichen Computercode, jegliche Befehle und/oder jegliche Funktionen hinweisen, die unter Verwendung eines Prozessors ausgeführt werden können. In verschiedenen Ausführungsformen mag die Coprozessor-geeignete Anwendung 134 zum Beispiel C-Code, C++-Code usw. enthalten. In einer Ausführungsform mag die Coprozessor-geeignete Anwendung 134 eine Programmierspracheerweiterung von einer Computersprache enthalten (zum Beispiel C, C++ usw.).
  • 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-Link) mit einer Input/Output-(I/O)-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 Express” (PCIe), einen beschleunigten Grafikport (engl. „Accelerated Graphics Port”) (AGP), 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, Lichtemittierende-Diode-Display oder ähnliches sein mag. Eine Systemdisk 114 ist auch mit der I/O-Brücke 107 verbunden und mag dazu konfiguriert sein, Inhalt und Anwendungen und Daten zu speichern, so dass diese von der CPU 102 und dem Parallelverarbeitungssubsystem 112 verwendet werden können. Die Systemdisk 114 stellt nicht flüchtigen Speicher für Anwendungen und Daten bereit und mag feste oder lösbare Festplattenlaufwerke, Flashspeichervorrichtungen und Compact-Disk-(CD)-Festspeicher (ROM), Digital-Video-Disk-(DVD)-ROM, Blu-Ray, High-Definition-(HD)-DVD oder andere magnetischen, optischen oder Festkörper-Speichervorrichtungen enthalten.
  • Ein Switch 116 stellt Verbindungen zwischen der I/O-Brücke 107 und anderen Bauteilen bereit, wie zum Beispiel einem Netzwerkadapter 118 und verschiedenen Erweiterungskarten (engl. „add-in cards”) 120 und 121. Andere (nicht explizit dargestellte) Bauteile, einschließlich Universal-Serial-Bus (USB) oder anderer Portanschlüsse (engl. „port connections”), CD-Laufwerke, DVD-Laufwerke, Filmaufzeichnungsvorrichtungen und ähnliches, mögen auch mit der I/O-Brücke 107 verbunden sein. Die verschiedenen Verbindungspfade, die in 1 gezeigt sind, einschließlich der spezifisch benannten Kommunikationspfade 106 und 113, mögen unter Verwendung von jeglichen geeigneten Protokollen, wie zum Beispiel PCIe, AGP, 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ühren der Speicherbrücke 105, der CPU 102 und der I/O-Brücke 107, um ein System-auf-Chip (engl. „system an chip”) (SoC) zu bilden.
  • Es wird verstanden werden, dass das hierin gezeigte System 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 über die Speicherbrücke 105 und die CPU 102 mit dem Systemspeicher 104. 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 Peripheriegeräten 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.
  • 2 zeigt ein Parallelverarbeitungssubsystem 112 gemäß einer Ausführungsform der vorliegenden Erfindung. Das Parallelverarbeitungssubsystem 112 weist, wie gezeigt, eine oder mehr Parallelverarbeitungseinheiten (engl. „Parallel Processing Units”) (PPUs) 202 auf, wobei jede von denen an einen lokalen Parallelverarbeitungs-(PP)-Speicher 204 gekoppelt ist. Im Allgemeinen weist ein Parallelverarbeitungssubsystem eine Anzahl U von PPUs auf, wobei U größer oder gleich 1 ist. (Hierin werden mehrere Instanzen ähnlicher Objekte mit Bezugszeichen, die das Objekt identifizieren, und Ziffern in Klammern, die, wenn nötig, die Instanz identifizieren, gekennzeichnet.) Die PPUs 202 und die Parallelverarbeitungsspeicher 204 mögen unter Verwendung einer oder mehrerer integrierten Schaltungsvorrichtungen implementiert werden, wie zum Beispiel programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (engl. „Application Specific Integrated Circuits”) (ASICs) oder Speichervorrichtungen, oder in jeder anderen technisch realisierbaren Art und Weise.
  • In einigen Ausführungsformen sind, wieder mit Bezug auf sowie 1 als auch auf 2, einige oder alle der PPUs 202 in dem Parallelverarbeitungssubsystem 112 Grafikprozessoren mit Rendering-Pipelines, die dazu konfiguriert werden können, verschiedene Operationen in Bezug auf das Erzeugen 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, auszuführen, mit lokalem Parallelverarbeitungsspeicher 204 (der als Grafikspeicher einschließlich, zum Beispiel, eines konventionellen Framepuffers benutzt werden kann) zu interagieren, um Pixeldaten zu speichern und zu aktualisieren, Pixeldaten an die Displayvorrichtung 110 zu übermitteln, und ähnliches. In einigen Ausführungsformen mag das Parallelverarbeitungssubsystem 112 eine oder mehrere PPUs 202 aufweisen, die als Grafikprozessoren arbeiten, und eine oder mehrere PPUs 202, die für Universalberechnungen (engl. „general-purpose computations”) benutzt werden. Die PPUs mögen identisch oder unterschiedlich sein, und jede PPU mag eine dedizierte(n) Parallelverarbeitungsspeichervorrichtung(en) oder keine dedizierte(n) Parallelverarbeitungsspeichervorrichtung(en) aufweisen. Eine oder mehrere PPUs 202 in dem Parallelverarbeitungssubsystem 112 mag bzw. mögen Daten an eine Displayvorrichtung 110 ausgeben oder jede PPU 202 in dem Parallelverarbeitungssubsystem 112 mag Daten an eine oder mehrere Displayvorrichtungen 110 ausgeben.
  • Im Betrieb ist die CPU 102 der Masterprozessor des Computersystems 100, welcher den Betrieb anderer Systembauteile steuert und koordiniert. Die CPU 102 erteilt insbesondere Befehle, die den Betrieb der PPUs 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Befehlsstrom für jede PPU 202 in eine (weder in 1 noch in 2 explizit gezeigte) Datenstruktur, die sich im Systemspeicher 104, Parallelverarbeitungsspeicher 204 oder in einer anderen Speicherstelle befinden mag, die für sowohl die CPU 102 als auch die PPU 202 zugreifbar ist. Ein Zeiger auf jede Datenstruktur wird in einen Stoßpuffer (engl. „push puffer”) geschrieben, um Verarbeitung des Befehlsstroms in der Datenstruktur zu initiieren. Die PPU 202 liest Befehlsströme aus einem oder mehreren Stoßpuffern aus und führt dann Befehle asynchron relativ zu dem Betrieb der CPU 102 aus. Ausführungsprioritäten mögen für jeden Stoßpuffer von einem Anwendungsprogramm über Gerätetreiber 103 festgelegt werden, um das Scheduling der verschiedenen Stoßpuffer zu steuern.
  • Jede PPU 202 weist eine I/O-(Input/Output)-Einheit 205 auf, die mit dem restlichen Computersystem 100 über Kommunikationspfad 113 kommuniziert, der mit der Speicherbrücke 105 (oder in einer alternativen Ausführungsform direkt mit der CPU 102) in Verbindung steht. Die Verbindung der PPU 202 an das restliche Computersystem 100 mag auch variiert werden. In einigen Ausführungsformen ist das Parallelverarbeitungssubsystem 112 als eine Erweiterungskarte implementiert, die in einen Erweiterungsslot (engl. „expansion slot”) des Computersystems 100 eingebracht werden kann. In anderen Ausführungsformen kann eine PPU 202 auf einem einzigen Chip mit einer Busbrücke, wie zum Beispiel Speicherbrücke 105 oder I/O-Brücke 107, integriert sein. In noch anderen Ausführungsformen mögen einige oder alle Elemente der PPU 202 auf einem einzigen Chip mit der CPU 102 integriert sein.
  • In einer Ausführungsform ist der Kommunikationspfad 113 ein PCIe-Anschluss (engl. „PCIe-link”), wie oben erwähnt, in welchem jeder PPU 202 dedizierte Spuren zugewiesen sind, wie es auf dem technischen Gebiet bekannt ist. Andere Kommunikationspfade mögen auch benutzt werden. Eine I/O-Einheit 205 erzeugt Pakete (oder andere Signale) für Transmission auf dem Kommunikationspfad 113 und empfängt auch alle ankommenden Pakete (oder anderen Signale) von dem Kommunikationspfad 113, wobei die ankommenden Pakete zu zweckmäßigen Bauteilen der PPU 202 geleitet werden. Befehle, die sich auf Bearbeitungstasks beziehen, mögen zum Beispiel zu einer Hostschnittstelle (engl. „host interface”) 206 geleitet werden, während Befehle, die sich auf Speichervorgänge (zum Beispiel Auslesen aus oder Schreiben auf den Parallelverarbeitungsspeicher 204) beziehen, zu einer Speicher-Kreuzschieneneinheit 210 geleitet werden mögen. Die Hostschnittstelle 206 liest jeden Stoßpuffer aus und gibt den Befehlsstrom, der in dem Stoßpuffer gespeichert ist, zu einem Frontend 212 aus.
  • Jede PPU 202 implementiert vorteilhafterweise eine in hohem Maße parallele Verarbeitungsarchitektur. Die PPU 202(0) weist, wie im Detail gezeigt, ein Verarbeitungscluster-Array (engl. „processing cluster array”) 230 auf, das eine Anzahl C von Allgemeinverarbeitungsclustern (engl. „general processing clusters”) (GPCs) 208 aufweist, wobei C ≥ 1. Jeder GPC 208 ist in der Lage, eine große Anzahl (zum Beispiel hunderte oder tausende) von Threads gleichzeitig auszuführen, wobei jeder Thread eine Instanz eines Programms ist. In verschiedenen Applikationen mögen unterschiedlichen GPCs 208 zur Verarbeitung unterschiedlicher Arten von Programmen oder zum Ausführen unterschiedlicher Arten von Berechnungen allokiert werden. Das Allokieren von GPCs 208 mag in Abhängigkeit von der Auslastung variieren, die für jede Art von Programm oder Berechnung entsteht.
  • Die GPCs 208 empfangen auszuführende Verarbeitungstasks von einer Arbeitsverteilungseinheit innerhalb einer Task/Arbeit-Einheit (engl. „task/work unit”) 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungstasks, die als Taskmetadaten (engl. „task metadata”) (TMD) kodiert und im Speicher gespeichert sind. Die Zeiger auf TMDs sind in den Befehlsstrom beinhaltet, der als ein Stoßpuffer gespeichert und mittels der Frontend-Einheit 212 von der Host-Schnittstelle 206 empfangen wird. Verarbeitungstasks, die als TMDs kodiert werden mögen, beinhalten Indices von zu verarbeitenden Daten sowie Zustandsparameter und Befehle, die definieren wie die Daten zu verarbeiten sind (zum Beispiel welches Programm auszuführen ist). Die Task/Arbeit-Einheit 207 empfängt Tasks von dem Frontend 212 und stellt sicher, dass die GPCs 208 zu einem gültigen Zustand konfiguriert sind, bevor die von jedem einzelnen der TMDs spezifizierte Verarbeitung eingeleitet wird. Eine Priorität mag für jede TMD, die zum Scheduling der Ausführung der Verarbeitungstasks benutzt wird, spezifiziert sein. Verarbeitungstasks können auch von dem Verarbeitungsclusterarray 230 erhalten werden. Die TMD können optional einen Parameter enthalten, der steuert, ob die TMD zu dem Kopf oder Ende von einer Liste von Verarbeitungstasks (oder Liste von Zeigern auf die Verarbeitungstasks) hinzugefügt wird, wodurch eine andere Stufe von der Steuerung der Priorität bereitgestellt wird.
  • Die Speicherschnittstelle 214 weist eine Anzahl D von Partitionseinheiten 215 auf, die jeweils direkt an einen Teil des Parallelverarbeitungsspeichers 204 gekoppelt sind, wobei D ≥ 1. Die Anzahl der Partitionseinheiten 215 ist, wie gezeigt, generell gleich der Anzahl von dynamischem RAM (DRAM) 220. In anderen Ausführungsformen mag die Anzahl der Partitionseinheiten 215 nicht gleich der Anzahl der Speichervorrichtungen sein. Durchschnittliche Fachleute werden verstehen, dass DRAM 220 durch andere geeignete Speichervorrichtungen ersetzt werden mag und von einer generell konventionellen Bauform sein kann. Eine detaillierte Beschreibung wird deswegen weggelassen. Render-Ziele, wie zum Beispiel Puffer- oder Strukturpläne, mögen quer über die DRAMs 220 gespeichert werden, was den Partitionseinheiten 215 ermöglicht, Teile von jedem Render-Ziel parallel zu schreiben, um die vorhandene Bandbreite des Parallelverarbeitungsspeichers 204 effizient zu nutzen.
  • Jeder der GPCs 208 mag Daten verarbeiten, die in irgendeinen der DRAMs 220 innerhalb des Parallelverarbeitungsspeichers 204 zu schreiben sind. Die Kreuzschieneneinheit 210 ist dazu konfiguriert, den Output jedes GPC 208 an den Input einer jeden Partitionseinheit 215 oder an einen anderen GPC 208 für weitere Verarbeitung zu leiten. Die GPCs 208 kommunizieren mit der Speicherschnittstelle 214 durch die Kreuzschieneneinheit 210, um aus bzw. in verschiedenen externen Speichervorrichtungen auszulesen bzw. zu schreiben. In einer Ausführungsform hat die Kreuzschieneneinheit 210 sowohl eine Verbindung zu der Speicherschnittstelle 214, um mit der I/O-Einheit 205 zu kommunizieren, als auch eine Verbindung zu dem lokalen Parallelverarbeitungsspeicher 204, wodurch es den Verarbeitungskernen innerhalb der verschiedenen GPCs 208 ermöglicht werden, mit dem Systemspeicher 104 oder einem anderen Speicher, der kein lokaler Teil der PPU 202 ist, zu kommunizieren. In der in 2 gezeigten Ausführungsform ist die Kreuzschieneneinheit 210 direkt mit der I/O-Einheit 205 verbunden. Die Kreuzschieneneinheit 210 mag virtuelle Kanäle benutzen, um Datenverkehrsströme zwischen den GPCs 208 und den Partitionseinheiten 215 zu separieren.
  • Wie erwähnt können die GPCs 208 zum Ausführen von Verarbeitungstasks, die sich auf eine umfangreiche Vielfalt von Applikationen beziehen, programmiert werden, einschließlich, aber nicht begrenzt auf, linearer und nicht-linearer Datentransformationen, Filtern von Video- und/oder Audiodaten, Modellierungsvorgänge (zum Beispiel der Anwendung von physikalischen Gesetzen zum Bestimmen von Position, Geschwindigkeit und anderen Eigenschaften von Objekten), Bild-Rendering-Vorgängen (zum Beispiel Mosaikshader-, Scheitelshader-, Geometrieshader- und/oder Pixel-Shaderprogramme (engl. „tesselation shader, vertex shader, geometry shader, and/or pixel shader programs”)), usw. Die PPUs 202 mögen Daten von dem Systemspeicher 104 und/oder den lokalen Parallelverarbeitungsspeichern 204 in einen internen (auf-dem-Chip) Speicher hinein übertragen, die Daten verarbeiten und die Ergebnisdaten zurück in den Systemspeicher 104 und/oder die lokalen Parallelverarbeitungsspeicher 204 schreiben, wo auf solche Daten von anderen Systembauteilen, einschließlich CPU 102 oder anderer Parallelverarbeitungssubsysteme 112, zugegriffen werden kann.
  • Eine PPU 202 mag mit jeder Menge lokaler Parallelverarbeitungsspeicher 204, einschließlich keiner lokalen Speicher, ausgestattet sein, und mag lokalen Speicher und Systemspeicher in jeder beliebigen Kombination benutzen. Eine PPU 202 kann zum Beispiel ein Grafikprozessor in einer Ausführungsform mit „unified memory architecture” (UMA) sein. In solchen Ausführungsformen würde wenig oder kein dedizierter Grafik-(Parallelverarbeitungs-)Speicher bereitgestellt werden, und die PPU 202 würde ausschließlich oder fast ausschließlich den Systemspeicher benutzen. In UMA-Ausführungsformen mag eine PPU 202 in einem Brückenchip oder Prozessorchip integriert sein oder als ein diskreter Chip mit einem Hochgeschwindigkeitsanschluss (beispielsweise PCI-Express), der die PPU 202 über einen Brückenchip oder ein anderes Kommunikationsmittel mit dem Systemspeicher verbindet, bereitgestellt werden. Alternativ mag jede PPU 202 mit einer nicht uniformen (engl. „non-uniform”) Speicherarchitektur implementiert werden und jede solche PPU 202 mag Zugriff auf mehrere verschiedenen Speicherräume haben, wie es von der Coprozessor-geeigneten Anwendung 134 angewiesen wird.
  • Wie oben erwähnt, kann eine beliebige Anzahl von PPUs 202 in einem Parallelverarbeitungssubsystem 112 enthalten sein. Mehrere PPUs 202 können zum Beispiel auf einer einzigen Erweiterungskarte bereitgestellt werden oder mehrere Erweiterungskarten können mit dem Kommunikationspfad 113 verbunden werden oder eine oder mehrere der PPUs 202 können in einem Brückenchip integriert werden. Die PPUs 202 in einem Mehrfach-PPU-System mögen gleich oder unterschiedlich voneinander sein. Unterschiedliche PPUs 202 mögen zum Beispiel eine jeweils unterschiedliche Anzahl von Prozessorkernen, unterschiedliche Mengen von lokalem Parallelverarbeitungsspeicher usw. aufweisen. Wenn mehrere PPUs 202 vorhanden sind, mögen diese PPUs parallel betrieben werden, um Daten mit einem größeren Durchsatz, als es mit einer einzigen PPU 202 möglich ist, zu verarbeiten. Systeme, die eine oder mehrere PPUs 202 aufweisen, mögen in einer Vielfalt von Konfigurationen und Formfaktoren implementiert werden, einschließlich Desktop-, Laptop- oder handgeführter Rechner, Server, Arbeitsstationen (engl. „workstations”), Spielkonsolen, eingebetteter Systeme und ähnliches.
  • Wie oben erwähnt, ist jede PPU 202 zum Ausführen der in 1 gezeigten Coprozessor-geeigneten Anwendung 134 konfiguriert. Die Coprozessor-geeignete Anwendung 134 wird von einer Geräte-Compiler-und-Linker-Anwendung kompiliert, die von dem Gerätetreiber 103 abgeleitet ist, wie es unten im Zusammenhagn mit 3 detaillierter beschrieben wird.
  • 3 zeigt den Erstellungsprozess, der zum Kompilieren der Coprozessor-geeigneten Anwendung 134 von 1 verwendet wird, gemäß einer Ausführungsform der vorliegenden Erfindung. Der Programmcode 310 enthält Host-Quellcode 312 und Geräte-Quellcode 314. Der Host-Quellcode 312 enthält Programmbefehle, die dafür vorgesehen sind, auf einem Host, wie zum Beispiel einem ×86-basierten persönlichen Rechner (PC) oder Server, ausgeführt zu werden. Die Programmbefehle im Quellcode 312 mögen Aufrufe zu Funktionen enthalten, die in dem Geräte-Quellcode 314 definiert sind. Jeder technisch geeignete Mechanismus mag verwendet werden, um zu spezifizieren, welche Funktionen als Geräte-Quellcode 314 gekennzeichnet sind.
  • Der Host-Quellcode 312 wird vorverarbeitet, kompiliert und eingebunden (engl. „linked”) von einem Host-Compiler-und-Linker 322. Der Host-Compiler-und-Linker 322 erzeugt Hostmaschinencode 342, der innerhalb der Coprozessor-geeigneten Anwendung 134 gespeichert wird.
  • Der Geräte-Quellcode 314 wird vorverarbeitet, kompiliert und eingebunden von einem Geräte-Compiler-und-Linker 324. Diese Kompilierungsoperation bildet eine Kompilierung erster Stufe von dem Geräte-Quellcode 314. Der Geräte-Compiler-und-Linker 324 erzeugt virtuellen Geräte-Assembler 346, der innerhalb eines Geräte-Codespeichers 350 gespeichert wird, welcher sich bei oder innerhalb der Coprozessor-geeigneten Anwendung 134 befindet. Ein Übersetzer 334 virtueller Befehle mag Geräte-Maschinencode 324 aus dem virtuellen Geräte-Assembler 346 erzeugen. Diese Kompilierungsoperation bildet eine Kompilierung zweiter Stufe von dem Geräte-Quellcode 314. Der Übersetzer 334 virtueller Befehle mag mehr als eine Version von Geräte-Maschinencode 344 erzeugen, basierend auf der Verfügbarkeit von bekannten Architekturdefinitionen. Zum Beispiel mag der Übersetzer 334 virtueller Befehle eine erste Version vom Geräte-Maschinencode 344, die native 64-Bit arithmetische Befehle (die in der ersten Zielarchitektur zur Verfügung stehen) aufrufen, und eine zweite Version vom Geräte-Maschinencode 344 erzeugen, die 64-Bit arithmetische Befehle auf solchen Ziele emuliert, die keine native 64-Bit arithmetische Befehle enthalten.
  • Architekturinformation 348 kennzeichnet die tatsächliche Architekturversion, die zum Erzeugen des Geräte-Maschinencodes 344 verwendet wurde. Die tatsächliche Architekturversion definiert die Features, die in nativen Befehlen innerhalb eines tatsächlichen Ausführungsziels, wie zum Beispiel der PPU 202, implementiert sind. Die Architekturinformation 348 kennzeichnet auch die Version der virtuellen Architektur, die zum Erzeugen des virtuellen Geräte-Assemblers 346 verwendet wurde. Die virtuelle Architekturversion definiert die Features, die entweder als nativ oder leicht emulierbar zu sein angenommen werden, und die Features, die nicht zum Emulieren geeignet sind. Elementare (engl. „atomic”) Additionsoperationen sind zum Beispiel zum Emulieren auf der Befehlsebene nicht geeignet, obwohl sie auf der algorithmischen Ebene in bestimmten Fällen insgesamt vermieden werden mögen, und folglich beeinflussen mögen, welche Funktionen in der ersten Kompilierungsstufe kompiliert werden mögen.
  • Zusätzlich zu dem Geräte-Maschinencode 344 und virtuellen Geräte-Assembler 346 mag der Geräte-Codespeicher auch Architekturinformation 348 enthalten, die kennzeichnet, welche Architektur-Features angenommen wurde, wenn der Geräte-Maschinencode 344 und der virtuelle Geräte-Assembler 346 erzeugt wurden. Fachleute werden erkennen, dass die Funktionen, die innerhalb des Geräte-Maschinencodes 344 und virtuellen Assemblers 346 enthalten sind, Funktionen Wiederspiegeln (engl. „reflect”), die mit der tatsächlichen Architektur der PPU 202 assoziiert sind. Die Architekturinformation 348 stellt Kompatibilitätsinformation für den Geräte-Maschinencode 344 und Compilerhinweise für eine Kompilierungsoperation zweiter Stufe bereit, die zu irgendeinem Zeitpunkt, nachdem die Entwicklung der Coprozessor-geeigneten Anwendung 134 schon beendet wurde, von einem Gerätetreiber 103 ausgeführt werden mögen.
  • Der Geräte-Compiler-und-Linker 324 ist auch dazu konfiguriert, verschiedene Optimierungsroutinen mit dem Programmcode 310 auszuführen. Eine solche Optimierungsroutine beinhaltet ein wahlweises Rematerialisieren von Sätzen bzw. Mengen von Live-in-Variablen, wie es unten im Zusammenhang mit der 4 detaillierter beschrieben wird.
  • Live Analyse-basierte Rematerialisation
  • 4 ist ein Flussdiagram von Verfahrensschritten zur Ausführung von live Analyse-basierter Rematerialisation mit einer Menge von Live-in-Variablen, gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte im Zusammenhang mit den Systemen von den 12 beschrieben werden, werden Fachleute verstehen, dass jedes System, das konfiguriert ist zum Ausführen der Verfahrensschritte, in jeglicher Reihenfolge, im Umfang der vorliegenden Erfindung enthalten ist. In einer Ausführungsform mag der in 3 gezeigte Geräte-Compiler-und-Linker 324 zum Durchführen der Verfahrensschritte konfiguriert sein.
  • Ein Verfahren 400 beginnt, wie gezeigt, bei Schritt 402, wo der Geräte-Compiler-und-Linker 324 einen Kontrollflussgraphen für den Programmcode 310 erzeugt. Der Kontrollflussgraph, der von dem Geräte-Compiler-und-Linker 324 erzeugt wird, mag ein konventioneller Kontrollgraph (engl. „control graph”) sein, der unter Verwendung von Flussanalysetechniken erzeugt wird, und mag als solche eine Sammlung von Codeblöcken enthalten. Bei Schritt 404 identifiziert der Geräte-Compiler-und-Linker 324 einen Block in dem Kontrollflussgraphen, welcher Block eine maximale Anzahl von Live-in-Variablen enthält. In einer Ausführungsform bestimmt der Geräte-Compiler-und-Linker 324 die Anzahl von Live-in-Variablen für jeden Block in dem Kontrollflussgraphen und identifiziert dann der Block, der die größte Anzahl von Live-in-Variablen hat. Die maximale Anzahl von Live-in-Variablen wird von einem Wert dargestellt, der als „Max-Live-in” bezeichnet wird. Max-Live-in mag eine Größe von Registerdruck angeben, der durch Ausführung der Coprozessor-geeigneten Anwendung 134 verursacht wird. Bei Schritt 406 sammelt der Geräte-Compiler-und-Linker 324 Live-in-Variable, die mit dem Block assoziiert sind, der beim Schritt 404 identifiziert wurde.
  • Bei Schritt 408 wählt der Geräte-Compiler-und-Linker 324 eine Teilmenge der Live-in-Variable für Rematerialisation aus, basierend auf einer Ausführung einer Profitabilitätsanalyse mit verschiedenen Teilmengen von Live-in-Variablen. Der Geräte-Compiler-und-Linker 324 mag die Profitabilitätsanalyse durchführen, um die „Profitabilität” einer Rematerialisation von einer gegebenen Teilmenge von Live-in-Variablen zu bestimmen. Die „Profitabilität” von einer gegebenen Teilmenge von Live-in-Variablen mag ein numerischer Wert sein, der die Anzahl von Live-in-Variablen wiederspiegelt, die durch Rematerialisation der gegebenen Teilmenge reduziert wurde. Dieser Wert mag des Weiteren die Anzahl von Befehlen, die für diese Rematerialisation hineingezogen wurden, und/oder die maximale Anzahl von Registern, die für jeden Thread erlaubt sind, Wiederspiegeln, wie es unten in Zusammenhang mit der 5 detaillierter beschrieben wird.
  • Bei Schritt 410 rematerialisiert der Geräte-Compiler-und-Linker 324 die Live-in-Variablen in der gegebenen Teilmenge. Der Geräte-Compiler-und-Linker 324 mag jede technisch realisierbare Rematerialisationstechnik implementieren. In einer Ausführungsform rematerialisiert der Geräte-Compiler-und-Linker 324 eine gegebene Teilmenge von Live-in-Variablen dadurch, dass er erst Berechnungen, die diese Live-in-Variable einbeziehen, von einem Block des Kontrollflussgraphen entfernt. Der Geräte-Compiler-und-Linker 324 mag dann einen nachfolgenden Block des Kontrollflussgraphen modifizieren, um die Live-in-Variable, die mit der Teilmenge innerhalb des nachfolgenden Blocks assoziiert sind, erneut zu berechnen (engl. „re-compute”). Dabei mag der Geräte-Compiler-und-Linker 324 den Programmcode 310 nach Bedarf modifizieren. Bei Schritt 412 aktualisiert der Geräte-Compiler-und-Linker 324 Max-Live-in durch Identifizieren der Anzahl von Live-in-Variablen für jeden Block und Identifizieren des Blocks mit der größten Anzahl von Live-in-Variablen. Dann endet das Verfahren 400.
  • Der Geräte-Compiler-und-Linker 324 mag die Schritte 404, 406, 408, 410 und 412 bis zum Erreichen eines spezifischen Ziels iterativ ausführen. In einer Ausführungsform führt der Geräte-Compiler-und-Linker 324 diese Schritte eine feste Anzahl von Malen durch, zum Beispiel fünfmal. In einer anderen Ausführungsform führt der Geräte-Compiler-und-Linker 324 die Schritte 404, 406, 408, 410 und 412 iterativ durch, bis Max-Live-in auf einen Wert unterhalb eines gegebenen Schwellenwerts abfällt, was darauf hinweist, dass der Registerdruck als Folge der Rematerialisation ausreichend abgenommen hat.
  • 5 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Profitabilitätsanalyse auf einer Menge von Live-in-Variablen, gemäß einer Ausführungsform der Erfindung. Obwohl die Verfahrensschritte im Zusammenhang mit den Systemen von den 12 beschrieben werden, werden Fachleute verstehen, dass jedes System, das konfiguriert ist zum Ausführen der Verfahrensschritte, in jeglicher Reihenfolge, im Umfang der vorliegenden Erfindung enthalten ist. In einer Ausführungsform mag der in 3 gezeigte Geräte-Compiler-und-Linker 324 konfiguriert sein zum Implementieren der Verfahrensschritte mit einer Teilmenge von Live-in-Variablen, die mit dem Block assoziiert sind, der im Schritt 404 von dem Verfahren 400 identifiziert wurde.
  • Das Verfahren 500 beginnt, wie gezeigt, bei Schritt 502, bei dem der Geräte-Compiler-und-Linker 324 einen ersten Profitabilitätsfaktor für die Teilmenge von Live-in-Variablen erzeugt basierend auf der Anzahl von Live-in-Variablen, die mittels Rematerialisation reduziert worden ist. Der Geräte-Compiler-und-Linker 324 könnte zum Beispiel feststellen, dass eine Rematerialisation die Anzahl von Live-in-Variablen mit zwei reduziert und diese Zahl mit eins erhöht, für einen Nettoverlust von einer Live-in-Variable.
  • Bei Schritt 504 erzeugt der Geräte-Compiler-und-Linker 324 einen zweiten Profitabilitätsfaktor basierend auf den Anzahl von Befehlen, die für die Rematerialisation hineingezogen worden ist, und den Kosten für die Einsatzstellen (engl. „use-sites”), die von der Rematerialisation erfordert werden. Da verschiedene Live-in-Variablen mit Befehlen unterschiedlicher Komplexität und/oder mit Einsatzstellen, die unterschiedlichen Kosten haben, assoziiert werden mögen, erzeugt der Geräte-Compiler-und-Linker 324 den zweiten Profitabilitätsfaktor, um solche Unterschiede zwischen verschiedenen Teilmengen von Live-in-Variablen zu quantifizieren.
  • Bei Schritt 506 erzeugt der Geräte-Compiler-und-Linker 324 einen dritten Profitabilitätsfaktor basierend auf der maximalen Anzahl von Registern, die für jeden Thread erlaubt ist, der zum Ausführen der Coprozessor-geeigneten Anwendung 134 konfiguriert ist. Dabei mag der Geräte-Compiler-und-Linker 324 die Kosten schätzen, die mit einem „Überlauf”-Ereignis verbunden sind, das eintreffen würde, wenn die maximale Anzahl von Registern überschritten wird. Die Kosten könnten zum Beispiel unter anderem eine Erhöhung der Speicherlatenz als Folge des Überlauf-Ereignisses und/oder eine Verringerung in Programmausführungsgeschwindigkeit wiederspiegeln. Bei Schritt 508 schätzt der Geräte-Compiler-und-Linker 324 die Profitabilität einer Rematerialisation der Teilmenge von Live-in-Variablen basierend auf den ersten, zweiten und dritten Profitabilitätsfaktor, die jeweils in den Schritten 402, 404 und 406 erzeugt wurden. Die „Profitabilität” von einer Rematerialisation einer gegebenen Teilmenge von Live-in-Variablen ist generell ein numerischer Wert, der den potentiellen Gewinn von einer Rematerialisation dieser Teilmenge von Variablen wiederspiegelt.
  • Der Geräte-Compiler-und-Linker 324 ist dazu konfiguriert, das Verfahren 500 mit mehreren verschiedenen Teilmengen von der Menge von Live-in-Variablen durchzuführen, die mit dem beim Schritt 404 des Verfahrens 400 identifizierten Block assoziiert sind. Dabei mag der Geräte-Compiler-und-Linker 324 die Profitabilität einer Rematerialisation jeder möglichen Teilmenge von diesen Live-in-Variablen schätzen und dann diejenige Teilmenge für Rematerialisation auswählen, die die größte Profitabilität hat.
  • Die Verfahren 400 und 500, die oben im Zusammenhang mit den 4 und 5 beschrieben wurden, werden unten detaillierter anhand eines Beispiels in Zusammenhang mit der 6 dargestellt.
  • 6 legt einen beispielhaften Kontrollflussgraph dar zur Illustration der Operation eines Geräte-Compiler-und-Linker, gemäß einer Ausführungsform der vorliegenden Erfindung. Der Geräte-Compiler-und-Linker 324 mag den Kontrollflussgraphen 600 basierend auf dem Programmcode 310 beim Schritt 402 des Verfahrens 400 erzeugen, wie es oben im Zusammenhang mit der 4 beschrieben wurde. Der Kontrollflussgraph 600 enthält, wie gezeigt, die Blöcke 610 und 620. Der Block 610 enthält zwei Ausdrücke und erhält eine Live-in-Variable „t” von einem früheren bzw. vorhergehenden (nicht gezeigten) Block. Der Block 620 enthält drei Ausdrücke und erhält zwei Live-in-Variable „x” und ”y” von dem Block 610. Die Ausdrücke innerhalb dieser Blöcke werden von dem Programmcode 310 abgeleitet (engl. „derived”). In dem folgenden Beispiel führt der Geräte-Compiler-und-Linker 324 die Verfahren 400 und 500 durch, die oben jeweils in Zusammenhang mit den 4 und 5 beschrieben wurden, um Variable innerhalb des Kontrollflussgraphen 600 wahlweise zu rematerialisieren. Dabei mag der Geräte-Compiler-und-Linker 324 den Registerdruck reduzieren, wenn eine gegebene PPU 202 Code ausführt, der von dem Kontrollflussgraphen 600 dargestellt ist.
  • Wenn der Geräte-Compiler-und-Linker 324 den Kontrollflussgraphen 600 erzeugt hat, identifiziert der Geräte-Compiler-und-Linker 324 den Block innerhalb des Kontrollflussgraphen 600, der die maximale Anzahl von Live-in-Variablen aufweist. Da der Block 610 eine Live-in-Variable erhält und der Block 620 zwei Live-in-Variable erhält, identifiziert der Geräte-Compiler-und-Linker 324 den Block 620 als Max-Live-in habend, ähnlich dem Schritt 404 des Verfahrens 400. Der Geräte-Compiler-und-Linker 324 wählt dann eine Teilmenge von Live-in-Variablen aus, die mit dem Block 620 assoziiert sind, basierend auf einer Profitabilitätsanalyse, die mit jeder mögliche Teilmenge durchgeführt wird.
  • In diesem Beispiel könnte der Geräte-Compiler-und-Linker 324 die Profitabilitätsanalyse mit Teilmengen durchführen, die die Live-in-Variable „x”, die Live-in-Variable „y” oder die beide Live-in-Variable „x” und „y” enthalten. Die Profitabilitätsanalyse, die in Zusammenhang mit der 5 skizziert wurde, würde zeigen, dass eine unabhängige Rematerialisation von nur „x” oder „y” die Anzahl der Live-in-Variable zu Block 620 nicht reduzieren würde, da dies „t” als eine neue Live-in-Variable einführen würde, für einen Nettoverlust von null Live-in-Variablen. Rematerialisation von sowohl „x” als auch „y” zusammen würde aber die Anzahl von Live-in-Variablen mit zwei reduzieren und die Anzahl von Live-in-Variablen nur mit eins erhöhen, für einen Nettoverlust von einer Live-in-Variable. Dieser Nettoverlust mag in dem ersten Profitabilitätsfaktor wiederspiegelt werden, der von dem Geräte-Compiler-und-Linker 324 im Schritt 502 des Verfahrens 500 für die Teilmenge, die „x” und „y” enthält, erzeugt wurde.
  • Der Geräte-Compiler-und-Linker 324 ist auch konfiguriert zum Bestimmen der Anzahl von Befehlen, die für Rematerialisation von Live-in-Variablen in einer gegebenen Teilmenge eingezogen worden sind, und zum Bestimmen der Kosten für die Einsatzstellen, die zur Rematerialisation von diesen Live-in-Variablen benötigt werden, ähnlich dem Schritt 504 des Verfahrens 500. In diesem Beispiel würde der Geräte-Compiler-und-Linker 324 die Definitionen der Live-in-Variablen „x” und „y” sowie die Art von Speicherzugriffen, die von diesen Definitionen benötigt werden, analysieren, um den „Aufwand” (engl. „overhead”) zu erfassen, der mit der Rematerialisation von diesen Variablen verbunden ist. In einigen Fällen mag der Aufwand, der mit der Rematerialisation von den Live-in-Variablen in einer gegebenen Teilmenge verbunden ist, untragbar sein, zum Beispiel wegen der Komplexität der Befehle, die zur Rematerialisation bestimmter Live-in-Variable benötigt werden, oder der Einsatzstellenkosten, die mit der Rematerialisation dieser Variable assoziiert sind. Der zweite Profitabilitätsfaktor, der von dem Geräte-Compiler-und-Linker 324 beim Schritt 504 des Verfahrens 500 erzeugt wurde, wiederspiegelt im Allgemeinen diesen Aufwand.
  • Für jede Teilmenge von Live-in-Variablen, die in diesem Beispiel diskutiert wird, insbesondere die Teilmengen, die „x”, „y” oder „x” und „y” enthalten, erzeugt der Geräte-Compiler-und-Linker 324 den ersten und den zweiten Profitabilitätsfaktor, die oben und jeweils in Zusammenhang mit den Schritten 502 und 504 des Verfahrens 500 behandelt wurden. Für jede solche Teilmenge erzeugt der Geräte-Compiler-und-Linker 324 auch den dritten Profitabilitätsfaktor, der in Zusammenhang mit dem Schritt 506 des Verfahrens 500 behandelt wurde. Der Geräte-Compiler-und-Linker 324 erzeugt den dritten Profitabilitätsfaktor für eine gegebene Teilmenge basierend auf der maximalen Anzahl von Registern, die für jeden Thread erlaubt ist, der zum Ausführen der Coprozessor-geeigneten Anwendung 134 konfiguriert ist, und basierend auf den mit einem „Überlauf”-Ereignis verbundenen Kosten, das stattfinden würde, wenn diese Anzahl von Registern überschritten wird. In einer solchen Situation könnten die Live-in-Variablen in der gegebenen Teilmenge in den Systemspeicher hinein überlaufen. Der Geräte-Compiler-und-Linker 324 schätzt den dritten Profitabilitätsfaktor für die gegebene Teilmenge basierend auf den Kosten eines solchen Überlaufs, zum Beispiel die Erhöhung der Speicherlatenz für die gegebene Teilmenge und/oder die Verringerung in Programmausführungsgeschwindigkeit. Der dritte Profitabilitätsfaktor, der für eine gegebene Teilmenge von Live-in-Variablen erzeugt wurde, stellt folglich ein Maß der „Risiko” dar, die mit der Rematerialisation der Live-in-Variable in dieser Teilmenge assoziiert ist.
  • Der Geräte-Compiler-und-Linker 324 schätzt die gesamte Profitabilität von einer Rematerialisation der Live-in-Variablen in den verschiedenen Teilmengen, die in diesem Beispiel diskutiert werden, basierend auf den drei Profitabilitätsfaktoren, die für jede Teilmenge erzeugt wurde, ähnlich dem Schritt 508 des Verfahrens 500. Der Geräte-Compiler-und-Linker 324 rematerialisiert dann die Live-in-Variablen in der Teilmenge, die die größte Profitabilität hat. In diesem Beispiel hat die Teilmenge, die sowohl „x” als auch „y” enthält, die größte Profitabilität, und folglich rematerialisiert der Geräte-Compiler-und-Linker diese Variable innerhalb des Blocks 620 durch Modifizieren des Programmcodes 310.
  • Zusammenfassend ist ein Geräte-Compiler-und-Linker innerhalb einer Parallelverarbeitungseinheit (PPU) konfiguriert zum Optimieren eines Programmcodes einer Coprozessor-geeigneten Anwendung durch Rematerialisation einer Teilmenge von Live-in-Variablen für einen bestimmten Block in einem Kontrollflussgraphen, der für diesen Programmcode erzeugt worden ist. Der Geräte-Compiler-und-Linker identifiziert den Block des Kontrollflussgraphen, welcher Block die größte Anzahl von Live-in-Variablen hat, und wählt dann eine Teilmenge von den Live-in-Variablen aus, die mit dem identifizierten Block assoziiert sind, für den eine Rematerialisation die größte geschätzte Profitabilität gewährt. Die Profitabilität einer Rematerialisation von einer gegebenen Teilmenge von Live-in-Variablen wird basierend auf der Anzahl von reduzierten Live-in-Variablen, den Kosten der Rematerialisation und der potentiellen Risiko bestimmt, der mit der Rematerialisation verbunden ist.
  • Rematerialisation von bestimmten Teilmengen von Live-in-Variablen reduziert vorteilhafterweise den Registerdruck, wodurch die Wahrscheinlichkeit eines Überlaufereignisses reduziert wird. Das Reduzieren des Registerdrucks erlaubt auch, dass eine größere Anzahl von Ausführungsthreads mit der PPU simultan ausgeführt wird, wodurch den gesamten Verarbeitungsdurchsatz der PPU erhöht wird.
  • Eine Ausführungsform der Erfindung mag als ein Programmprodukt zur Verwendung mit einem Computersystem implementiert werden. 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 (engl. „read-only”) Speichervorrichtungen innerhalb eines Computers, wie zum Beispiel CD-ROM-Discs, die mittels eines CD-ROM-Laufwerks lesbar sind, Flash-Speicher, ROM-Chips oder jede andere Art von nicht-flüchtigem Festkörper-Halbleiterspeicher (engl. „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 jede Art von Festkörper-Halbleiterspeicher mit wahlfreiem Zugriff (engl. „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. Fachleute werden aber verstehen, dass verschiedene Modifikationen und Änderungen davon gemacht werden können, ohne von dem breiteren Geist und Umfang der Erfindung, wie sie in den angehängten Patentansprüchen dargestellt ist, abzuweichen. Die vorhergehenden Beschreibung und Zeichnungen sind folglich eher in einer illustrativen als in einer restriktiven Bedeutung zu beachten.

Claims (10)

  1. Ein computerimplementiertes Verfahren zur Optimierung von Programmcode, der zur Ausführung auf einer Parallelverarbeitungseinheit (PPU) kompiliert werden kann, das Verfahren aufweisend: Erzeugen eines Kontrollflussgraphen für den Programmcode; Identifizieren eines ersten Blocks in dem Kontrollflussgraphen, welcher Block im Vergleich mit anderen Blöcken in dem Kontrollflussgraphen die größte Anzahl von Live-in-Variablen aufweist; Auswählen einer ersten Teilmenge von Live-in-Variablen, die mit den ersten Block assoziiert sind, durch Ausführen einer Profitabilitätsanalyse auf unterschiedlichen Teilmengen von Live-in-Variablen, die mit dem ersten Block assoziiert sind; und Optimieren des Programmcodes durch Rematerialisieren der ersten Teilmenge von Live-in-Variablen in einen zweiten Block in dem Kontrollflussgraphen, welcher zweite Block nachfolgend zu dem ersten Block in dem Kontrollflussgraphen ist, wobei der optimierte Programmcode auf der PPU ausgeführt werden soll.
  2. Das computerimplementierte Verfahren gemäß Anspruch 1, wobei das Auswählen der ersten Teilmenge von Live-in-Variablen folgendes aufweist: Schätzen eines ersten Profitabilitätswerts für jeden der unterschiedlichen Teilmengen von Live-in-Variablen durch Ausführen der Profitabilitätsanalyse auf jeder der unterschiedlichen Teilmengen; und Auswählen der ersten Teilmenge von Live-in-Variablen basierend darauf, dass die erste Teilmenge von Live-in-Variablen den größten Profitabilitätswert hat im Vergleich mit den Profitabilitätswerten, die mit den anderen unterschiedlichen Teilmengen von Live-in-Variablen assoziiert sind.
  3. Das computerimplementierte Verfahren gemäß Anspruch 2, wobei die Profitabilitätsanalyse für eine gegebene Teilmenge von Live-in-Variablen basierend auf der Anzahl von Live-in-Variablen erzeugt wird, welche Anzahl durch Rematerialisieren der gegebenen Teilmenge von Live-in-Variablen in den zweiten Block in dem Kontrollflussgraphen reduziert wurde.
  4. Das computerimplementierte Verfahren gemäß Anspruch 3, wobei die Profitabilitätsanalyse für die gegebene Teilmenge von Live-in-Variablen ferner basierend auf der Anzahl von Befehlen erzeugt wird, die in den zweiten Block des Kontrollflussgraphen hineingezogen wurde während des Rematerialisierens der gegebenen Teilmenge von Live-in-Variablen in den zweiten Block.
  5. Das computerimplementierte Verfahren gemäß Anspruch 4, wobei die Profitabilitätsanalyse für die gegebene Teilmenge von Live-in-Variablen ferner basierend auf der Anzahl von Einsatzstellen erzeugt wird, die mit dem Rematerialisieren der gegebenen Teilmenge von Live-in-Variablen in den zweiten Block des Kontrollflussgraphen assoziiert sind.
  6. Das computerimplementierte Verfahren gemäß Anspruch 5, wobei die Profitabilitätsanalyse für die gegebene Teilmenge von Live-in-Variablen ferner basierend auf dem Aufwand, der mit dem Übertragen der gegebenen Teilmenge von Live-in-Variablen vom Registerspeicher zum Systemspeicher verbunden ist, und/oder auf dem Aufwand, der mit dem Zugreifen auf die gegebene Teilmenge von Live-in-Variablen innerhalb des Systemspeichers verbunden ist, erzeugt wird.
  7. Das computerimplementierte Verfahren gemäß Anspruch 1, ferner aufweisend ein Ausführen einer Datenflussanalyse auf dem Programmcode, um den Kontrollflussgraphen zu erzeugen.
  8. Das computerimplementierte Verfahren gemäß Anspruch 1, ferner aufweisend ein iteratives Optimieren des Programmcodes und Schätzen eines Registerdrucks, der durch Ausführen des Programmcodes innerhalb der PPU verursacht wird, bis der Registerdruck, der durch Ausführen des Programmcodes innerhalb der PPU verursacht wird, einen Schwellenwert unterscheitet.
  9. Das computerimplementierte Verfahren gemäß Anspruch 1, ferner aufweisend: Feststellen, dass das Rematerialisieren der ersten Menge von Live-in-Variablen eine Menge von Registern im Registerspeicher verfügbar macht; und Allokieren der Menge von Registern zu einem oder mehreren Threads, die zum Ausführen auf der PPU konfiguriert sind.
  10. Eine Rechenvorrichtung, die zum Optimieren von Programmcode konfiguriert ist, der zur Ausführung auf einer Parallelverarbeitungseinheit (PPU) kompiliert werden kann, die Vorrichtung aufweisend: eine Verarbeitungseinheit, die konfiguriert ist zum: Erzeugen eines Kontrollflussgraphen für den Programmcode; Identifizieren eines ersten Blocks in dem Kontrollflussgraphen, welcher Block im Vergleich mit anderen Blöcken in dem Kontrollflussgraphen die größte Anzahl von Live-in-Variablen aufweist; Auswählen einer ersten Teilmenge von Live-in-Variablen, die mit den ersten Block assoziiert sind, durch Ausführen einer Profitabilitätsanalyse auf unterschiedlichen Teilmengen von Live-in-Variablen, die mit dem ersten Block assoziiert sind; und Optimieren des Programmcodes durch Rematerialisieren der ersten Teilmenge von Live-in-Variablen in einen zweiten Block in dem Kontrollflussgraphen, welcher zweite Block nachfolgend zu dem ersten Block in dem Kontrollflussgraphen ist, wobei der optimierte Programmcode auf der PPU ausgeführt werden soll.
DE112012000212T 2011-11-07 2012-11-06 Technik für live Analyse-basierte Rematerialisation zur Reduktion von Registerdruck und zur Verbesserung von Parallelität Pending DE112012000212T5 (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/669,401 2012-11-05
US13/669,401 US9436447B2 (en) 2011-11-07 2012-11-05 Technique for live analysis-based rematerialization to reduce register pressures and enhance parallelism
PCT/US2012/063757 WO2013070637A1 (en) 2011-11-07 2012-11-06 Technique for live analysis-based rematerialization to reduce register pressures and enhance parallelism

Publications (1)

Publication Number Publication Date
DE112012000212T5 true DE112012000212T5 (de) 2013-08-01

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
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
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
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 Before (1)

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

Family Applications After (3)

Application Number Title Priority Date Filing Date
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
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

Country Status (5)

Country Link
US (6) US20130113809A1 (de)
CN (5) CN103339621A (de)
DE (5) DE112012000195T5 (de)
TW (5) TWI502509B (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
US9164743B2 (en) 2012-07-02 2015-10-20 International Business Machines Corporation Strength reduction compiler optimizations for operations with unknown strides
US10588691B2 (en) 2012-09-12 2020-03-17 Relievant Medsystems, Inc. Radiofrequency ablation of tissue within a vertebral body
CN105359090A (zh) * 2013-04-26 2016-02-24 纽约市哥伦比亚大学理事会 用于移动应用的系统和方法
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
WO2015148424A1 (en) * 2014-03-27 2015-10-01 Microsoft Technology Licensing, Llc Supporting dynamic behavior in statically compiled programs
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
US10061591B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Company, Ltd. Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing
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
US10877757B2 (en) * 2017-11-14 2020-12-29 Nvidia Corporation Binding constants at runtime 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 深圳市中兴微电子技术有限公司 一种指令硬件架构的构建方法、装置及存储介质
EP3915009A4 (de) * 2019-01-25 2022-10-12 The Regents of University of California Koaleszierende operandenregisterdatei für 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
CN112230931B (zh) * 2020-10-22 2021-11-02 上海壁仞智能科技有限公司 适用于图形处理器的二次卸载的编译方法、装置和介质
CN112214443B (zh) 2020-10-22 2021-12-03 上海壁仞智能科技有限公司 设置于图形处理器中的二次卸载装置和方法
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
TW213998B (de) * 1990-08-23 1993-10-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
EP0867808B1 (de) * 1997-03-29 2002-04-10 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
US6401187B1 (en) * 1997-12-10 2002-06-04 Hitachi, Ltd. Memory access optimizing method
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
US20110161977A1 (en) 2002-03-21 2011-06-30 Martin Vorbach Method and device for data processing
US8914590B2 (en) 2002-08-07 2014-12-16 Pact Xpp Technologies Ag Data processing method and device
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
US8321849B2 (en) * 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US9601199B2 (en) * 2007-01-26 2017-03-21 Intel Corporation Iterator register for structured memory
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
US8271763B2 (en) * 2009-09-25 2012-09-18 Nvidia Corporation Unified addressing and instructions for accessing parallel memory spaces
US8819622B2 (en) 2009-09-25 2014-08-26 Advanced Micro Devices, Inc. Adding signed 8/16/32-bit integers to 64-bit integers
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
TW201333816A (zh) 2013-08-16
US20130117735A1 (en) 2013-05-09
TW201331833A (zh) 2013-08-01
US20130117734A1 (en) 2013-05-09
CN103460188A (zh) 2013-12-18
US20130113809A1 (en) 2013-05-09
CN104641350A (zh) 2015-05-20
WO2013070621A2 (en) 2013-05-16
WO2013070621A3 (en) 2016-05-19
TW201333877A (zh) 2013-08-16
US20190087164A1 (en) 2019-03-21
WO2013070637A1 (en) 2013-05-16
WO2013070616A1 (en) 2013-05-16
WO2013070635A1 (en) 2013-05-16
DE112012000195T5 (de) 2013-08-08
TWI604410B (zh) 2017-11-01
DE112012000209T5 (de) 2013-08-22
TW201337764A (zh) 2013-09-16
US9436447B2 (en) 2016-09-06
TWI502509B (zh) 2015-10-01
US9639336B2 (en) 2017-05-02
TWI498817B (zh) 2015-09-01
DE112012000187T5 (de) 2013-09-12
CN103339621A (zh) 2013-10-02
US9009686B2 (en) 2015-04-14
CN103348317B (zh) 2017-02-15
TW201333874A (zh) 2013-08-16
CN103348317A (zh) 2013-10-09
DE112012000214T5 (de) 2013-09-12
CN103608774A (zh) 2014-02-26
TWI509561B (zh) 2015-11-21
US20130117548A1 (en) 2013-05-09
TWI483182B (zh) 2015-05-01
WO2013070636A1 (en) 2013-05-16
US20130117737A1 (en) 2013-05-09
US10228919B2 (en) 2019-03-12

Similar Documents

Publication Publication Date Title
DE112012000212T5 (de) Technik für live Analyse-basierte Rematerialisation zur Reduktion von Registerdruck und zur Verbesserung von Parallelität
DE102009039231B4 (de) Einzeldurchgang-Kachelung
DE102012216568B4 (de) Scheduling und Managen von Rechentasks mit unterschiedlichen Ausführungsprioritätsstufen
DE102013017982A1 (de) COMPILER gesteuerte Gebietsdisponierung für SIMD-Ausführung von Strängen
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102017124573A1 (de) Systeme und verfahren zum beschneiden von neuronalen netzen für eine betriebsmitteleffiziente folgerung
DE102020124932A1 (de) Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102013100179A1 (de) Verfahren und System zum Auflösen von Thread-Divergenzen
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE102012222913A1 (de) Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten
DE102009046847A1 (de) Mehrklassen-Daten-Cache-Verfahren
DE102013202173A1 (de) Einheitliche Lade-Verarbeitung für Teilsätze von parallelen Threads
DE102013017510A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
DE102012222918A1 (de) Verfahren und Apparat zum Planen von Anweisungen ohne Anweisungs-Dekodieren
DE102016122297A1 (de) Mehrfach-Durchlauf-Rendering in einer Bildschirm-Raum-Pipeline
DE102013018139A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013019333A1 (de) Registerzuweisung für als cluster vorliegende mehrebenen-registerdaten
DE102013208421A1 (de) Sharing einer Grafikverarbeitungseinheit unter vielen Anwendungen
DE102013224160A1 (de) System, Verfahren und Computer-Programm-Produkt zum Optimieren des Managements von Thread-Stapel-Speicher
DE112017003234T5 (de) Reduzieren von Speicherzugrifflatenzen während der Strahltraversierung
DE102013200997A1 (de) Ein blockierungsfreies FIFO
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102013017980B4 (de) Auslösung einer Leistungsereigniserfassung durch parallele Zustandsbündel

Legal Events

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

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

R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0009450000

Ipc: G06F0009440000

R016 Response to examination communication