DE102013208418A1 - Method for producing executable data file in computer system, involves linking compiled device codes and host codes to generate linked device code and linked host code that are used for producing executable data file - Google Patents

Method for producing executable data file in computer system, involves linking compiled device codes and host codes to generate linked device code and linked host code that are used for producing executable data file Download PDF

Info

Publication number
DE102013208418A1
DE102013208418A1 DE201310208418 DE102013208418A DE102013208418A1 DE 102013208418 A1 DE102013208418 A1 DE 102013208418A1 DE 201310208418 DE201310208418 DE 201310208418 DE 102013208418 A DE102013208418 A DE 102013208418A DE 102013208418 A1 DE102013208418 A1 DE 102013208418A1
Authority
DE
Germany
Prior art keywords
code
linked
host
device code
file
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
DE201310208418
Other languages
German (de)
Inventor
Michael Murphy
Sean Y. Lee
Stephen Jones
Girish BHARAMBE
Jaydeep MARATHE
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
Priority claimed from US13/850,207 external-priority patent/US9483235B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102013208418A1 publication Critical patent/DE102013208418A1/en
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/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

The method involves compiling host codes (112,122) and device codes (114,124) that are accessed by source files. The host codes and device codes are executed by CPU and graphics processing unit respectively. The compiled device codes are linked to generate a linked device code (145). The compiled host codes are linked to produce a linked host code (165). An executable data file (160) is generated, based on the linked device code and linked host code. An independent claim is included for system for producing executable data file.

Description

GEBIET DER ERFINDUNGFIELD OF THE INVENTION

Ausführungsformen der vorliegenden Erfindung betreffen im Allgemeinen Grafik-Verarbeitungs-Einheiten (GPUs) und Compiler für heterogene Umgebungen (z. B. GPU und CPU).Embodiments of the present invention generally relate to graphics processing units (GPUs) and heterogeneous environment compilers (e.g., GPU and CPU).

HINTERGRUND DER ERFINDUNGBACKGROUND OF THE INVENTION

Software-ausführbare Dateien werden typischerweise durch Kompilieren von separaten Host-Objekten erzeugt, wobei jedes Host-Objekt einen entsprechenden Teil von Source-Code oder Host-Code umfasst (z. B. in einer Hoch-Niveau-Sprache, wie etwa C, C++, etc. geschrieben). Die ausführbare Datei, welche mittels des Compilers erzeugt ist, umfasst Objekt-Code, welcher mittels einer Zentral-Verarbeitungs-Einheit (CPU) ausgeführt werden kann. Neuerdings haben Host-Systeme einschließlich einer CPU und einer Grafik-Verarbeitungs-Einheit (GPU) angefangen, einen Vorteil der Parallel-Verarbeitungs-Fähigkeit der GPU anzunehmen, um Aufgaben durchzuführen, welche anderenfalls mittels der CPU durchgeführt würden. Die GPU führt Geräte-Code aus, wogegen die CPU Host-Code ausführt. Der Geräte-Code ist typischerweise in dem Host-Code als eine einzelne Datei eingebettet, um somit eine heterogene Compiler-Umgebung zu erzeugen.Software executables are typically generated by compiling separate host objects, each host object comprising a corresponding portion of source code or host code (e.g., in a high level language such as C, C ++ written, etc.). The executable file generated by the compiler includes object code that can be executed by a central processing unit (CPU). Recently, host systems including a CPU and a graphics processing unit (GPU) have begun to take advantage of the GPU's parallel processing capability to perform tasks that would otherwise be performed by the CPU. The GPU executes device code, while the CPU executes host code. The device code is typically embedded in the host code as a single file, thus creating a heterogeneous compiler environment.

Konventionelle Host-Linker oder -Compiler erzeugen eine ausführbare Datei von mehreren Host-Objekten. Diese konventionellen Host-Linker sind jedoch nicht in der Lage, Geräte-Code, welcher in mehreren Host-Objekten eingebettet ist, zu linken bzw. zu verinken, und erfordern daher, dass irgendein Geräte-Code in ein einzelnes Host-Objekt eingebettet wird. Zum Beispiel können konventionelle Host-Linker eine ausführbare Datei von einem ersten Host-Objekt, welches nur Host-Code beinhaltet (zur Ausführung mittels der CPU), und einem zweiten Host-Objekt, welches Host-Code (zur Ausführung mittels der CPU) und Geräte-Code (zur Ausführung mittels der GPU) beinhaltet, erzeugen. Konventionelle Host-Linker sind jedoch nicht in der Lage, eine ausführbare Datei von mehreren Host-Objekten zu erzeugen, wobei jedes entsprechenden Host-Code (zur Ausführung mittels der CPU) und entsprechenden Geräte-Code (zur Ausführung mittels der GPU) beinhaltet, da die konventionellen Host-Linker nicht in der Lage sind, den entsprechenden Geräte-Code, welcher in jedem der Host-Objekte eingebettet ist, korrekt zu linken bzw. zu verbinden.Conventional host linkers or compilers create an executable file from multiple host objects. These conventional host linkers, however, are unable to link device code embedded in multiple host objects, and therefore require that some device code be embedded in a single host object. For example, conventional host linkers may include an executable file from a first host object that includes only host code (for execution by the CPU), and a second host object, host code (for execution by the CPU), and Generate device code (for execution by the GPU). However, conventional host linkers are unable to generate an executable file from multiple host objects, each containing respective host code (for execution by the CPU) and corresponding device code (for execution by the GPU) the conventional host linkers are unable to properly link or associate the corresponding device code embedded in each of the host objects.

ZUSAMMENFASSUNG DER ERFINDUNGSUMMARY OF THE INVENTION

Demgemäß existiert ein Bedarf, ausführbare Dateien von mehreren Host-Objekten zu erzeugen, welche entsprechenden Host-Code und entsprechenden Geräte-Code beinhalten. Ausführungsformen der vorliegenden Erfindung stellen eine neue Lösung bereit, welche die separate Kompilierung von Host-Code und Geräte-Code unterstützt, welche in einer heterogenen Programmier-Umgebung benutzt werden. Ausführungsformen der vorliegenden Erfindung sind operabel, um Geräte-Code, welcher innerhalb von mehreren Host-Objekt-Dateien eingebettet ist, unter Benutzung einer separaten Geräte-Link-Operation zu linken. Ausführungsformen der vorliegenden Erfindung können Geräte-Code von ihren entsprechenden Host-Objekt-Dateien extrahieren und dann zusammen linken, um gelinkten Geräte-Code zu bilden. Dieser gelinkte Geräte-Code kann dann zurück in ein Host-Objekt eingebettet werden, welches mittels Ausführungsformen der vorliegenden Erfindung erzeugt ist, welches dann an einen Host-Linker gereicht bzw. passiert werden kann, um eine Host-ausführbare Datei zu bilden. Als solches kann Geräte-Code in mehrere Dateien aufgetrennt werden und dann zusammen gelinkt werden, um eine finale ausführbare Datei mittels Ausführungsformen der vorliegenden Erfindung zu bilden.Accordingly, there is a need to create executables from multiple host objects that include corresponding host code and corresponding device code. Embodiments of the present invention provide a new solution that supports the separate compilation of host code and device code used in a heterogeneous programming environment. Embodiments of the present invention are operable to link device code embedded within multiple host object files using a separate device link operation. Embodiments of the present invention may extract device code from their respective host object files and then link together to form linked device code. This linked device code may then be embedded back into a host object generated by embodiments of the present invention, which may then be passed to a host linker to form a host executable file. As such, device code may be separated into multiple files and then linked together to form a final executable file using embodiments of the present invention.

Insbesondere ist in einer Ausführungsform die vorliegende Erfindung als ein Verfahren zum Erzeugen einer ausführbaren Datei implementiert. Das Verfahren umfasst Kompilieren eines ersten Teils von Programm-Code und eines zweiten Teils von Programm-Code, welcher aus bzw. von einer Mehrzahl von verschiedenen Quell-Dateien zugegriffen ist, wobei der erste Teil Anweisungen aufweist, welche mittels einer Zentral-Verarbeitungs-Einheit (CPU) auszuführen sind, und wobei der zweite Teil von Code Anweisungen aufweist, welche ausschließlich mittels einer Grafik-Verarbeitungs-Code (GPU) auszuführen sind. In einer Ausführungsform ist der zweite Teil von Code in einer Version einer Rechen-unifiziertes-Gerät-Architektur-Programmiersprache (Compute Unified Device Architecture programming language) (CUDA) geschrieben. In einer Ausführungsform umfasst das Verfahren eines Kompilierens ferner ein separates Kompilieren des ersten Teils und des zweiten Teils von Code.In particular, in one embodiment, the present invention is implemented as a method for generating an executable file. The method includes compiling a first portion of program code and a second portion of program code accessed from a plurality of different source files, the first portion having instructions that are executed by a central processing unit (CPU), and wherein the second part of code has instructions to be executed exclusively by means of a graphics processing code (GPU). In one embodiment, the second part of code is written in a version of a compute unified device architecture programming language (CUDA). In one embodiment, the method of compiling further comprises separately compiling the first part and the second part of code.

In einer Ausführungsform umfasst das Verfahren eines Kompilierens ferner ein Generieren einer analogen codierten Entität (analogous coded entity), wobei der erste Teil von Code operabel ist, auf Daten von dem zweiten Teil von Code unter Benutzen der analogen codierten Entität zuzugreifen. Das Verfahren umfasst auch Zusammenlinken des ersten Teils von Code, welcher kompiliert ist, um einen verlinkten ersten Teil von Code zu erzeugen. Das Verfahren umfasst auch Zusammenlinken des zweiten Teils von Code, welcher kompiliert ist, um einen verlinkten zweiten Teil von Code zu erzeugen. In einer Ausführungsform umfasst das Verfahren eines Zusammenlinkens des zweiten Teils von Code ferner ein Erzeugen einer Schale-Host-Objekt-Datei (shell host object file) und Einbetten des gelinkten zweiten Teils von Code innerhalb der Schale-Host-Objekt-Datei.In one embodiment, the method of compiling further comprises generating an analogous coded entity, wherein the first part of code is operable to access data from the second part of code using the analog coded entity. The method also includes merging the first part of code that is compiled to produce a linked first part of code. The method also includes concatenating the second part of code that is compiled to produce a linked second part of code. In one embodiment, the method of merging the second part of code further comprises generating a shell host object file (shell host object file) and embedding the linked second part of code within the shell host object file.

In einer Ausführungsform umfasst das Verfahren eines Zusammenlinkens des zweiten Teils von Code ferner ein Unterscheiden von kodierten Objekten, welche innerhalb des zweiten Teils von Code eingebettet sind, welche einen gemeinsamen Namen teilen bzw. gemeinsam nutzen. In einer Ausführungsform umfasst das Verfahren eines Unterscheidens von kodierten Objekten ferner ein Erzeugen eines eindeutigen Identifikators für die kodierten Objekte, welche den gemeinsamen Namen teilen. Ferner umfasst das Verfahren Erzeugen der ausführbaren Datei, in welcher die ausführbare Datei eine ausführbare Form des gelinkten ersten Teils von Code und des gelinkten zweiten Teils von Code aufweist.In one embodiment, the method of merging the second part of code further comprises distinguishing coded objects embedded within the second part of code that share a common name. In one embodiment, the method of distinguishing coded objects further comprises generating a unique identifier for the coded objects that share the common name. The method further comprises generating the executable file in which the executable file comprises an executable form of the linked first portion of code and the linked second portion of code.

In einer Ausführungsform ist die vorliegende Erfindung in einem System zum Erstellen einer ausführbaren Datei implementiert. Das System umfasst einen ersten Compiler zum Kompilieren eines ersten Teils von Code, welcher von einer Mehrzahl von verschiedenen Quell-Dateien empfangen ist, wobei der erste Teil Anweisungen aufweist, welche mittels einer Zentral-Verarbeitungs-Einheit (CPU) auszuführen sind. Das System umfasst auch einen zweiten Compiler zum Kompilieren eines zweiten Teils von Code, welcher von der Mehrzahl von verschiedenen Quell-Dateien empfangen ist, wobei der zweite Teil von Code Anweisungen aufweist, welche ausschließlich mittels einer Grafik-Verarbeitungs-Einheit (GPU) auszuführen sind. In einer Ausführungsform ist der zweite Teil von Code in einer Version einer Rechen-Unifiziertes-Gerät-Architektur-Programmier-Sprache (CUDA) geschrieben. In einer Ausführungsform sind der erste Compiler und der zweite Compiler ferner operabel, um den ersten Teil und den zweiten Teil von Code unabhängig zu kompilieren. In einer Ausführungsform ist der zweite Compiler ferner operabel, eine analoge kodierte Entität zu interpretieren, wobei der erste Teil von Code operabel ist, auf Daten von dem zweiten Teil von Code unter Benutzung der analogen kodierten Entität zuzugreifen.In one embodiment, the present invention is implemented in an executable file creation system. The system includes a first compiler for compiling a first portion of code received from a plurality of different source files, the first portion having instructions to be executed by a central processing unit (CPU). The system also includes a second compiler for compiling a second portion of code received from the plurality of different source files, the second portion of code having instructions to be executed solely by means of a graphics processing unit (GPU) , In one embodiment, the second part of code is written in a version of a compute unified device architecture programming language (CUDA). In one embodiment, the first compiler and the second compiler are further operable to independently compile the first part and the second part of code. In one embodiment, the second compiler is further operable to interpret an analog coded entity, wherein the first portion of code is operable to access data from the second portion of code using the analog coded entity.

Das System umfasst ein erstes Link-Modul zum Zusammenlinken des ersten Teils von Code, welcher kompiliert ist, um einen gelinkten ersten Teil von Code zu erzeugen. Das System umfasst ein zweites Link-Modul zum Zusammenlinken des zweiten Teils von Code, welcher kompiliert ist, um einen gelinkten zweiten Teil von Code zu erzeugen. In einer Ausführungsform ist das zweite Link-Modul ferner operabel, eine Schale-Host-Objekt-Datei zu erzeugen, wobei der gelinkte zweite Teil von Code innerhalb der Schale-Host-Objekt-Datei eingebettet ist. In einer Ausführungsform ist das zweite Link-Modul ferner operabel, kodierte Objekte, welche innerhalb des zweiten Teils von Code eingebettet sind, welche einen gemeinsamen Namen teilen, zu unterscheiden. In einer Ausführungsform ist das zweite Link-Modul ferner operabel, einen eindeutigen Identifikator für die kodierten Objekte, welche den gemeinsamen Namen teilen, zu erzeugen. Das System umfasst auch ein ausführbare-Datei-Erzeugungs-Modul zum Erzeugen der ausführbaren Datei, wobei die ausführbare Datei eine ausführbare Form des gelinkten ersten Teils von Code und des gelinkten zweiten Teils von Code aufweist.The system includes a first link module for concatenating the first part of code which is compiled to produce a linked first part of code. The system includes a second link module for concatenating the second part of code which is compiled to produce a linked second part of code. In one embodiment, the second link module is further operable to generate a shell host object file, wherein the linked second portion of code is embedded within the shell host object file. In one embodiment, the second link module is further operable to distinguish encoded objects embedded within the second portion of code that share a common name. In one embodiment, the second link module is further operable to generate a unique identifier for the encoded objects sharing the common name. The system also includes an executable file generation module for generating the executable file, the executable file having an executable form of the linked first portion of code and the linked second portion of code.

In einer Ausführungsform ist die vorliegende Erfindung als ein Computer-implementiertes Verfahren zum Erzeugen einer ausführbaren Datei implementiert. Das Verfahren umfasst ein Extrahieren eines Geräte-Code-Teils von einem Nicht-Geräte-Code-Teil, welcher von einer Mehrzahl von verschiedenen Quell-Dateien empfangen ist, wobei der Geräte-Code-Teil Anweisungen aufweist, welche ausschließlich mittels einer Grafik-Verarbeitungs-Einheit (GPU) auszuführen sind. In einer Ausführungsform ist der Geräte-Code-Teil in einer Version einer Rechen-Unifiziertes-Gerät-Architektur-Programmier-Sprache (CUDA) geschrieben.In one embodiment, the present invention is implemented as a computer-implemented method for creating an executable file. The method comprises extracting a device code portion from a non-device code portion received from a plurality of different source files, the device code portion including instructions that are exclusively through graphics processing Unit (GPU). In one embodiment, the device code portion is written in a version of a compute unified device architecture programming language (CUDA).

In einer Ausführungsform umfasst das Verfahren eines Extrahierens ferner ein Kompilieren des Geräte-Code-Teils separat von dem Nicht-Geräte-Code-Teil. In einer Ausführungsform umfasst das Verfahren eines Kompilierens ferner ein Erzeugen einer analogen kodierten Entität, wobei der Nicht-Geräte-Code-Teil operabel ist, auf Daten von dem Geräte-Code-Teil unter Benutzung der analogen kodierten Entität zuzugreifen. Das Verfahren umfasst Linken des Geräte-Code-Teils separat von dem Nicht-Geräte-Code-Teil unter Benutzung eines separaten Link-Prozesses, um einen gelinkten Teil von Geräte-Code zu erzeugen. In einer Ausführungsform umfasst das Verfahren eines Linkens ferner ein Erzeugen einer Schale-Host-Objekt-Datei und ein Einbetten des gelinkten Teils von Geräte-Code innerhalb der Schale-Host-Objekt-Datei.In one embodiment, the method of extracting further comprises compiling the device code part separately from the non-device code part. In one embodiment, the method of compiling further comprises generating an analog encoded entity, wherein the non-device code portion is operable to access data from the device code portion using the analog encoded entity. The method includes linking the device code portion separately from the non-device code portion using a separate link process to produce a linked portion of device code. In one embodiment, the method of linking further comprises creating a shell host object file and embedding the linked part of device code within the shell host object file.

In einer Ausführungsform umfasst das Verfahren eines Linkens ferner ein Unterscheiden von kodierten Objekten, welche innerhalb des Geräte-Code-Teils eingebettet sind, welche einen gemeinsamen Namen teilen. In einer Ausführungsform umfasst das Verfahren eines Unterscheidens von kodierten Objekten ferner ein Erzeugen eines eindeutigen Identifikators für die kodierte Objekte, welche den gemeinsamen Namen teilen. Das Verfahren umfasst auch ein Erzeugen der ausführbaren Datei, wobei die ausführbare Datei eine ausführbare Form des gelinkten Teils von Geräte-Code und des Nicht-Geräte-Code-Teils aufweist.In one embodiment, the method of linking further comprises discriminating encoded objects embedded within the device code portion sharing a common name. In one embodiment, the method of distinguishing coded objects further comprises generating a unique identifier for the coded objects that share the common name. The method also includes generating the executable file, the executable file having an executable form of the linked portion of device code and the non-device code portion.

KURZE BESCHREIBUNG DER ZEICHNUNGEN BRIEF DESCRIPTION OF THE DRAWINGS

Die begleitenden Zeichnungen, welche in dieser Spezifikation inkorporiert sind und einen Teil dieser Spezifikation bilden, und in welchen ähnliche Bezugsnummern ähnliche Elemente bezeichnen, illustrieren Ausführungsformen der vorliegenden Offenbarung und dienen zusammen mit der Beschreibung dazu, die Prinzipien der Offenbarung zu erläutern.The accompanying drawings, which are incorporated in and constitute a part of this specification, and in which like reference numerals designate like elements, illustrate embodiments of the present disclosure and, together with the description, serve to explain the principles of the disclosure.

1A ist ein Blockdiagramm eines beispielhaften Link-Prozesses in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung. 1A FIG. 10 is a block diagram of an example link process in accordance with embodiments of the present invention. FIG.

1B ist ein Blockdiagramm eines beispielhaften Kompilierungs-Prozesses in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung. 1B FIG. 10 is a block diagram of an example compilation process in accordance with embodiments of the present invention. FIG.

1C stellt eine Illustration einer beispielhaften Speicher-Allokations-Tabelle oder Daten-Struktur bereit, welche benutzt ist, um Host-Code-Schatten-Entitäten (host code shadow entities) auf ihre entsprechenden Geräte-Code-Entitäten abzubilden, in Übereinstimmung mit den Ausführungsformen der vorliegenden Erfindung. 1C provides an illustration of an exemplary memory allocation table or data structure used to map host code shadow entities to their corresponding device code entities, in accordance with embodiments of the present invention present invention.

1D ist ein Blockdiagramm einer exemplarischen Computer-System-Plattform, welche benutzt ist, um Link- und Kompilierungs-Operationen in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung durchzuführen. 1D FIG. 10 is a block diagram of an exemplary computer system platform used to perform link and compile operations in accordance with embodiments of the present invention. FIG.

2 zeigt ein Flussdiagramm eines beispielhaften Kompilierungs-Prozesses in Übereinstimmung mit verschiedenen Ausführungsformen der vorliegenden Erfindung. 2 FIG. 12 shows a flowchart of an example compilation process in accordance with various embodiments of the present invention. FIG.

3 zeigt ein Flussdiagramm eines beispielhaften Schatten-Entität-Erzeugungs-Prozesses in Übereinstimmung mit verschiedenen Ausführungsformen der vorliegenden Erfindung. 3 FIG. 12 shows a flowchart of an exemplary shadow entity generation process in accordance with various embodiments of the present invention. FIG.

4 ist ein Blockdiagramm von einem anderen beispielhaften Kompilierungs-Prozess in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung. 4 FIG. 10 is a block diagram of another example compilation process in accordance with embodiments of the present invention. FIG.

5 stellt eine Illustration einer beispielhaften Tabelle oder Daten-Struktur bereit, welche benutzt ist, Geräte-Code nachzuverfolgen (track), welcher in vorherigen Link-Operation benutzt ist, in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung. 5 provides an illustration of an exemplary table or data structure used to track device code used in previous link operation, in accordance with embodiments of the present invention.

6 zeigt ein Flussdiagramm eines beispielhaften Kompilierungs-Prozesses zum Erzeugen von mehreren eingebetteten Geräte-Links in Übereinstimmung mit verschiedenen Ausführungsformen der vorliegenden Erfindung. 6 FIG. 12 shows a flowchart of an example compilation process for generating multiple embedded device links in accordance with various embodiments of the present invention.

DETAILLIERTE BESCHREIBUNGDETAILED DESCRIPTION

Es wird im Detail Bezug auf die verschiedenen Ausführungsformen der vorliegenden Offenbarung genommen, wobei Beispiele von diesen in den begleitenden Zeichnungen illustriert sind. Während sie im Zusammenhang mit diesen Ausführungsform beschrieben sind, wird es verstanden werden, dass sie nicht beabsichtigt sind, die Offenbarung auf diese Ausführungsformen zu begrenzen. Im Gegenteil ist die Offenbarung beabsichtigt, Alternativen, Modifikationen und Äquivalente abzudecken, welche innerhalb des Geistes und des Geltungsbereiches der Offenbarung umfasst sein können, wie mittels der angehängten Ansprüche definiert ist. Ferner werden in der folgenden detaillierten Beschreibung der vorliegenden Offenbarung zahlreiche spezifische Details ausgeführt, um ein durchgängiges Verständnis der Offenbarung bereitzustellen. Es wird jedoch verstanden werden, dass die vorliegende Offenbarung ohne diese spezifischen Details praktiziert werden kann. In anderen Fällen sind wohl bekannte Verfahren, Prozeduren, Komponenten und Schaltungen nicht im Detail beschrieben worden, um nicht unnötigerweise Aspekte der vorliegenden Offenbarung zu verschleiern.Reference will be made in detail to the various embodiments of the present disclosure, examples of which are illustrated in the accompanying drawings. While described in connection with this embodiment, it will be understood that they are not intended to limit the disclosure to these embodiments. On the contrary, the disclosure is intended to cover alternatives, modifications, and equivalents, which may be included within the spirit and scope of the disclosure as defined by the appended claims. Further, in the following detailed description of the present disclosure, numerous specific details are set forth in order to provide a thorough understanding of the disclosure. It will be understood, however, that the present disclosure may be practiced without these specific details. In other instances, well-known methods, procedures, components, and circuits have not been described in detail so as not to unnecessarily obscure aspects of the present disclosure.

Teile der detaillierten Beschreibung, welche folgt, sind in Ausdrücken eines Prozesses präsentiert und diskutiert. Obwohl Operationen und eine Abfolge davon in einer Figur hierin offenbart sind (z. B. 2, 3 und 6), welche exemplarische Operationen dieses Prozesses beschreiben, sind solche Operationen und Abfolge exemplarisch. Ausführungsformen sind gut geeignet, verschiedene andere Operationen oder Variationen der in dem Flussdiagramm der Figur hierin rezitierten Operationen durchzuführen und in einer Sequenz bzw. Abfolge, welcher von der hierin dargestellten und beschriebenen verschieden ist.Portions of the detailed description that follows are presented and discussed in terms of a process. Although operations and a sequence thereof are disclosed herein in a figure (e.g. 2 . 3 and 6 ), which describe exemplary operations of this process, such operations and sequence are exemplary. Embodiments are well suited to perform various other operations or variations of the operations recited in the flowchart of the figure herein and in a sequence different from that described and described herein.

Wie in dieser Anmeldung benutzt, sind die Ausdrücke Steuerung, Modul, System und dergleichen beabsichtigt, sich auf eine Computer-bezogene Entität, insbesondere entweder Hardware, Firmware, eine Kombination von Hardware und Software, Software, oder Software in Ausführung, zu beziehen. Zum Beispiel kann ein Modul sein, ist aber nicht darauf beschränkt zu sein, ein Prozess, welcher auf einem Prozessor abläuft, eine integrierte Schaltung, ein Objekt, ein ausführbare (Datei), ein Ausführungs-Thread, ein Programm und/oder ein Computer. Zu Illustrations-Zwecken kann sowohl eine Anwendung, welche auf einem Rechen-Gerät abläuft, und das Rechen-Gerät ein Modul sein. Ein oder mehrere Module können innerhalb eines Prozesses und/oder Ausführungs-Threads ansässig sein und eine Komponente kann auf einem Computer lokalisiert sein und/oder zwischen zwei oder mehr Computern verteilt sein. Zusätzlich können diese Module von verschiedenen Computerlesbaren Medien ausgeführt werden, welche verschiedene Daten-Strukturen darin bzw. darauf gespeichert haben.As used in this application, the terms control, module, system and the like are intended to refer to a computer-related entity, in particular either hardware, firmware, a combination of hardware and software, software, or software in execution. For example, a module may be, but is not limited to, a process running on a processor, an integrated circuit, an object, an executable (file), an execution thread, a program, and / or a computer. For illustration purposes, both an application running on a computing device and the computing device may be a module. One or more modules may reside within a process and / or execution thread, and a component may be located on a computer and / or distributed between two or more computers. In addition, these modules can be executed by different computer readable media, which have stored various data structures in or on it.

Mit Bezug auf 1A kann kompilierter Host-Code (z. B. kompilierter Host-Code 112) ein Satz von Anweisungen sein, welche unter Benutzung eines von Menschen lesbaren Computer-Sprache-Mediums (z. B. C, C++, FORTRAN) geschrieben sind und in der Lage sind, mittels eines Mikro-Prozessors (z. B. CPU) ausgeführt werden. Zusätzlich kann kompilierter Geräte-Code (z. B. kompilierter Geräte-Code 114) ein Satz von Anweisungen sein, welche unter Benutzung eines vom Menschen lesbaren Computer-Sprache-Mediums (z. B. Compute Unified Device Architecture (CUDA)) geschrieben sind und in der Lage sind, mittels einer Grafik-Prozessor-Einheit (z. B. GPU) ausgeführt zu werden. Sowohl kompilierter Host-Code als auch kompilierter Geräte-Code kann umstellbar bzw. umlokalierbar (re-locatable) sein und in der Lage sein, in eine Host-Objekt-Datei eingebettet zu werden. Auch können Host-Objekt-Dateien (z. B. Host-Objekt 110) Behälter-Dateien sein, welche umlokalisierbaren Maschinen-Code speichern (z. B. kompilierten Host-Code 112 und kompilierten Geräte-Code 114 von Host-Objekt 110), welcher unter Benutzung eines Compilers erzeugt ist und in der Lage ist, als Eingabe in ein Linker-Programm (z. B. Host-Linker 150 und Geräte-Linker 130) benutzt zu werden.Regarding 1A can compile host code (for example, compiled host code 112 ) may be a set of instructions written using a human-readable computer language medium (e.g., C, C ++, FORTRAN) and capable of being accessed by a micro-processor (e.g., CPU) be executed. In addition, compiled device code (eg, compiled device code 114 ) may be a set of instructions written using a human-readable computer language medium (e.g., Compute Unified Device Architecture (CUDA)) and capable of being accessed by a graphics processor unit (e.g. GPU). Both compiled host code and compiled device code may be convertible or re-locatable and may be embedded in a host object file. Also, host object files (such as host object 110 ) Container files that store redlocable machine code (eg, compiled host code 112 and compiled device code 114 from host object 110 ) generated using a compiler and capable of being input to a linker program (eg, host linker 150 and device linkers 130 ) to be used.

Geräte-Linker 130 kann als ein Satz von Anweisungen implementiert sein, welcher Geräte-Code von einer oder mehreren Objekt-Dateien als Eingabe empfängt und eine andere Host-Objekt-Datei erzeugt, um gelinkten Geräte-Code zu beinhalten. Host-Linker 150 kann als ein Satz von Anweisungen implementiert sein, welcher Objekt-Code von einer oder mehreren Objekt-Dateien als Eingabe empfängt und ein resultierendes ausführbares Bild oder eine teilbare (shareable) Objekt-Datei ausgibt, welche zum zusätzlichen Linken mit anderen Host-Objekt-Dateien benutzt werden kann. Gemäß einer Ausführungsform kann der Host-Linker 150 in der Lage sein, Ausgabe von dem Geräte-Linker 130 als Eingabe zu empfangen, wenn er Link-Operationen durchführt. Gemäß einer Ausführungsform kann Geräte-Linker 130 Link-Operationen auf Geräte-Code vor der Ausführung von Host-Linker 150 durchführen. Gemäß einer Ausführungsform der vorliegenden Erfindung kann Host-Linker 150 Link-Operationen auf Objekt-Dateien vor der Ausführung von Geräte-Linker 130 durchführen.Device Linker 130 may be implemented as a set of instructions which receives device code as input from one or more object files and generates another host object file to contain linked device code. Host Linker 150 may be implemented as a set of instructions that receives object code as input from one or more object files and outputs a resulting executable image or shareable object file for additional linking to other host object files can be used. According to one embodiment, the host linker 150 to be able to output from the device linker 130 as input when performing link operations. According to one embodiment, device linkers 130 Link operations on device code before running host linker 150 carry out. According to one embodiment of the present invention, host linkers 150 Link operations on object files before running device linker 130 carry out.

Wie mittels der in 1A gezeigten Ausführungsform illustriert ist, können Geräte-Linker 130 und Host-Linker 150 in Kombination benutzt werden, um eine ausführbare Datei von mehreren Host-Objekten zu erzeugen, wobei jedes entsprechenden Geräte-Code umfasst. Zum Beispiel kann Host-Objekt 110 kompilierten Host-Code 112 und kompilierten Geräte-Code 114 umfassen, wohingegen Host-Objekt 120 kompilierten Host-Code 122 und kompilierten Geräte-Code 124 umfassen kann. Gemäß einer Ausführungsform kann Geräte-Linker 130 Link-Operationen auf denselben Objekt-Dateien wie Host-Linker 150 durchführen (z. B. Host-Objekt 110 und Host-Objekt 120). Als solches kann Geräte-Linker 130 kompilierten Geräte-Code 114 und kompilierten Geräte-Code 124 linken, um gelinkten Geräte-Code 145 zu erzeugen. In einer Ausführungsform kann der gelinkte Geräte-Code 145 in Host-Objekt 140 eingebettet werden, wo Host-Objekt 140 ein „Dummy”-Host-Objekt oder „Schale” sein kann.As by means of in 1A illustrated embodiment, device linkers 130 and host linkers 150 used in combination to generate an executable file from multiple host objects, each comprising corresponding device code. For example, host object 110 compiled host code 112 and compiled device code 114 include, whereas host object 120 compiled host code 122 and compiled device code 124 may include. According to one embodiment, device linkers 130 Link operations on the same object files as host linker 150 perform (for example, host object 110 and host object 120 ). As such, device linker can 130 compiled device code 114 and compiled device code 124 left to linked device code 145 to create. In one embodiment, the linked device code 145 in host object 140 be embedded where host object 140 a "dummy" host object or "shell" can be.

Host-Linker 150 kann eine ausführbare Datei 160 als ein Ergebnis eines Linkens von Host-Objekt 110 (z. B. einschließlich kompilierter Host-Code 112), Host-Objekt 120 (z. B. einschließlich kompilierter Host-Code 122) und Host-Objekt 140 (z. B. einschließlich gelinkter Geräte-Code 145) erzeugen. Ausführbare Datei 160 kann gelinkten Geräte-Code 145 und gelinkten Host-Code 165 umfassen. In einer Ausführungsform kann gelinkter Host-Code 165 mittels oder in Antwort auf ein Linken von Host-Code 112 und kompiliertem Host-Code 122 erzeugt werden.Host Linker 150 can be an executable file 160 as a result of a link from host object 110 (eg including compiled host code 112 ), Host object 120 (eg including compiled host code 122 ) and host object 140 (eg including linked device code 145 ) produce. Executable file 160 can linked device code 145 and linked host code 165 include. In one embodiment, linked host code 165 by or in response to a link from host code 112 and compiled host code 122 be generated.

In einer Ausführungsform kann Host-Linker 150 kompilierten Geräte-Code (z. B. 114, 124, etc.) und/oder gelinkten Geräte-Code (z. B. 145) als einen Daten-Abschnitt behandeln, wenn Link-Operationen durchgeführt werden. Gemäß einer Ausführungsform kann Host-Linker 150 kompilierten Geräte-Code (z. B. 114, 124, etc.) und/oder gelinkten Geräte-Code (z. B. 145) während eines Linkens von kompiliertem Host-Code (z. B. 112, 114, etc.) oder Host-Objekten (z. B. 110, 120, 140, etc.) ignorieren. In einer Ausführungsform kann kompilierter Geräte-Code 114 und kompilierter Geräte-Code 124 umlokalisierbarer Geräte-Code sein oder umlokalisierbaren Geräte-Code umfassen. Zusätzlich kann gemäß einer Ausführungsform der gelinkte Geräte-Code 145 ausführbarer Geräte-Code sein oder ausführbaren Geräte-Code umfassen.In one embodiment, host linkers 150 compiled device code (eg 114 . 124 , etc.) and / or linked device code (eg. 145 ) as a data section when link operations are performed. According to one embodiment, host linkers 150 compiled device code (eg 114 . 124 , etc.) and / or linked device code (eg. 145 ) while linking compiled host code (eg. 112 . 114 , etc.) or host objects (eg. 110 . 120 . 140 ignore, etc.). In one embodiment, compiled device code 114 and compiled device code 124 be redirectable device code or include redistributable device code. In addition, according to one embodiment, the linked device code 145 be executable device code or include executable device code.

Ausführungsformen der vorliegenden Erfindung können Gebrauch von mehreren Geräte-Code-Eintritts-Punkten („Kernels”) von dem Host-Code-Teil eines Programms in den Geräte-Code-Teil eines Programms machen. In gewissen Szenarien können diese Eintritts-Punkte denselben ausführbaren Geräte-Code teilen (z. B. Funktionen, welche in der Lage sind, parallel ausgeführt zu werden). Als solches können Ausführungsformen der vorliegenden Erfindung Host-Objekt-Dateien initialisieren, um eine gemeinsame Routine aufzurufen, um auf gelinkten Geräte-Code zuzugreifen (z. B. gelinkten Geräte-Code 145), welcher dann jedem Eintritts-Punkt erlauben kann, diesen gelinkten Geräte-Code zu referenzieren. Auf diese Weise kann derselbe Satz von ausführbarem Geräte-Code noch für Host-Code zugreifbar sein, welcher erfordert, auf ihn zuzugreifen.Embodiments of the present invention may make use of multiple device code entry points ("kernels") from the host code portion of a program into the device code portion of a program. In certain scenarios, these entry points may share the same executable device code (eg, functions that are capable of being executed in parallel). As such, embodiments of the present invention may initialize host object files to invoke a common routine to access linked device code (eg, linked device code 145 ), which can then allow each entry point to reference this linked device code. In this way, the same set of executable device code may still be accessible to host code which requires accessing it.

Ferner können Ausführungsformen der vorliegenden Erfindung eine Sichtbarkeit (visibility) zwischen Host-Code und Geräte-Code während einer separaten Kompilierung derart aufrecht erhalten, dass Geräte-Entitäten (z. B. globale Funktionen, Geräte- und Konstant-Variablen, Texturen, Oberflächen), welche innerhalb des Geräte-Codes lokalisiert sind, noch für den Host-Code zugreifbar sein können. Für jeden Geräte-Eintrag, welcher innerhalb des Geräte-Codes vorhanden ist, können analoge oder „Schatten”-Entitäten innerhalb des Host-Codes erzeugt werden, um dem Host-Code zu ermöglichen, Zugriff auf Daten von einer entsprechenden Geräte-Entität zu erhalten und Daten von einer entsprechenden Geräte-Entität zu sammeln. Gemäß einer Ausführungsform können diese Schatten-Entitäten während einer Prä-Kompilierungs-Phase erzeugt werden. Further, embodiments of the present invention may maintain visibility between host code and device code during a separate compilation such that device entities (eg, global functions, device and constant variables, textures, surfaces) which are located within the device code, may still be accessible to the host code. For each device entry present within the device code, analog or "shadow" entities within the host code may be generated to allow the host code to gain access to data from a corresponding device entity and collect data from a corresponding device entity. According to one embodiment, these shadow entities may be generated during a pre-compile phase.

Mit Bezug auf die in 1B gezeigte Ausführungsform können z. B. Quell-Dateien 107 und 108 jeweils unkompilierten Host-Code (z. B. 112-1 bzw. 122-1) und unkompilierten Geräte-Code (z. B. 114-1 bzw. 124-1) umfassen. Unkompilierter Geräte-Code 114-1 kann Geräte-Entitäten 114-2 und 114-3 umfassen, welche als globale Funktionen oder Variablen kodiert sein können, welche für Entitäten außerhalb von unkompiliertem Geräte-Code 114-1 zugreifbar sind. In Antwort auf jede dieser Geräte-Entitäten können entsprechende Schatten-Entitäten erzeugt werden und an Host-Compiler 118 passiert werden.With reference to in 1B embodiment shown z. Eg source files 107 and 108 each uncompiled host code (eg 112-1 respectively. 122-1 ) and uncompiled device code (eg 114-1 respectively. 124-1 ). Uncompiled device code 114-1 can device entities 114-2 and 114-3 which may be encoded as global functions or variables that are for entities outside of uncompiled device code 114-1 are accessible. Respective shadow entities can be generated in response to each of these device entities and sent to host compilers 118 to be passed.

Gemäß einer Ausführungsform können Schatten-Entitäten 112-2 und 112-3 innerhalb von unkompiliertem Host-Code 112-1 erzeugt werden, um einen logischen Link zu Geräte-Entitäten 114-2 und 114-3 (jeweils) von unkompiliertem Geräte-Code 114-1 aufrechtzuerhalten, bevor sie in Host-Compiler 118 gefüttert werden. Zusätzlich können Schatten-Entitäten 112-2 und 112-3 derselbe Link-Typus wie der Geräte-Identität gegeben werden, welcher jede entspricht. Wenn z. B. Geräte-Entitäten 114-2 und 114-3 als ein „statischer” Typ designiert wären, kann auch Schatten-Entitäten 112-2 und 112-3 ein „statischer” Typ gegeben werden. In einer ähnlichen Weise können Schatten-Entitäten 122-2 und 122-3 von unkompiliertem Host-Code 122-1 in Entsprechung mit Geräte-Entitäten 124-2 und 124-3 (jeweils) von unkompiliertem Geräte-Code 124-1 in einer Weise erzeugt werden, welche oben diskutiert ist, bevor sie in Host-Compiler 118 geführt bzw. gefüttert werden. Ferner kann Geräte-Code-Compiler 116 voranschreiten, unkompilierten Geräte-Code 114-1 und 124-1 zu kompilieren einschließlich der zuvor erwähnten Geräte-Entitäten.According to one embodiment, shadow entities 112-2 and 112-3 within uncompiled host code 112-1 be generated to provide a logical link to device entities 114-2 and 114-3 (each) of uncompiled device code 114-1 uphold before going into host compiler 118 to be fed. Additionally, shadow entities can 112-2 and 112-3 the same link type as the device identity, which corresponds to each. If z. B. Device Entities 114-2 and 114-3 may be designated as a "static" type, may also have shadow entities 112-2 and 112-3 be given a "static" type. In a similar way, shadow entities can 122-2 and 122-3 from uncompiled host code 122-1 in correspondence with device entities 124-2 and 124-3 (each) of uncompiled device code 124-1 can be generated in a way that is discussed above before going into host compiler 118 be guided or fed. Furthermore, device code compiler 116 progress, uncompiled device code 114-1 and 124-1 to compile including the aforementioned device entities.

Zusätzlich zum Empfangen von unkompiliertem Host-Code 112-1 und 122-1 kann Host-Code-Compiler 118 zusätzlich die resultierende Ausgabe empfangen, welche mittels des Geräte-Code-Compilers 116 erzeugt ist, um Host-Objekte 110 und 120 zu erzeugen. Als solches kann kompilierter Host-Code 112 Schatten-Entitäten 112-2 und 112-3 empfangen, wohingegen kompilierter Host-Code 122 Schatten-Entitäten 122-2 und 122-3 empfangen kann. Demgemäß kann, auf eine Initialisierung und eine Ausführung hin, kompilierter Host-Code 112 auf Daten von Geräte-Entitäten 114-2 und 114-3 zugreifen, welche in kompiliertem Geräte-Code 114 gespeichert sind, während kompilierter Host-Code 122 auf Daten von Geräte-Entitäten 124-2 und 124-3 zugreifen kann, welche in kompiliertem Geräte-Code 124 gespeichert sein.In addition to receiving uncompiled host code 112-1 and 122-1 can be host code compiler 118 Additionally, the resulting output is received by the device code compiler 116 is generated to host objects 110 and 120 to create. As such, compiled host code 112 Shadow entities 112-2 and 112-3 whereas compiled host code 122 Shadow entities 122-2 and 122-3 can receive. Accordingly, upon initialization and execution, compiled host code may be used 112 on data from device entities 114-2 and 114-3 access which in compiled device code 114 while compiled host code 122 on data from device entities 124-2 and 124-3 which can be accessed in compiled device code 124 be saved.

Ferner kann mit Bezug auf die in 1C gezeigte Ausführungsform Tabelle 300 eine Tabelle sein, welche im Speicher gespeichert ist, welche benutzt ist, jede erzeugte Schatten-Entität auf eine Adresse im Speicher während einer Code-Ausführung abzubilden. Gemäß einer Ausführungsform wird auf eine Ausführung der Host-Objekt-Datei hin, ein Registrierungs-Code, welcher in der Host-Objekt-Datei gespeichert ist, ausgeführt, welcher die Adresse der Schatten-Entität auf den Namen der Geräte-Entität abbildet.Further, with reference to FIGS 1C shown embodiment table 300 a table stored in memory which is used to map each generated shadow entity to an address in memory during a code execution. According to one embodiment, upon execution of the host object file, a registration code stored in the host object file is executed, which maps the address of the shadow entity to the name of the device entity.

Ausführungsformen der vorliegenden Erfindung können auch Namen-Konflikte auflösen, welche Geräte-Entitäten von separaten Dateien involvieren, welche denselben Namen während der Abbildung von Schatten-Entitäten teilen. Zum Beispiel können gemäß einer Ausführungsform zwei verschiedene Geräte-Entitäten, welche denselben Namen von verschiedenen Modulen teilen, jede mit einem „statischen” Link-Typus, mit einem eindeutigen Präfix an jede Instanz des „statischen” Link-Gerät-Entitäts-Namens angehängt werden, um dadurch die Geräte-Entität eindeutig in einem endgültigen gelinkten Geräte-Bild (z. B. gelinkter Geräte-Code 145 von 1A) identifizierbar zu machen.Embodiments of the present invention may also resolve name conflicts involving device entities of separate files sharing the same name during the shadow entity mapping. For example, according to one embodiment, two different device entities sharing the same name from different modules, each with a "static" link type, with a unique prefix can be appended to each instance of the "static" link device entity name to thereby uniquely identify the device entity in a final linked device image (eg, linked device code 145 from 1A ) to make identifiable.

Computer-System-UmgebungComputer system environment

1D zeigt ein Computer-System 100 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung. Computer-System 100 zeigt die Komponenten eines grundlegenden Computer-Systems in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung, wobei es die Ausführungs-Plattform für gewisse Hardware-basierte und Software-basierte Funktionalität bereitstellt. Im Allgemeinen weist Computer-System 100 zumindest eine CPU 101, einen System-Speicher 115 und zumindest eine Grafik-Prozessor-Einheit (GPU) 110 auf. 1D shows a computer system 100 in accordance with an embodiment of the present invention. Computer System 100 Figure 12 shows the components of a basic computer system in accordance with embodiments of the present invention, providing the execution platform for certain hardware-based and software-based functionality. In general, computer system points 100 at least one CPU 101 , a system memory 115 and at least one graphics processor unit (GPU) 110 on.

Die CPU 101 kann an den System-Speicher 115 über eine Brücke-Komponente/Speicher-Steuerung (nicht gezeigt) gekoppelt sein oder kann direkt mit dem System-Speicher 115 über eine Speicher-Steuerung (nicht gezeigt), welche integral zu der CPU 101 ist, gekoppelt sein. Die GPU 110 kann an eine Anzeige 112 gekoppelt sein. Eine oder mehrere zusätzliche GPUs können optional an System 100 gekoppelt sein, um weiterhin seine Rechen-Leistung zu erhöhen. Die GPU(s) 110 ist an die CPU 101 und den System-Speicher 115 gekoppelt. Die GPU 110 kann als eine diskrete Komponente, eine diskrete Grafik-Karte, welche ausgelegt ist, an das Computer-System 100 über einen Konnektor (z. B. AGP-Schlitz, PCI-Express-Schlitz, etc.) zu koppeln, ein diskretes integrierter-Schaltung-Die (z. B. direkt auf einer Mutter-Platine montiert), oder als eine integrierte GPU, welche innerhalb des integrierte-Schaltung-Dies einer Computer-System-Chip-Satz-Komponente (nicht gezeigt) umfasst ist, implementiert sein. Zusätzlich kann ein logischer Grafik-Speicher 114 für die GPU 110 für Hoch-Bandbreite-Grafik-Daten-Speicherung umfasst sein.The CPU 101 can to the system memory 115 may be coupled via a bridge component / memory controller (not shown) or may be directly connected to the system memory 115 via a memory controller (not shown) which is integral to the CPU 101 is, be coupled. The GPU 110 can be sent to an ad 112 be coupled. One or more additional GPUs may be optional to system 100 coupled to continue to increase its computing power. The GPU (s) 110 is to the CPU 101 and the system memory 115 coupled. The GPU 110 can be used as a discrete component, a discrete graphics card, which is designed to the computer system 100 via a connector (eg AGP slot, PCI Express slot, etc.) to couple a discrete integrated circuit die (eg, mounted directly on a mother board), or as an integrated GPU which is included within the integrated circuit die of a computer system chip set component (not shown). In addition, a logical graphics memory 114 for the GPU 110 includes for high-bandwidth graphics data storage.

Die CPU 101 und die GPU 110 können auch in einem einzelnen integrierte-Schaltung-Die integriert sein und die CPU und die GPU können verschiedene Ressourcen teilen bzw. gemeinsam nutzen, wie etwa eine Anweisungs-Logik, Puffer, funktionale Einheiten usw., oder es können separate Ressourcen für Grafik- und Allgemeinzweck-Operationen bereitgestellt sein. Die GPU kann ferner in eine Kern-Logik-Komponente integriert sein.The CPU 101 and the GPU 110 can also be integrated into a single integrated circuit die, and the CPU and GPU can share or share various resources, such as instruction logic, buffers, functional units, etc., or separate resources for graphics and video Be provided general purpose operations. The GPU may also be integrated into a core logic component.

System 100 kann z. B. als ein Tisch-Computer-System oder ein Server-Computer-System implementiert sein, welches eine leistungsfähige Allgemeinzweck-CPU 101 hat, welche mit einer dedizierten Grafik-Rendering-GPU 110 gekoppelt ist. In solch einer Ausführungsform können Komponenten umfasst sein, welche periphere Busse, spezialisierte Audio-/Video-Komponenten, IO-Geräte und dergleichen hinzufügen. Es wird geschätzt, dass die parallele Architektur von GPU 110 erhebliche Performance-Vorteile über CPU 101 haben kann.system 100 can z. B. be implemented as a desktop computer system or a server-computer system, which is a powerful general-purpose CPU 101 which has a dedicated graphics rendering GPU 110 is coupled. In such an embodiment, components may be included that add peripheral buses, specialized audio / video components, IO devices, and the like. It is estimated that the parallel architecture of GPU 110 significant performance advantages over CPU 101 may have.

2 präsentiert ein Flussdiagramm, welches einen beispielhaften Computer-implementierten Kompilierungs-Prozess in Übereinstimmung mit verschiedenen Ausführungsformen der vorliegenden Erfindung bereitstellt. 2 FIG. 10 presents a flowchart providing an exemplary computer-implemented compilation process in accordance with various embodiments of the present invention.

Bei Schritt 206 werden zwei oder mehr Host-Objekt-Dateien, von denen jede Geräte-Code-Objekte beinhaltet, welche in der Lage sind, mittels einer GPU gelesen und ausgeführt zu werden, in ein Geräte-Code-Linker-Programm zugeführt bzw. gefüttert.At step 206 For example, two or more host object files, each containing device code objects capable of being read and executed by a GPU, are fed into a device code linker program.

Bei Schritt 207 operiert das Geräte-Code-Linker-Programm auf den Geräte-Code-Objekten, welche innerhalb jeder Host-Objekt-Datei beinhaltet sind, welche in das Geräte-Linker-Programm bei Schritt 206 gefüttert sind, um gelinkten Geräte-Code zu erzeugen. Wenn auf der Host-Objekt-Datei gearbeitet bzw. operiert wird, ignoriert der Geräte-Code-Linker Objekte, welche keinen Geräte-Code beinhalten.At step 207 The device code linker program operates on the device code objects contained within each host object file which is inserted into the device linker program at step 206 are fed to produce linked device code. When operating on the host object file, the device code linker ignores objects that do not contain device code.

Bei Schritt 208 wird der resultierende gelinkte Geräte-Code, welcher während des Schrittes 207 erzeugt ist, zurück in eine Host-Objekt-Datei eingebettet, welche mittels des Geräte-Code-Linker-Programms erzeugt ist, welche als ein „Dummy”-Host-Objekt oder „Schale” (shell) dient. Die Host-Objekt-Datei kann in einem Zustand zur Benutzung als Eingabe für das Host-Linker-Programm sein.At step 208 becomes the resulting linked device code, which during the step 207 is embedded back into a host object file created by the device code linker program which serves as a "dummy" host object or "shell". The host object file may be in a state for use as input to the host linker program.

Bei Schritt 209 operiert das Host-Linker-Programm auf den Host-Objekt-Dateien, welche in das Geräte-Linker-Programm bei Schritt 206 gefüttert bzw. zugeführt wurden, sowie auf der Host-Objekt-Datei, welche während des Schrittes 208 erzeugt ist. Das Host-Linker-Programm erzeugt eine Datei, welche eine ausführbare Form von gelinktem Geräte-Code, welcher in der Lage ist, mittels der GPU eines Computer-Systems ausgeführt zu werden, sowie eine ausführbare Form von gelinktem Host-Code beinhaltet, welcher in der Lage ist, mittels der CPU eines Computer-Systems ausgeführt zu werden.At step 209 The host linker program operates on the host object files which are in the device linker program at step 206 were fed or fed, as well as on the host object file, which during the step 208 is generated. The host linker program generates a file containing an executable form of linked device code capable of being executed by the GPU of a computer system, as well as an executable form of linked host code, which in is able to be executed by means of the CPU of a computer system.

3 präsentiert ein Flussdiagramm, welches einen beispielhaften Computer-implementierten Schatten-Entität-Erzeugungs-Prozess in Übereinstimmung mit verschiedenen Ausführungsformen der vorliegenden Erfindung bereitstellt. 3 FIG. 10 presents a flowchart providing an exemplary computer-implemented shadow entity generation process in accordance with various embodiments of the present invention.

Bei Schritt 306 werden Geräte-Entitäten, welche in Host-Code zugreifbar sind, von einer Quell-Datei gelesen, welche sowohl den Geräte-Code aufweist, welcher die Geräte-Entitäten beinhaltet, als auch Host-Code während einer Prä-kompilierungs-Phase.At step 306 Device entities that are accessible in host code are read from a source file that includes both the device code that includes the device entities and host code during a pre-compile phase.

Bei Schritt 307 wird für jede Geräte-Entität, welche bei Schritt 306 bestimmt ist, eine entsprechende analoge oder „Schatten”-Entität erzeugt und an den Host-Code-Compiler passiert bzw. weitergereicht. Diese entsprechenden Schatten-Entitäten können einen logischen Link zu ihren entsprechenden Geräte-Entitäten (aufrechter) halten und es kann ihnen derselbe Link-Typus wie die Geräte-Entität gegeben sein, welcher jede entspricht.At step 307 is for each device entity, which at step 306 is determined, a corresponding analog or "shadow" entity is generated and passed to the host code compiler. These corresponding shadow entities may hold a logical link to their corresponding device entities (upright) and may be given the same link type as the device entity, which corresponds to each one.

Bei Schritt 308 empfängt und kompiliert der Geräte-Code-Compiler den Geräte-Code der Quell-Datei, welche als Eingabe bei Schritt 306 benutzt ist. Die resultierende Ausgabe wird dann in den Host-Code-Compiler gefüttert.At step 308 The device code compiler receives and compiles the device code of the source file, which is input as step 306 is used. The resulting output is then fed to the host code compiler.

Bei Schritt 309 operiert der Host-Code-Compiler auf dem Host-Code der Quell-Datei, welche als Eingabe bei Schritt 306 benutzt wird, einschließlich der Schatten-Entitäten, welche zu dem Host-Compiler bei Schritt 307 passiert sind, sowie der resultierenden Ausgabe, welche mittels des Geräte-Compilers bei Schritt 308 erzeugt ist.At step 309 the host code compiler operates on the host code of the source file, which is input as step 306 including the shadow entities leading to the host compiler at step 307 happened, as well as the resulting output generated by the device compiler at step 308 is generated.

Bei Schritt 310 erzeugt der Host-Code-Compiler eine Host-Objekt-Datei, welche eine kompilierte Form sowohl des Geräte-Codes, einschließlich der Geräte-Entitäten, welche bei Schritt 306 bestimmt sind, sowie des Host-Codes, einschließlich jeder entsprechenden Schatten-Entität Geräte-Entität, welche bei Schritt 307 erzeugt ist, einkapselt.At step 310 The host code compiler generates a host object file, which is a compiled form of both the device code, including the device entities, which are at step 306 are determined, as well as the host code, including each corresponding shadow entity device entity, which at step 307 is generated encapsulates.

Beispielhaftes Verfahren eines Einbettens von mehreren Geräte-Links in ein Host-ausführbares KonstruktExemplary method of embedding multiple device links into a host-executable construct

Ausführungsformen der vorliegenden Erfindung können natürliche unabhängige Gruppierungen von Geräte-Code in einer Weise unterstützen, welche erlaubt, dass diese Gruppen („Datei-Sätze”) separat gelinkt werden. Zum Beispiel kann es in einer großen Projekt-Aufstellung einen Satz von Dateien geben, welche Geräte-Code zum Handhaben einer ersten Aufgabe (z. B. Bild-Handhabung) beinhalten, während ein anderer Satz von Dateien eine zweite Aufgabe handhaben kann, welche unabhängig von der ersten Aufgabe ist (z. B. Parallel-Berechnung). Geräte-Code von verschiedenen Gruppen braucht nicht direkt zu interagieren und braucht sich daher nicht gegenseitig während einer Kompilierung- oder während Link-Prozessen beeinflussen. Als solches ermöglichen Ausführungsformen der vorliegenden Erfindung, dass die erste Gruppe von Dateien zusammen gelinkt wird, um eine ausführbare Form von gelinktem Geräte-Code zu bilden, während die zweite Gruppe von Dateien separat in eine andere ausführbare Form von gelinktem Geräte-Code zusammen gelinkt werden kann. Diese ausführbaren Formen können dann innerhalb derselben ausführbaren Datei platziert und gepackt werden, wo eine CPU und GPU ihre entsprechenden Dateien zugreifen kann und ihre entsprechenden Aufgaben durchführen kann.Embodiments of the present invention may support natural independent groupings of device code in a manner that allows these groups ("file sets") to be linked separately. For example, in a large project set up, there may be a set of files that include device code for handling a first task (eg, image handling) while another set of files may handle a second task that is independent from the first task is (eg parallel calculation). Device code from different groups does not need to interact directly, and therefore does not need to interfere with each other during a compilation or link process. As such, embodiments of the present invention allow the first group of files to be linked together to form an executable form of linked device code, while the second group of files are separately linked together into another executable form of linked device code can. These executable forms can then be placed and packaged within the same executable file, where a CPU and GPU can access their respective files and perform their respective tasks.

Wie in der Ausführungsform, welche in 4 gezeigt ist, illustriert ist, können ein Geräte-Linker (z. B. Geräte-Linker 130-1 und 130-2) und ein Host-Linker (z. B. Host-Linker 150) in Kombination benutzt werden, um eine ausführbare Datei zu erzeugen, einschließlich dieser mehreren Teile von gelinktem Geräte-Code oder „Geräte-Links”. Mehrere Geräte-Links können eine analytische Präzision während der Performance von Link-Operationen erhöhen, was eine optimale Code-Erzeugung ergeben kann. Ferner unterstützt ein Einbetten von mehreren Geräte-Links in der Weise, welche mittels Ausführungsformen der vorliegenden Erfindung beschrieben ist, das Linken von Verkäufer-Bibliotheken dadurch, dass erlaubt ist, dass ein Geräte-Link unabhängig von irgendeinem Benutzer-Wissen anderer Geräte-Links, welche mittels eines außenstehenden Verkäufers erstellt wurden, auftritt bzw. erfolgt.As in the embodiment which is in 4 is illustrated, a device linker (eg device linker 130-1 and 130-2 ) and a host linker (eg host linker 150 ) are used in combination to create an executable, including multiple pieces of linked device code or "device links". Multiple device links can increase analytical precision during the performance of link operations, which can result in optimal code generation. Further, embedding multiple device links in the manner described by embodiments of the present invention facilitates linking vendor libraries by allowing a device link to be independent of any user knowledge of other device links, which were created by an external seller, occurs or takes place.

Mit Bezug auf 4 kann Datei-Satz 600 Code beinhalten, welcher logisch aufeinander bezogen ist und welcher funktional distinkt ist von dem Datei-Satz 700. Zum Beispiel können Host-Objekte 110 und 120 von Datei-Satz 600 Code zur Benutzung in Bild-Handhabungs-Prozessen beinhalten, wohingegen Host-Objekte 130 und 150 von Datei-Satz 700 Anweisungen zur Benutzung in Parallel-Berechnungen beinhalten können. Als solches brauchen Datei-Satz 600 und Datei-Satz 700 nicht direkt zu interagieren und brauchen sich daher gegenseitig während einer Kompilierung oder eines Linkens nicht gegenseitig zu berühren bzw. beinflussen.Regarding 4 can file set 600 Include code that is logically related to each other and which is functionally distinct from the file set 700 , For example, host objects 110 and 120 from file set 600 Include code for use in image handling processes, whereas host objects 130 and 150 from file set 700 May include instructions for use in parallel calculations. As such, need file set 600 and file set 700 not interacting directly with each other and therefore do not need to touch or influence each other during compilation or linking.

Geräte-Linker 130-1 kann kompilierten Geräte-Code 114 und kompilierten Geräte-Code 124 linken, um gelinkten Geräte-Code 145 (z. B. wie oben diskutiert ist) zu erzeugen. Zusätzlich kann Geräte-Linker 130-2 kompilierten Geräte-Code 134 und kompilierten Geräte-Code 154 linken, um gelinkten Geräte-Code 245 zu erzeugen (z. B. ähnlich der Erzeugung von gelinktem Geräte-Code 145, wie oben diskutiert ist). Gemäß einer Ausführungsform können Geräte-Linker 130-1 und Geräte-Linker 130-2 derselbe Linker sein, welcher bei separaten Zeiten aufgerufen wird. Jeder Teil von gelinktem Geräte-Code (z. B. 145 und 245) kann eingebettet werden in oder Teil sein von einem entsprechenden Host-Objekt (z. B. 140 bzw. 240), welches mittels Geräte-Linker 130-1 bzw. 130-2 erzeugt ist.Device Linker 130-1 can compile device code 114 and compiled device code 124 left to linked device code 145 (eg as discussed above). Additionally, device linker 130-2 compiled device code 134 and compiled device code 154 left to linked device code 245 (similar to the generation of linked device code, for example) 145 as discussed above). According to one embodiment, device linkers 130-1 and device linkers 130-2 be the same linker, which is called at separate times. Any part of linked device code (eg. 145 and 245 ) may be embedded in or part of a corresponding host object (eg. 140 respectively. 240 ), which by means of device linker 130-1 respectively. 130-2 is generated.

Host-Linker 150 kann dann ausführbare Datei 160 als ein Ergebnis eines Linkens von Host-Objekt 110 (z. B. einschließlich kompiliertem Host-Code 112), Host-Objekt 120 (z. B. einschließlich kompiliertem Host-Code 122), Host-Objekt 130 (z. B. einschließlich kompiliertem Host-Code 132), Host-Objekt 150 (z. B. einschließlich kompiliertem Host-Code 152), Host-Objekt 140 (z. B. einschließlich gelinktem Geräte-Code 145) und Host-Objekt 240 (z. B. einschließlich gelinktem Geräte-Code 245) erzeugen. Ausführbare Datei 160 kann zumindest einen Teil von gelinktem Geräte-Code (z. B. 145, 245, etc.) und gelinktem Host-Code (z. B. 160) umfassen. In einer Ausführungsform kann gelinkter Host-Code 165 erzeugt werden mittels oder in Antwort auf ein Linken von Host-Codes 112, 122, 132 und 152. Demgemäß kann eine ausführbare Datei (z. B. 160) erzeugt werden, welche gelinkten Host-Code (z. B. 165) und mehrere Teile von gelinktem Geräte-Code (z. B. 145, 245, etc.) umfasst.Host Linker 150 can then executable file 160 as a result of a link from host object 110 (eg including compiled host code 112 ), Host object 120 (eg including compiled host code 122 ), Host object 130 (eg including compiled host code 132 ), Host object 150 (eg including compiled host code 152 ), Host object 140 (eg including linked device code 145 ) and host object 240 (eg including linked device code 245 ) produce. Executable file 160 can be at least part of linked device code (eg. 145 . 245 , etc.) and linked host code (eg. 160 ). In one embodiment, linked host code 165 generated by or in response to a link of host codes 112 . 122 . 132 and 152 , Accordingly, an executable file (e.g. 160 ), which linked host code (e.g. 165 ) and several pieces of linked device code (eg 145 . 245 , etc.).

Ferner können Ausführungsformen der vorliegenden Erfindung in eindeutiger Weise jedes Geräte-Code-Objekt, welches gelinkt ist, durch die Benutzung von eindeutigen Identifikatoren identifizieren. Durch die Benutzung von eindeutigen Identifikatoren können Ausführungsformen der vorliegenden Erfindung eine bessere Sicherheit bereitstellen, dass ein Geräte-Code-Objekt nicht in zwei verschiedene gelinkte Geräte-Codes innerhalb derselben ausführbaren Datei gelinkt wird. In dieser Weise können Ausführungsformen der vorliegenden Erfindung ein eine Sicherungs-Vorkehrung bereitstellen, welche sicherstellt, dass Geräte-Code, welcher innerhalb von Host-Objekten eingebettet ist, eindeutig identifiziert werden kann und gelinkt werden kann in Übereinstimmung mit den Protokollen von konventionellen Programmier-Sprachen (z. B. C++).Further For example, embodiments of the present invention can uniquely identify each device code object that is linked by the use of unique identifiers. By using unique identifiers, embodiments of the present invention may provide better security that a device code object will not be linked into two different linked device codes within the same executable file. In this manner, embodiments of the present invention may provide a backup precaution which ensures that device code embedded within host objects can be uniquely identified and linked in accordance with the protocols of conventional programming languages (eg C ++).

5 präsentiert eine beispielhafte Darstellung, wie Geräte-Code-Objekte eindeutig in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung identifiziert werden können. Geräte-Linker-Tabelle 400 kann eine Tabelle sein, welche im Speicher gespeichert ist, welche eindeutig jeden Geräte-Code identifiziert, welcher mittels Geräte-Linker 130 während der Performance von Link-Operationen benutzt wird, zusammen bzw. entlang mit den Host-Objekten, mit welchen diese Entitäten assoziiert sind („Host-Objekt-Vorgänger”). Geräte-Linker 130 kann einen eindeutigen Identifikator für jedes Geräte-Objekt (z. B. „module_id”-Spalte) erzeugen, partizipierend an dem Geräte-Link-Prozess. 5 presents an exemplary representation of how device code objects can be uniquely identified in accordance with embodiments of the present invention. Device Linker table 400 may be a table stored in memory which uniquely identifies each device code, which by means of device linker 130 during the performance of link operations, along or along with the host objects with which those entities are associated ("host object predecessors"). Device Linker 130 can generate a unique identifier for each device object (eg, "module_id" column), participating in the device link process.

Gemäß einer Ausführungsform kann sich Geräte-Linker 130 auf Geräte-Linker-Tabelle 400 beziehen, um zu bestimmen, welche Geräte-Objekte bereits in dem Link-Prozess partizipiert haben. Diejenigen Geräte-Objekte, welche als vorherige Partizipanten identifiziert worden sind, können vom Partizipieren an den Host-Link-Operationen mittels Host-Linker 150 ausgeschlossen werden. Als solches können Versuche, eine ausführbare Datei zu erstellen, welche vorherige Partizipanten beinhaltet, davon abgehalten werden, erfolgreich zu sein. Zum Beispiel, mit Bezug auf Geräte-Linker-Tabelle 400, gegeben, dass Host-Objekt 110 (welches kompilierten Geräte-Code 114 beinhaltet) und Host-Objekt 120 (welches kompilierten Geräte-Code 124 beinhaltet) zusammen gelinkt wurden, um einen gelinkten Geräte-Code 145 zu erzeugen, können beide Host-Objekte 110 und 120 davon abgehalten werden, in einer nachfolgenden Geräte-Link-Operation zu partizipieren. Wenn Host-Objekt 110 und eine andere Host-Objekt-Datei, welche ihren eigenen kompilierten Geräte-Code (nicht dargestellt) beinhaltet, als Eingabe, mittels Geräte-Linker 130 gelinkt zu werden, ausgeführt würden, kann sich Geräte-Linker 130 auf Geräte-Linker-Tabelle 400 beziehen und bestimmen, dass Host-Objekt 110 bereits ein Partizipant in einer vorherigen Link-Operation (z. B. gelinkter Geräte-Code 145) war. Demgemäß kann Geräte-Linker 130 das Host-Objekt 110 ignorieren und nur diejenigen Objekte linken, welche Code beinhalten, welcher vorher nicht gelinkt wurde.According to one embodiment, device linkers may 130 on device linker table 400 to determine which device objects have already participated in the link process. Those device objects which have been identified as previous participants can participate in host link operations by host linkers 150 be excluded. As such, attempts to create an executable file that includes previous past participles may be discouraged from succeeding. For example, with reference to device linker table 400 , given that host object 110 (which compiled device code 114 includes) and host object 120 (which compiled device code 124 includes) linked together to a linked device code 145 can generate both host objects 110 and 120 be prevented from participating in a subsequent device link operation. If host object 110 and another host object file containing its own compiled device code (not shown) as input, via device linker 130 Can be linked, run, device linker 130 on device linker table 400 refer and determine that host object 110 already a participant in a previous link operation (eg linked device code 145 ) was. Accordingly, device linker 130 the host object 110 ignore and only link those objects that contain code that was not previously linked.

6 präsentiert ein Flussdiagramm, welches einen beispielhaften Computer-implementierten Geräte-Code-Kompilierungs-Prozess in Übereinstimmung mit verschiedenen Ausführungsformen der vorliegenden Erfindung bereitstellt. 6 FIG. 10 presents a flowchart providing an exemplary computer-implemented device code compilation process in accordance with various embodiments of the present invention.

Bei Schritt 406 wird jede Host-Objekt-Datei, welche zu einem Datei-Satz gehört, unter einer Mehrzahl von Host-Objekt-Datei-Sätzen, welche als Eingabe benutzt werden, in ein Geräte-Code-Linker-Programm gefüttert.At step 406 For example, each host object file associated with a file set is fed into a device code linker program among a plurality of host object file sets used as input.

Bei Schritt 407 sucht das Geräte-Code-Linker-Programm nach einem eindeutigen Identifikations-Code (z. B. modul_ID), welcher jeder Host-Objekt-Datei zugewiesen ist, welche bei Schritt 406 zugeführt ist, um zu bestimmen, ob die Host-Objekt-Dateien in einem vorherigen Geräte-Code-Link-Prozess partizipiert haben.At step 407 the device code linker program looks for a unique identification code (eg, modul_ID) assigned to each host object file which is at step 406 to determine if the host object files have participated in a previous device code link process.

Bei Schritt 408 wird eine Bestimmung gemacht, ob die Host-Objekt-Dateien, welche mittels des Geräte-Code-Linkers empfangen worden sind, an einem vorherigen Geräte-Code-Link-Prozess partizipiert haben. Wenn die Host-Objekt-Dateien nicht in einer vorherigen Geräte-Code-Link-Operation partizipiert haben, dann operiert das Geräte-Code-Linker-Programm auf dem Geräte-Code, welche innerhalb der Host-Objekt-Dateien eingebettet ist, welche in das Geräte-Linker-Programm bei Schritt 406 gefüttert sind, wie in Schritt 410 detailliert wurde. Wenn eine der Host-Objekt-Dateien in einer vorherigen Geräte-Code-Link-Operation partizipiert hat, dann wird diese Host-Objekt-Datei von einer Partizipation in der momentanen Geräte-Link-Operation ausgeschlossen, wie in Schritt 409 detailliert ist.At step 408 a determination is made as to whether the host object files received by the device code linker have participated in a previous device code link process. If the host object files did not participate in a previous device code link operation, then the device code linker program operates on the device code embedded within the host object files stored in the device linker program at step 406 are fed, as in step 410 was detailed. If any of the host object files have participated in a previous device code link operation, then that host object file is excluded from participating in the current device link operation, as in step 409 is detailed.

Bei Schritt 409 ist eine Host-Objekt-Datei, welche bei Schritt 406 zugeführt ist, bestimmt worden, in einer vorherigen Geräte-Code-Link-Operation partizipiert zu haben, und ist daher von einer Partizipation an der momentanen Geräte-Link-Operation ausgeschlossen.At step 409 is a host object file, which is at step 406 has been determined to have participated in a previous device code link operation, and is therefore excluded from participation in the current device link operation.

Bei Schritt 410 sind die Host-Objekt-Dateien bestimmt worden, nicht in einer vorherigen Geräte-Code-Link-Operation partizipiert zu haben, und daher operiert das Geräte-Code-Linker-Programm auf dem Geräte-Code, welcher innerhalb der Host-Objekt-Dateien beinhaltet ist, welche in das Geräte-Code-Linker-Programm gefüttert sind, und erzeugt gelinkten Geräte-Code. Das Geräte-Code-Linker-Programm bettet den resultierenden gelinkten Geräte-Code innerhalb einer Host-Objekt-Datei ein, welche mittels des Geräte-Code-Linker-Programms erzeugt ist.At step 410 For example, the host object files have been determined not to have participated in a previous device code link operation, and therefore the device code linker program operates on the device code, which is within the host object files which are fed into the device code linker program and generates linked device code. The device code linker program embeds the resulting linked device code within a host object file generated by the device code linker program.

Bei Schritt 411 wird jeder Host-Objekt-Datei, welche während Schritt 410 benutzt ist, ein eindeutiger Identifikations-Code zugewiesen (z. B. modul_id), welche Informationen bezüglich der momentanen Link-Operation bereitstellt, welche mittels des Geräte-Code-Linker-Programms unter Benutzung einer im Speicher gespeicherten Tabelle nachverfolgt wird (tracked).At step 411 will each host object file, which is during step 410 is assigned a unique identification code (eg, module_id) which provides information regarding the current link operation tracked by the device code linker program using a table stored in memory.

Bei Schritt 412 erzeugt das Host-Linker-Programm eine ausführbare Form des Host-Codes, welcher innerhalb derselben Host-Objekt-Dateien eingebettet ist, welche an das Geräte-Code-Linker-Programm bei Schritt 406 zugefüttert sind, sowie des gelinkten Geräte-Codes, welcher innerhalb der Host-Objekt-Datei eingebettet ist, welche bei Schritt 410 erzeugt ist.At step 412 For example, the host linker program generates an executable form of the host code embedded within the same host object files which are sent to the device code linker program at step 406 and the linked device code which is embedded within the host object file, which at step 410 is generated.

Bei Schritt 413 erzeugt das Host-Linker-Programm eine ausführbare Datei, welche jedes der ausführbare Konstrukte (executables) einkapselt, welche bei Schritt 412 erzeugt sind.At step 413 The host linker program generates an executable file which encapsulates each of the executables that are executed at step 412 are generated.

Während die vorangehende Offenbarung verschiedene Ausführungsformen unter Benutzung von spezifischen Blockdiagrammen, Flussdiagrammen und Beispielen ausführt, kann jede Blockdiagramm-Komponente, Flussdiagramm-Schritt, Operation und/oder Komponente, welche hierin beschrieben und/oder illustriert ist, individuell und/oder kollektiv implementiert sein, unter Benutzung eines breiten Bereichs von Hardware-, Software- oder Firmware- (oder irgendeiner Kombination davon) Konfigurationen. Zusätzlich sollte irgendeine Offenbarung von Komponenten, welche innerhalb anderer Komponenten beinhaltet sind, als Beispiele betrachtet werden, da viele andere Architekturen implementiert werden können, um dieselbe Funktionalität zu erreichen.While the foregoing disclosure embodies various embodiments using specific block diagrams, flowcharts, and examples, each block diagram component, flowchart step, operation, and / or component described and / or illustrated herein may be implemented individually and / or collectively, using a wide range of hardware, software or firmware (or any combination thereof) configurations. In addition, any disclosure of components included within other components should be considered as examples, since many other architectures can be implemented to achieve the same functionality.

Die Prozess-Parameter und Sequenz von Schritten, welche hierin beschrieben und/oder illustriert sind, sind nur als Beispiel gegeben. Während die hierin illustrierten und/oder beschriebenen Schritte in einer bestimmten Ordnung gezeigt oder diskutiert sein können, brauchen diese Schritte nicht notwendigerweise in der illustrierten oder diskutierten Ordnung durchgeführt werden. Die verschiedenen Beispiel-Methoden, welche hierin beschrieben und/oder illustriert sind, können auch einen oder mehrere der Schritte, welche hierin beschrieben oder illustriert sind, auslassen oder zusätzliche Schritte zusätzlich zu denjenigen umfassen, welche offenbart sind.The process parameters and sequence of steps described and / or illustrated herein are given by way of example only. While the steps illustrated and / or described herein may be shown or discussed in a particular order, these steps need not necessarily be performed in the illustrated or discussed order. The various example methods described and / or illustrated herein may also omit one or more of the steps described or illustrated herein, or include additional steps in addition to those disclosed.

Während verschiedene Ausführungsformen hierin im Zusammenhang von voll funktionalen Computer-System beschrieben und/oder illustriert worden sind, können eine oder mehrere dieser Beispiel-Ausführungsformen als ein Programm-Produkt in einer Verschiedenheit von Formen verteilt werden, unabhängig von dem bestimmten Typ von Computerlesbaren Medien, welche benutzt werden, um tatsächlich die Verteilung auszuführen. Die hierin offenbarten Ausführungsformen können auch unter Benutzung von Software-Modulen implementiert sein, welche gewisse Aufgaben durchführen. Diese Software-Module können Skript-, Batch-, oder andere ausführbare Dateien umfassen, welche auf einem Computer-lesbaren Speicher-Medium oder in einem Rechen-System gespeichert sein können. Diese Software-Module können ein Computer-System konfigurieren, eine oder mehrere der Beispiel-Ausführungsformen, welche hierin offenbart sind, durchzuführen. Ein oder mehrere der Software-Module, welche hierin offenbart sind, können in einer Wolke-Rechen-Umgebung (cloud computing environment) implementiert sein. Wolke-Rechen-Umgebungen können verschiedene Dienste und Anwendungen über das Internet bereitstellen. Diese Wolke-basierten Dienste (z. B. Software als ein Dienst, Plattform als ein Dienst, Infrastruktur als ein Dienst) können durch einen Web-Browser oder eine andere entfernte Schnittstelle zugreifbar sein. Verschiedene Funktionen, welche hierin beschrieben sind, können durch eine entfernter-Schreibtisch-Umgebung oder irgendeine andere Wolke-basierte Rechen-Umgebung bereitgestellt sein.While various embodiments have been described and / or illustrated herein in the context of fully functional computer systems, one or more of these example embodiments may be distributed as a program product in a variety of forms, regardless of the particular type of computer-readable media, which are used to actually execute the distribution. The embodiments disclosed herein may also be implemented using software modules that perform certain tasks. These software modules may include script, batch, or other executable files that may be stored on a computer-readable storage medium or in a computing system. These software modules may configure a computer system to perform one or more of the example embodiments disclosed herein. One or more of the software modules disclosed herein may be implemented in a cloud computing environment. Cloud computing environments can provide various services and applications over the Internet. These cloud-based services (eg, software as a service, platform as a service, infrastructure as a service) may be accessible through a web browser or other remote interface. Various functions described herein may be provided by a remote desktop environment or any other cloud-based computing environment.

Für den Zweck einer Erläuterung ist die vorangehende Beschreibung mit Bezug auf spezifische Ausführungsformen beschrieben worden. Die obigen illustrativen Diskussionen sind jedoch nicht beabsichtigt, erschöpfend zu sein oder die Erfindung auf die präzisen offenbarten Formen zu begrenzen. Viele Modifikationen und Variationen sind in Anbetracht der obigen Offenbarung möglich. Die Ausführungsformen wurden ausgewählt und beschrieben, um am Besten die Prinzipien der Erfindung zu erläutern und ihre praktische Anwendungen zu erläutern, um dadurch die Fachleute in der Technik in die Lage zu versetzen, die Erfindung und verschiedene Ausführungsformen mit verschiedenen Modifikationen, wie sie für die bestimmte in Betracht gezogene Benutzung geeignet sind, zu benutzen.For the purpose of explanation, the foregoing description has been described with reference to specific embodiments. The above illustrative discussions, however, are not intended to be exhaustive or to limit the invention to the precise forms disclosed. Many modifications and variations are possible in light of the above disclosure. The embodiments have been chosen and described to best explain the principles of the invention and to explain its practical applications, thereby enabling those skilled in the art to embody the invention and various embodiments with various modifications as may be intended are considered suitable for use.

Ausführungsformen gemäß der Erfindung sind somit beschrieben. Während die vorliegende Offenbarung in bestimmten Ausführungsformen beschrieben worden ist, sollte es geschätzt werden, dass die Erfindung nicht aufgefasst werden sollte, mittels solcher Ausführungsformen begrenzt zu sein, sondern stattdessen gemäß der Ansprüche unten aufgefasst werden sollte.Embodiments according to the invention are thus described. While the present disclosure has been described in particular embodiments, it should be appreciated that the invention should not be construed to be limited by such embodiments, but instead should be construed according to the claims below.

Claims (20)

Verfahren eines Erzeugens einer ausführbaren Datei, wobei das Verfahren aufweist: Kompilieren eines ersten Teils von Programm-Code und eines zweiten Teils von Programm-Code, welcher aus einer Mehrzahl von verschiedenen Quell-Dateien zugegriffen ist, wobei der erste Teil Anweisungen aufweist, welche mittels einer Zentral-Verarbeitungs-Einheit (CPU) auszuführen sind, und wobei der zweite Teil von Code Anweisungen aufweist, welche ausschließlich mittels einer Grafik-Verarbeitungs-Einheit (GPU) auszuführen sind; Zusammen-Linken des ersten Teils von Code, kompiliert, um einen gelinkten ersten Teil von Code zu erzeugen; Zusammen-Linken des zweiten Teils von Code, kompiliert, um einen gelinkten zweiten Teil von Code zu erzeugen; und Erzeugen der ausführbaren Datei, wobei die ausführbare Datei eine ausführbare Form des gelinkten ersten Teils von Code und des gelinkten zweiten Teils von Code aufweist.A method of generating an executable file, the method comprising: compiling a first portion of program code and a second portion of program code accessed from a plurality of different source files, the first portion having instructions using a central processing unit (CPU), and wherein the second part of code having instructions to be executed exclusively by means of a graphics processing unit (GPU); Co-linking the first part of code, compiled to produce a linked first part of code; Co-linking the second part of code, compiled to produce a linked second part of code; and generating the executable file, the executable file having an executable form of the linked first portion of code and the linked second portion of code. Verfahren gemäß Anspruch 1, wobei das Kompilieren ferner aufweist separates Kompilieren des ersten Teils und des zweiten Teils von Code.The method of claim 1, wherein the compiling further comprises separately compiling the first part and the second part of code. Verfahren gemäß Anspruch 2, wobei das Kompilieren ferner aufweist Erzeugen einer analogen kodierten Entität, wobei der erste Teil von Code operabel ist, auf Daten von dem zweiten Teil von Code unter Benutzung der analogen kodierten Entität zuzugreifen.The method of claim 2, wherein compiling further comprises generating an analog coded entity, wherein the first portion of code is operable to access data from the second portion of code using the analog coded entity. Verfahren gemäß Anspruch 1, wobei der zweite Teil von Code in einer Version von Compute-Unified-Device-Architecture-programming-langvage (CUDA) geschrieben ist.The method of claim 1, wherein the second part of code is written in a version of compute-unified-device-architecture-programming-langvage (CUDA). Verfahren gemäß Anspruch 1, wobei das Zusammen-Linken des zweiten Teils von Code ferner aufweist Erzeugen einer Schale-Host-Objekt-Datei und Einbetten des gelinkten zweiten Teils von Code innerhalb der Schale-Host-Objekt-Datei.The method of claim 1, wherein concatenating the second portion of code further comprises creating a shell host object file and embedding the linked second portion of code within the shell host object file. Verfahren gemäß Anspruch 1, wobei das Zusammen-Linken des zweiten Teils von Code ferner aufweist Unterscheiden von kodierten Objekten, welche innerhalb des zweiten Teils von Code eingebettet sind, welche einen gemeinsamen Namen teilen.The method of claim 1, wherein the merging of the second part of code further comprises distinguishing coded objects embedded within the second part of code which share a common name. Verfahren gemäß Anspruch 6, wobei das Unterscheiden von kodierten Objekten ferner aufweist Erzeugen eines eindeutigen Identifikators für die kodierten Objekte, welche einen gemeinsamen Namen teilen.The method of claim 6, wherein distinguishing coded objects further comprises generating a unique identifier for the coded objects sharing a common name. System zum Erstellen einer ausführbaren Datei, wobei das System aufweist: einen ersten Compiler zum Kompilieren eines ersten Teils von Code, welcher aus einer Mehrzahl von verschiedenen Quell-Dateien empfangen ist, wobei der erste Teil Anweisungen aufweist, welche mittels einer Zentral-Verarbeitungs-Einheit (CPU) auszuführen sind; einen zweiten Compiler zum Kompilieren eines zweiten Teils von Code, welcher aus der Mehrzahl von verschiedenen Quell-Dateien empfangen ist, wobei der zweite Teil von Code Anweisungen aufweist, welche ausschließlich mittels einer Grafik-Verarbeitungs-Einheit (GPU) auszuführen sind; ein erstes Link-Modul zum Zusammen-Linken des ersten Teils von Code, kompiliert, um einen gelinkten ersten Teil von Code zu erzeugen; ein zweites Link-Modul zum Zusammen-Linken des zweiten Teils von Code, kompiliert, um einen gelinkten zweiten Teil von Code zu erzeugen; und ein ausführbare-Datei-Erzeugungs-Modul zum Erzeugen der ausführbaren Datei, wobei die ausführbare Datei eine ausführbare Form des gelinkten ersten Teils von Code und des gelinkten zweiten Teils von Code aufweist.A system for building an executable file, the system comprising: a first compiler for compiling a first portion of code received from a plurality of different source files, the first portion having instructions provided by a central processing unit (CPU) are to be executed; a second compiler for compiling a second portion of code received from the plurality of different source files, the second portion of code having instructions to be executed solely by means of a graphics processing unit (GPU); a first link module for linking together the first part of code, compiled to produce a linked first part of code; a second link module for linking the second part of code together to compose a linked second part of code; and an executable file creation module for generating the executable file, the executable file having an executable form of the linked first portion of code and the linked second portion of code. System gemäß Anspruch 8, wobei der erste Compiler und der zweite Compiler ferner operabel sind, den ersten Teil und den zweiten Teil von Code unabhängig zu kompilieren.The system of claim 8, wherein the first compiler and the second compiler are further operable to independently compile the first part and the second part of code. System gemäß Anspruch 9, wobei der zweite Compiler ferner operabel ist, eine analoge kodierte Entität zu interpretieren, wobei der erste Teil von Code operabel ist, auf Daten von dem zweiten Teil von Code unter Benutzung der analogen kodierten Entität zuzugreifen.The system of claim 9, wherein the second compiler is further operable to interpret an analog coded entity, wherein the first portion of code is operable to access data from the second portion of code using the analog coded entity. System gemäß Anspruch 8, wobei der zweite Teil von Code in einer Version einer Compute-Unified-Device-Architecture-programming-language (CUDA) geschrieben ist.The system of claim 8, wherein the second part of code is written in a version of a compute unified device architecture programming language (CUDA). System gemäß Anspruch 8, wobei das zweite Link-Modul ferner operabel ist, eine Schale-Host-Objekt-Datei zu erzeugen, wobei der gelinkte zweite Teil von Code innerhalb der Schale-Host-Objekt-Datei eingebettet ist.The system of claim 8, wherein the second link module is further operable to generate a shell host object file, wherein the linked second portion of code is embedded within the shell host object file. System gemäß Anspruch 8, wobei das zweite Link-Modul ferner operabel ist, kodierte Objekte zu unterscheiden, welche innerhalb des zweiten Teils von Code eingebettet sind, welche einen gemeinsamen Namen teilen.The system of claim 8, wherein the second link module is further operable to distinguish encoded objects embedded within the second portion of code sharing a common name. System gemäß Anspruch 8, wobei das zweite Link-Modul ferner operabel ist, einen eindeutigen Identifikator für die kodierten Objekte zu erzeugen, welche den gemeinsamen Namen teilen.The system of claim 8, wherein the second link module is further operable to generate a unique identifier for the encoded objects that share the common name. Computer-implementiertes Verfahren eines Erzeugens einer ausführbaren Datei, wobei das Verfahren aufweist: Extrahieren eines Geräte-Code-Teils aus einem Nicht-Geräte-Code-Teil, welcher von einer Mehrzahl von verschiedenen Quell-Dateien empfangen ist, wobei der Geräte-Code-Teil Anweisungen aufweist, welche ausschließlich mittels einer Grafik-Verarbeitungs-Einheit (GPU) auszuführen sind; Linken des Geräte-Code-Teils separat von dem Nicht-Geräte-Code-Teil unter Benutzung eines separaten Link-Prozesses, um einen gelinkten Teil von Geräte-Code zu erzeugen; und Erzeugen der ausführbaren Datei, wobei die ausführbare Datei eine ausführbare Form des gelinkten Teils von Geräte-Code und des Nicht-Geräte-Code-Teils aufweist.A computer-implemented method of generating an executable file, the method comprising: extracting a device code portion from a non-device code portion received from a plurality of different source files, the device code portion comprising: Part instructions to be executed only by means of a graphics processing unit (GPU); Linking the device code part separately from the non-device code part using a separate link process to generate a linked part of device code; and generating the executable file, the executable file having an executable form of the linked portion of the device code and the non-device code portion. Verfahren gemäß Anspruch 15, wobei das Extrahieren ferner aufweist Kompilieren des Geräte-Code-Teils separat von dem Nicht-Geräte-Code-Teil. The method of claim 15, wherein extracting further comprises compiling the device code portion separately from the non-device code portion. Verfahren gemäß Anspruch 16, wobei das Kompilieren ferner aufweist Erzeugen einer analogen kodierten Entität, wobei der Nicht-Geräte-Code-Teil operabel ist, auf Daten von dem Geräte-Code-Teil unter Benutzung der analogen kodierten Entität zuzugreifen.The method of claim 16, wherein compiling further comprises generating an analog coded entity, wherein the non-device code portion is operable to access data from the device code portion using the analog coded entity. Verfahren gemäß Anspruch 15, wobei der Geräte-Code-Teil in einer Version einer Compute-Unified-Device-Architecture-programming-language (CUDA) geschrieben ist.The method of claim 15, wherein the device code portion is written in a version of a Compute Unified Device Architecture Programming Language (CUDA). Verfahren gemäß Anspruch 15, wobei das Linken ferner aufweist Erzeugen einer Schale-Host-Objekt-Datei und Einbetten des gelinkten Teils von Geräte-Code innerhalb der Schale-Host-Objekt-Datei.The method of claim 15, wherein the linking further comprises generating a shell host object file and embedding the linked portion of device code within the shell host object file. Verfahren gemäß Anspruch 15, wobei das Linken ferner aufweist Unterscheiden von kodierten Objekten, welche innerhalb des Geräte-Code-Teils eingebettet sind, welche einen gemeinsamen Namen teilen.The method of claim 15, wherein the linking further comprises distinguishing coded objects embedded within the device code portion sharing a common name.
DE201310208418 2012-05-09 2013-05-07 Method for producing executable data file in computer system, involves linking compiled device codes and host codes to generate linked device code and linked host code that are used for producing executable data file Pending DE102013208418A1 (en)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201261644956P 2012-05-09 2012-05-09
US61/644,956 2012-05-09
US13/850,207 2013-03-25
US13/850,207 US9483235B2 (en) 2012-05-09 2013-03-25 Method and system for separate compilation of device code embedded in host code

Publications (1)

Publication Number Publication Date
DE102013208418A1 true DE102013208418A1 (en) 2013-11-14

Family

ID=49475715

Family Applications (1)

Application Number Title Priority Date Filing Date
DE201310208418 Pending DE102013208418A1 (en) 2012-05-09 2013-05-07 Method for producing executable data file in computer system, involves linking compiled device codes and host codes to generate linked device code and linked host code that are used for producing executable data file

Country Status (2)

Country Link
CN (1) CN103389908A (en)
DE (1) DE102013208418A1 (en)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10241761B2 (en) * 2014-12-29 2019-03-26 Nvidia Corporation System and method for compiler support for compile time customization of code
CN105426226B (en) * 2015-11-24 2018-07-06 无锡江南计算技术研究所 A kind of compiling of isomery code fusion and generation method
CA2974556C (en) * 2016-08-25 2018-06-05 Sas Institute Inc. Compilation for node device gpu-based parallel processing
US10102015B1 (en) 2017-06-22 2018-10-16 Microsoft Technology Licensing, Llc Just in time GPU executed program cross compilation
US10241766B2 (en) 2017-06-22 2019-03-26 Microsoft Technology Licensing, Llc Application binary interface cross compilation
US10657698B2 (en) 2017-06-22 2020-05-19 Microsoft Technology Licensing, Llc Texture value patch used in GPU-executed program sequence cross-compilation
US10289393B2 (en) 2017-06-22 2019-05-14 Microsoft Technology Licensing, Llc GPU-executed program sequence cross-compilation

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080109795A1 (en) * 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
US20100153934A1 (en) * 2008-12-12 2010-06-17 Peter Lachner Prefetch for systems with heterogeneous architectures
CN102741828B (en) * 2009-10-30 2015-12-09 英特尔公司 To the two-way communication support of the heterogeneous processor of computer platform
US8756590B2 (en) * 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
CN101937343A (en) * 2010-09-17 2011-01-05 上海交通大学 Method for realizing rear-end translation framework of heterogeneous multi-core virtual execution environment

Also Published As

Publication number Publication date
CN103389908A (en) 2013-11-13

Similar Documents

Publication Publication Date Title
DE102013208418A1 (en) Method for producing executable data file in computer system, involves linking compiled device codes and host codes to generate linked device code and linked host code that are used for producing executable data file
DE112012000214T5 (en) Technique for inter-procedural memory address space optimization in GPU computing compiler
DE102008005515A1 (en) Virtual architecture and virtual instruction set for the calculation of parallel instruction sequences
DE60223990T2 (en) System for executing intermediate code, method for executing intermediate code, and computer program product for executing intermediate code
DE60002327T2 (en) DERIVING OPERAND TYPES WITHIN A INTERMEDIATE LANGUAGE
DE102015112202A1 (en) Combining paths
DE102005021749A1 (en) Program-controlled information processing method, involves initiating information processing operations in selected resources, and disconnecting connections that are no longer needed between selected resources
DE102013208041A1 (en) Server-based graphics processing techniques
DE112014002771T5 (en) Hybrid-on-demand graphics translation table shadowing
DE102013006396A1 (en) A GRAPHIC PROCESSING UNIT USING A STANDARD PROCESSING UNIT AND A PROCESS FOR BUILDING A GRAPHIC PROCESSING UNIT
DE102015122908A1 (en) System and method for compiler support for code compile-time adaptation
DE112022003222T5 (en) MULTI-ARCHITECTURE EXECUTION GRAPHS
DE102020130524A1 (en) SYSTEM, DEVICE AND METHOD FOR DYNAMIC TRACKING IN A SYSTEM WITH ONE OR MORE VIRTUALIZATION ENVIRONMENTS
DE102013208560A1 (en) Method for generating executable data file in compiler e.g. CPU for heterogeneous environment, involves generating executable data file comprising executable form from both host code portions and unique linked apparatus code portions
DE102023101893A1 (en) GRAPH-BASED STORAGE
DE102022131530A1 (en) METHOD OF MODIFYING GRAPH CODE
DE112022003546T5 (en) APPLICATION PROGRAMMING INTERFACE THAT CAUSES A GRAPH CODE TO UPDATE A SEMAPHOR
DE112022000425T5 (en) SIMULTANEOUS CODE INTRODUCTION
DE112022001917T5 (en) SYNCHRONIZING A GRAPH EXECUTION
DE102022114509A1 (en) MEMORY ALLOCATION USING GRAPHICS
DE102022112459A1 (en) TECHNIQUES FOR EFFICIENTLY SYNCHRONIZING MULTIPLE PROGRAM THREADS
DE102015001699B4 (en) Connected component labeling for graphics processors
DE112020003634T5 (en) AUTOMATIC VERIFICATION OF HIGH LEVEL CONSTRUCT OPTIMIZATION USING CHECK VECTORS
DE102023128545A1 (en) APPLICATION PROGRAMMING INTERFACE FOR SPECIFYING OPERATIONS
DE102005056186B4 (en) Control of computational processes

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