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

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
Grant status
Application
Patent type
Prior art keywords
code
portion
device
host
linked
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

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time

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 ERFINDUNG FIELD 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 (GPUs) and compilers for heterogeneous environments generally relate to graphics processing units (z. B. GPU and CPU).
  • HINTERGRUND DER ERFINDUNG BACKGROUND 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). Software executable files are typically generated by compiling of separate host objects, each host object a corresponding portion of source code or host code includes (for. Example, in a high-level language such as C, C ++ written etc.). Die ausführbare Datei, welche mittels des Compilers erzeugt ist, umfasst Objekt-Code, welcher mittels einer Zentral-Verarbeitungs-Einheit (CPU) ausgeführt werden kann. The executable file, which is generated by the compiler includes object code, which by means of a central processing unit (CPU) can be performed. 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. Recently, host systems have including a CPU and a graphics processing unit (GPU) begun to take advantage of the parallel processing capability of the GPU to perform tasks that would otherwise be performed by the CPU. Die GPU führt Geräte-Code aus, wogegen die CPU Host-Code ausführt. The GPU performs device code, whereas the CPU host code executes. Der Geräte-Code ist typischerweise in dem Host-Code als eine einzelne Datei eingebettet, um somit eine heterogene Compiler-Umgebung zu erzeugen. The device code is typically embedded in the host code as a single file, thereby producing a heterogeneous compiler environment.
  • Konventionelle Host-Linker oder -Compiler erzeugen eine ausführbare Datei von mehreren Host-Objekten. Conventional host linker or compiler generate an executable file from multiple host objects. 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. However, these conventional host-linkers are not able, device code, which is embedded in a plurality of host objects to the left or to verinken, and therefore require that any device code is embedded in a single host object. 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. For example, conventional host linkers can an executable file from a first host object which includes only host code (for execution by the CPU), and a second host object which host code (for execution by the CPU) and device code includes (for execution by the GPU), generate. 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. However, conventional host-linkers are not able to generate an executable file from a plurality of host objects, each corresponding host code includes (for execution by the CPU) and the corresponding device code (for execution by the GPU), as the conventional host-linkers are not capable of the corresponding device code, which is embedded in each of the host objects to connect properly to left and.
  • ZUSAMMENFASSUNG DER ERFINDUNG SUMMARY 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. Accordingly, a need exists to create executable files from a plurality of host objects which include appropriate host code and corresponding device codes. 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. Embodiments of the present invention, a new solution provide that supports the separate compilation of host code and device code, which are used in a heterogeneous programming environment. 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. Embodiments of the present invention are operable to, which is embedded within multiple host object files device code, left using a separate device link surgery. 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. Embodiments of the present invention device code can extract from their respective host object files together and then left to form the linked device code. 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. This gelinkte device code can be embedded back into a host object then that is generated by means of embodiments of the present invention, which can be passed to a host or linker happens then, to form a host executable. 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. As such, device code can be separated into multiple files, and then be linked together to form a final executable file by means of embodiments of the present invention.
  • Insbesondere ist in einer Ausführungsform die vorliegende Erfindung als ein Verfahren zum Erzeugen einer ausführbaren Datei implementiert. In particular, in one embodiment the present invention is implemented as a method for generating an executable file. 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. The method comprises compiling a first portion of program code and a second portion of program code which consists of or is accessed by a plurality of different source files, wherein the first portion comprising instructions, which by means of a central processing unit (CPU) to be executed, and wherein the second portion of code comprises instructions, which solely by means of a graphics processing code (GPU) to be executed. 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 one embodiment, the second portion of code in a version of a computing device unifiziertes architecture programming language (Compute Unified Device Architecture programming language) (CUDA) is written. In einer Ausführungsform umfasst das Verfahren eines Kompilierens ferner ein separates Kompilieren des ersten Teils und des zweiten Teils von Code. In one embodiment, the method of compiling further comprises a separate compilation of 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. In one embodiment, the method of compiling further comprises generating an analog encoded entity (analogous coded entity), the first part of the code is operable to access data from the second portion of code by use of the analog encoded entity. Das Verfahren umfasst auch Zusammenlinken des ersten Teils von Code, welcher kompiliert ist, um einen verlinkten ersten Teil von Code zu erzeugen. The method also includes Along the left of the first portion of code, which is compiled to generate a first part of the linked code. Das Verfahren umfasst auch Zusammenlinken des zweiten Teils von Code, welcher kompiliert ist, um einen verlinkten zweiten Teil von Code zu erzeugen. The method also includes Along the left of the second portion of code, which is compiled to create a linked part of the second code. 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 cooperation Linkens of the second portion of code further comprises generating a shell host object file (shell host object file) and embedding the linked second portion 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 one embodiment, the method of cooperation Linkens of the second portion of code further comprises a discriminating coded objects, which are embedded within the second portion of code, which share a common name or share. 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. In one embodiment, the method of discriminating encoded objects further comprises generating a unique identifier for the encoded objects which share a common name. 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. The method further comprises generating the executable file to which the executable file comprises an executable form of the linked portion of the first code and the second part of the linked code.
  • In einer Ausführungsform ist die vorliegende Erfindung in einem System zum Erstellen einer ausführbaren Datei implementiert. In one embodiment, the present invention in a system to create an executable file is implemented. 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. The system includes a first compiler for compiling a first portion of code, which is received from a plurality of different source files, wherein the first portion comprising instructions, which by means of a central processing unit (CPU) are carried out. 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. The system also includes a second compiler to compile a second portion of code, which is received from the plurality of different source files, wherein the second portion of code comprises instructions to perform which exclusively by means of a graphics processing unit (GPU) are , In einer Ausführungsform ist der zweite Teil von Code in einer Version einer Rechen-Unifiziertes-Gerät-Architektur-Programmier-Sprache (CUDA) geschrieben. In one embodiment, the second portion of code in a version of a computing device Unifiziertes architecture programming language (CUDA) is written. 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 one embodiment, the first and the second compiler compiler is further operable to compile the first part and the second part of code independent. 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, second compiler is further operable to interpret an analog encoded entity, wherein the first portion of code is operable to access data from the second portion of code using the analog encoded 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. The system comprises a first link module for combining the left of the first portion of code, which is compiled to generate a first part of the linked code. 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. The system comprises a second link module for combining the left of the second portion of code, which is compiled to create a linked part of the second code. 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 one embodiment, the second link module is further operable to generate a shell host object file, wherein the second part of gelinkte code is embedded within the shell host object file. 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 one embodiment, the second link module is further operable coded objects, which are embedded within the second portion of code, which share a common name to distinguish. 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. In one embodiment, the second link module is further operable to generate a unique identifier for the encoded objects which share a common name. 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 also includes an executable file generating module for generating the executable file, the executable file comprises an executable form of the linked portion of the first code and the second part of the linked code.
  • In einer Ausführungsform ist die vorliegende Erfindung als ein Computer-implementiertes Verfahren zum Erzeugen einer ausführbaren Datei implementiert. In one embodiment, the present invention is implemented as a computer-implemented method for generating an executable file. 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. The method includes extracting a device code portion from a non-device-code portion, which is received from a plurality of different source files, wherein the device code portion comprising instructions, which solely by means of a Graphics Processing unit (GPU) to be executed. 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 device code-part in a version of a computing device Unifiziertes architecture programming language (CUDA) is written.
  • 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 one embodiment the method of extracting further comprises compiling the device code portion separately from the non-device code part. 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. 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. 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. The method comprises the left of the device code portion separately from the non-device code portion using a separate link process to produce a linked part of the device code. 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 Linkens further comprises generating 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 one embodiment, the method of Linkens further comprises a discriminating coded objects, which are embedded within the device code portion, which share a common name. 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. In one embodiment, the method of discriminating encoded objects further comprises generating a unique identifier for the encoded objects which share a common name. 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. The method also includes generating the executable file, the executable file comprises 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 into this specification and form a part of this specification and in which like reference numerals denote like elements, illustrate embodiments of the present disclosure and together with the description serve to explain the principles of the disclosure.
  • 1A 1A ist ein Blockdiagramm eines beispielhaften Link-Prozesses in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung. is a block diagram of an exemplary link process in accordance with embodiments of the present invention.
  • 1B 1B ist ein Blockdiagramm eines beispielhaften Kompilierungs-Prozesses in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung. is a block diagram of an exemplary compilation process in accordance with embodiments of the present invention.
  • 1C 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. provides an illustration of an exemplary memory allocation table or data structure which is used to host code Shadow entities (host code shadow entities) mapped to their corresponding device code entities, in accordance with the embodiments present invention.
  • 1D 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. is a block diagram of an exemplary computer system platform, which is used to perform link and compilation operations in accordance with embodiments of the present invention.
  • 2 2 zeigt ein Flussdiagramm eines beispielhaften Kompilierungs-Prozesses in Übereinstimmung mit verschiedenen Ausführungsformen der vorliegenden Erfindung. shows a flow diagram of an exemplary compilation process in accordance with various embodiments of the present invention.
  • 3 3 zeigt ein Flussdiagramm eines beispielhaften Schatten-Entität-Erzeugungs-Prozesses in Übereinstimmung mit verschiedenen Ausführungsformen der vorliegenden Erfindung. shows a flow diagram of an exemplary shadow entity generation process in accordance with various embodiments of the present invention.
  • 4 4 ist ein Blockdiagramm von einem anderen beispielhaften Kompilierungs-Prozess in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung. is a block diagram of another exemplary compilation process in accordance with embodiments of the present invention.
  • 5 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. provides an illustration of an exemplary table or data structure which is used, device code track (track) which is used in the previous link operation, in accordance with embodiments of the present invention.
  • 6 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. shows a flow diagram of an exemplary compilation process to produce multiple embedded devices links in accordance with various embodiments of the present invention.
  • DETAILLIERTE BESCHREIBUNG DETAILED 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. Referring to the various embodiments of the present disclosure in detail reference, examples of which are illustrated in the accompanying drawings. 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. While they are described in connection with this embodiment, it will be understood that they are not intended to limit the disclosure to these embodiments. 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. On the contrary, the disclosure is intended to cover alternatives, modifications, and equivalents which may be included within the spirit and the scope of the disclosure as defined by the appended claims. Ferner werden in der folgenden detaillierten Beschreibung der vorliegenden Offenbarung zahlreiche spezifische Details ausgeführt, um ein durchgängiges Verständnis der Offenbarung bereitzustellen. Furthermore, in the following detailed description of the present disclosure, numerous specific details are set forth to provide a thorough understanding of the disclosure. Es wird jedoch verstanden werden, dass die vorliegende Offenbarung ohne diese spezifischen Details praktiziert werden kann. It will be understood, however, that the present disclosure may be practiced without these specific details. 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. In other instances, well known methods, procedures, components and circuits have not been well described in detail in order 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. Portions of the detailed description which follows are presented in terms of a process and discussed. Obwohl Operationen und eine Abfolge davon in einer Figur hierin offenbart sind (z. B. Although operations and a sequence thereof are disclosed in a figure herein (z. B. 2 2 , . 3 3 und and 6 6 ), welche exemplarische Operationen dieses Prozesses beschreiben, sind solche Operationen und Abfolge exemplarisch. ) Describing exemplary operations of this process, and such operations are exemplary sequence. 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. Embodiments are well suited to performing various other operations or variations of the recited in the flowchart of FIG herein operations and in a sequence or sequence which is illustrated and described herein is of the different.
  • 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. As used in this application, the terms control module system and the like intended to refer to a computer-related entity, in particular, either hardware, firmware, a combination of hardware and software, software, or software in execution. 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. For example, a module can be, but is not limited to, a process that runs on a processor, an integrated circuit, an object, an executable (file), a thread of execution, a program, and / or a computer. Zu Illustrations-Zwecken kann sowohl eine Anwendung, welche auf einem Rechen-Gerät abläuft, und das Rechen-Gerät ein Modul sein. For illustration purposes, both an application which runs on a computing device and the computing device can be a module. 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. One or more modules may be located within a process and / or thread of execution and a component may be localized on one computer and / or between two or more computers may be distributed. Zusätzlich können diese Module von verschiedenen Computerlesbaren Medien ausgeführt werden, welche verschiedene Daten-Strukturen darin bzw. darauf gespeichert haben. In addition, these modules may be executed by various computer readable media having various data structures stored in it or have it.
  • Mit Bezug auf Regarding 1A 1A kann kompilierter Host-Code (z. B. kompilierter Host-Code can host compiled code (eg. as compiled host code 112 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. ) Be a set of instructions which (using a human-readable computer language medium z. B. C, C ++, FORTRAN) are written and are able (by means of a micro-processor z. B. CPU) be executed. Zusätzlich kann kompilierter Geräte-Code (z. B. kompilierter Geräte-Code Additionally compiled device code (eg. As compiled device code 114 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. ) Be a set of instructions, which are using a human-readable computer language medium (z. B. Compute Unified Device Architecture (CUDA)) is written and are able (by means of a graphics processor unit z. B. GPU) to be executed. 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. Both host compiled code and compiled device code can be changeable or umlokalierbar (re-locatable) and be able to be embedded in a host object file. Auch können Host-Objekt-Dateien (z. B. Host-Objekt Also host object files can (z. B. Host object 110 110 ) Behälter-Dateien sein, welche umlokalisierbaren Maschinen-Code speichern (z. B. kompilierten Host-Code be) container files that store umlokalisierbaren machine code (eg. as compiled host code 112 112 und kompilierten Geräte-Code and compiled device code 114 114 von Host-Objekt Host object 110 110 ), welcher unter Benutzung eines Compilers erzeugt ist und in der Lage ist, als Eingabe in ein Linker-Programm (z. B. Host-Linker ) Which is generated using a compiler and is capable (as input to a linker program z. B. Host linker 150 150 und Geräte-Linker and Device Linker 130 130 ) benutzt zu werden. ) To be used.
  • Geräte-Linker Device Linker 130 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. may be implemented as a set of instructions, which device code of one or receives more object files as input and produces a different host object file to include the linked device code. Host-Linker Host Linker 150 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. may be implemented as a set of instructions, which object code of one or receives a plurality of object files as input and a resulting executable image or a divisible (shareable) object file outputs, which for additional linking with other host object files can be used. Gemäß einer Ausführungsform kann der Host-Linker According to one embodiment, the host linker may 150 150 in der Lage sein, Ausgabe von dem Geräte-Linker be able to output from the Device Left 130 130 als Eingabe zu empfangen, wenn er Link-Operationen durchführt. to receive as input when it performs the link operations. Gemäß einer Ausführungsform kann Geräte-Linker According to one embodiment, device-linker 130 130 Link-Operationen auf Geräte-Code vor der Ausführung von Host-Linker Link operations on device code prior to execution of host Left 150 150 durchführen. carry out. Gemäß einer Ausführungsform der vorliegenden Erfindung kann Host-Linker According to one embodiment of the present invention may host linker 150 150 Link-Operationen auf Objekt-Dateien vor der Ausführung von Geräte-Linker Link operations on object files before running Device Linker 130 130 durchführen. carry out.
  • Wie mittels der in As shown by the in 1A 1A gezeigten Ausführungsform illustriert ist, können Geräte-Linker Embodiment shown is illustrated devices can linker 130 130 und Host-Linker and host Left 150 150 in Kombination benutzt werden, um eine ausführbare Datei von mehreren Host-Objekten zu erzeugen, wobei jedes entsprechenden Geräte-Code umfasst. be used in combination to create an executable file from a plurality of host objects, each corresponding device code comprises. Zum Beispiel kann Host-Objekt For example, host object 110 110 kompilierten Host-Code compiled host code 112 112 und kompilierten Geräte-Code and compiled device code 114 114 umfassen, wohingegen Host-Objekt comprise, whereas host object 120 120 kompilierten Host-Code compiled host code 122 122 und kompilierten Geräte-Code and compiled device code 124 124 umfassen kann. may comprise. Gemäß einer Ausführungsform kann Geräte-Linker According to one embodiment, device-linker 130 130 Link-Operationen auf denselben Objekt-Dateien wie Host-Linker Link operations on the same object files as host Left 150 150 durchführen (z. B. Host-Objekt perform (z. B. Host object 110 110 und Host-Objekt and host object 120 120 ). ). Als solches kann Geräte-Linker As such devices linker 130 130 kompilierten Geräte-Code compiled device code 114 114 und kompilierten Geräte-Code and compiled device code 124 124 linken, um gelinkten Geräte-Code left to the linked device code 145 145 zu erzeugen. to create. In einer Ausführungsform kann der gelinkte Geräte-Code In one embodiment, the gelinkte device code 145 145 in Host-Objekt in host object 140 140 eingebettet werden, wo Host-Objekt be embedded, where host object 140 140 ein „Dummy”-Host-Objekt oder „Schale” sein kann. a "dummy" host object or "shell" may be.
  • Host-Linker Host Linker 150 150 kann eine ausführbare Datei can an executable file 160 160 als ein Ergebnis eines Linkens von Host-Objekt as a result of Linkens of host object 110 110 (z. B. einschließlich kompilierter Host-Code (Z. B. including compiled host code 112 112 ), Host-Objekt ), Host object 120 120 (z. B. einschließlich kompilierter Host-Code (Z. B. including compiled host code 122 122 ) und Host-Objekt ) And host object 140 140 (z. B. einschließlich gelinkter Geräte-Code (Z. B. including linked external device code 145 145 ) erzeugen. ) produce. Ausführbare Datei executable 160 160 kann gelinkten Geräte-Code can linked device code 145 145 und gelinkten Host-Code and linked host code 165 165 umfassen. include. In einer Ausführungsform kann gelinkter Host-Code In one embodiment of linked host code 165 165 mittels oder in Antwort auf ein Linken von Host-Code means or in response to a left of host code 112 112 und kompiliertem Host-Code and compiled host code 122 122 erzeugt werden. be generated.
  • In einer Ausführungsform kann Host-Linker In one embodiment, host Left 150 150 kompilierten Geräte-Code (z. B. Device compiled code (z. B. 114 114 , . 124 124 , etc.) und/oder gelinkten Geräte-Code (z. B. , Etc.) and / or the linked device code (z. B. 145 145 ) als einen Daten-Abschnitt behandeln, wenn Link-Operationen durchgeführt werden. treat) as a data section when link operations are performed. Gemäß einer Ausführungsform kann Host-Linker According to one embodiment, host linker 150 150 kompilierten Geräte-Code (z. B. Device compiled code (z. B. 114 114 , . 124 124 , etc.) und/oder gelinkten Geräte-Code (z. B. , Etc.) and / or the linked device code (z. B. 145 145 ) während eines Linkens von kompiliertem Host-Code (z. B. ) (Compiled by host code during a Linkens z. B. 112 112 , . 114 114 , etc.) oder Host-Objekten (z. B. , Etc.) or host objects (z. B. 110 110 , . 120 120 , . 140 140 , etc.) ignorieren. etc. ignore). In einer Ausführungsform kann kompilierter Geräte-Code In one embodiment, compiled device code 114 114 und kompilierter Geräte-Code and compiled device code 124 124 umlokalisierbarer Geräte-Code sein oder umlokalisierbaren Geräte-Code umfassen. include its umlokalisierbarer device code or umlokalisierbaren device code. Zusätzlich kann gemäß einer Ausführungsform der gelinkte Geräte-Code In addition, according to an embodiment of the device code gelinkte 145 145 ausführbarer Geräte-Code sein oder ausführbaren Geräte-Code umfassen. comprise devices be executable code or executable code devices.
  • 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. Embodiments of the present invention can make use of the host-code part of a program in the device code part of a program of a plurality of device code-entry points ( "kernel"). 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). In certain scenarios, these entry points share the same executable code devices can (z. B. functions which are able to be executed in parallel). 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 As such, embodiments of the present invention host object files can initialize to access a common routine to access the linked device code (z. B. linked device code 145 145 ), welcher dann jedem Eintritts-Punkt erlauben kann, diesen gelinkten Geräte-Code zu referenzieren. ), Which can allow each entry point then to reference this linked device code. Auf diese Weise kann derselbe Satz von ausführbarem Geräte-Code noch für Host-Code zugreifbar sein, welcher erfordert, auf ihn zuzugreifen. In this way, the same set of executable device code may still be accessible to host code, which requires access to him.
  • 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. Further embodiments of the present invention, a visibility (visibility) between the host code and device code during a separate compilation can maintained so that devices entities (z. B. global functions, device, and constant variable, textures, finishes) which are located within the device codes, yet may be accessible to the host code. 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. For each device entry which is present within the device code can analogue or "shadow" -Entitäten within the host codes are generated, to allow the host code to get access to data from a corresponding entity device and collect data from a corresponding device entity. Gemäß einer Ausführungsform können diese Schatten-Entitäten während einer Prä-Kompilierungs-Phase erzeugt werden. According to one embodiment, this shadow entities may be generated during a pre-compilation phase.
  • Mit Bezug auf die in Referring to the in 1B 1B gezeigte Ausführungsform können z. Z embodiment shown can. B. Quell-Dateien B. source files 107 107 und and 108 108 jeweils unkompilierten Host-Code (z. B. each uncompiled host code (z. B. 112-1 112-1 bzw. or. 122-1 122-1 ) und unkompilierten Geräte-Code (z. B. ) And uncompiled device code (z. B. 114-1 114-1 bzw. or. 124-1 124-1 ) umfassen. ) Include. Unkompilierter Geräte-Code Uncompiled device code 114-1 114-1 kann Geräte-Entitäten Device can Entities 114-2 114-2 und and 114-3 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 include what may be coded as global functions or variables that for entities outside unkompiliertem device code 114-1 114-1 zugreifbar sind. are accessible. In Antwort auf jede dieser Geräte-Entitäten können entsprechende Schatten-Entitäten erzeugt werden und an Host-Compiler In response to each of these devices entities corresponding shadow entities can be created and to host Compiler 118 118 passiert werden. be passed.
  • Gemäß einer Ausführungsform können Schatten-Entitäten According to one embodiment, the shadow entities 112-2 112-2 und and 112-3 112-3 innerhalb von unkompiliertem Host-Code within unkompiliertem host code 112-1 112-1 erzeugt werden, um einen logischen Link zu Geräte-Entitäten are generated to a logical link to equipment entities 114-2 114-2 und and 114-3 114-3 (jeweils) von unkompiliertem Geräte-Code (Each) of unkompiliertem device code 114-1 114-1 aufrechtzuerhalten, bevor sie in Host-Compiler maintain before entering host compiler 118 118 gefüttert werden. to be fed. Zusätzlich können Schatten-Entitäten In addition, Shadow entities can 112-2 112-2 und and 112-3 112-3 derselbe Link-Typus wie der Geräte-Identität gegeben werden, welcher jede entspricht. the same link-type as the device identity are given corresponding to each. Wenn z. If z. B. Geräte-Entitäten B. Device entities 114-2 114-2 und and 114-3 114-3 als ein „statischer” Typ designiert wären, kann auch Schatten-Entitäten would be designated as a "static" type, can also shade entities 112-2 112-2 und and 112-3 112-3 ein „statischer” Typ gegeben werden. a "static" type will be given. In einer ähnlichen Weise können Schatten-Entitäten In a similar fashion shadow entities can 122-2 122-2 und and 122-3 122-3 von unkompiliertem Host-Code of unkompiliertem host code 122-1 122-1 in Entsprechung mit Geräte-Entitäten in correspondence with device entities 124-2 124-2 und and 124-3 124-3 (jeweils) von unkompiliertem Geräte-Code (Each) of unkompiliertem device code 124-1 124-1 in einer Weise erzeugt werden, welche oben diskutiert ist, bevor sie in Host-Compiler are generated in a manner discussed above, before entering host compiler 118 118 geführt bzw. gefüttert werden. be guided or fed. Ferner kann Geräte-Code-Compiler Furthermore, device code compiler 116 116 voranschreiten, unkompilierten Geräte-Code proceed, uncompiled device code 114-1 114-1 und and 124-1 124-1 zu kompilieren einschließlich der zuvor erwähnten Geräte-Entitäten. to compile, including the aforementioned device entities.
  • Zusätzlich zum Empfangen von unkompiliertem Host-Code In addition to receiving unkompiliertem host code 112-1 112-1 und and 122-1 122-1 kann Host-Code-Compiler can host code compiler 118 118 zusätzlich die resultierende Ausgabe empfangen, welche mittels des Geräte-Code-Compilers additionally receive the resultant output, which by means of the device code compiler 116 116 erzeugt ist, um Host-Objekte is generated to host objects 110 110 und and 120 120 zu erzeugen. to create. Als solches kann kompilierter Host-Code As such, compiled host code 112 112 Schatten-Entitäten Shadow entities 112-2 112-2 und and 112-3 112-3 empfangen, wohingegen kompilierter Host-Code receive, whereas compiled host code 122 122 Schatten-Entitäten Shadow entities 122-2 122-2 und and 122-3 122-3 empfangen kann. can receive. Demgemäß kann, auf eine Initialisierung und eine Ausführung hin, kompilierter Host-Code Accordingly, point to an initialization and execution, compiled host code 112 112 auf Daten von Geräte-Entitäten on data from equipment entities 114-2 114-2 und and 114-3 114-3 zugreifen, welche in kompiliertem Geräte-Code access, which in compiled device code 114 114 gespeichert sind, während kompilierter Host-Code stored as compiled host code 122 122 auf Daten von Geräte-Entitäten on data from equipment entities 124-2 124-2 und and 124-3 124-3 zugreifen kann, welche in kompiliertem Geräte-Code can access which in compiled device code 124 124 gespeichert sein. be stored.
  • Ferner kann mit Bezug auf die in Further, with respect to the in 1C 1C gezeigte Ausführungsform Tabelle Embodiment table shown 300 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. be a table which is stored in the memory, which is used to map each generated shadow entity to an address in memory during a code execution. 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. According to one embodiment, a registration code, which is stored in the host object file to an execution of the host object file out, executed which reflects the address of the shadow entity in the name of the equipment 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. Embodiments of the present invention also name conflicts can resolve, involve what equipment entities of separate files that share the same name during the mapping of the shadow entities. 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 For example, according to one embodiment, two different device entities that share the same name from different modules, each "static" with a link-type, are appended with a unique prefix to each instance of the "static" Link device-entity name thereby the device unique entity (in a final linked device picture z. B. of linked devices code 145 145 von from 1A 1A ) identifizierbar zu machen. making) identifiable.
  • Computer-System-Umgebung Computer system environment
  • 1D 1D zeigt ein Computer-System shows a computer system 100 100 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung. in accordance with an embodiment of the present invention. Computer-System Computer System 100 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. shows the components of a basic computer system in accordance with embodiments of the present invention, in which it provides the execution platform for certain hardware-based and software-based functionality. Im Allgemeinen weist Computer-System Generally, computer system 100 100 zumindest eine CPU at least one CPU 101 101 , einen System-Speicher A system memory 115 115 und zumindest eine Grafik-Prozessor-Einheit (GPU) and at least one graphics processor unit (GPU) 110 110 auf. on.
  • Die CPU the CPU 101 101 kann an den System-Speicher can be connected to the system memory 115 115 über eine Brücke-Komponente/Speicher-Steuerung (nicht gezeigt) gekoppelt sein oder kann direkt mit dem System-Speicher via a bridge component / memory controller (not shown) can be coupled or directly to the system memory 115 115 über eine Speicher-Steuerung (nicht gezeigt), welche integral zu der CPU via a memory controller (not shown) integral to the CPU 101 101 ist, gekoppelt sein. is to be coupled. Die GPU the GPU 110 110 kann an eine Anzeige can to a display 112 112 gekoppelt sein. be coupled. Eine oder mehrere zusätzliche GPUs können optional an System One or more additional GPUs can optionally of system 100 100 gekoppelt sein, um weiterhin seine Rechen-Leistung zu erhöhen. be coupled to further increase its computational power. Die GPU(s) The GPU (s) 110 110 ist an die CPU is to the CPU 101 101 und den System-Speicher and the system memory 115 115 gekoppelt. coupled. Die GPU the GPU 110 110 kann als eine diskrete Komponente, eine diskrete Grafik-Karte, welche ausgelegt ist, an das Computer-System can be used as a discrete component, a discrete graphics card which is adapted to the computer system 100 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. via a connector (z. B. AGP slot, PCI-Express slot, etc.) to be coupled, a discrete integrated circuit die (z. B. directly mounted on a mother board), or as an integrated GPU which is included within the integrated circuit dies of a computer system chipset component (not shown) may be implemented. Zusätzlich kann ein logischer Grafik-Speicher In addition, a logical graphics memory 114 114 für die GPU for the GPU 110 110 für Hoch-Bandbreite-Grafik-Daten-Speicherung umfasst sein. be included for high-bandwidth graphics data storage.
  • Die CPU the CPU 101 101 und die GPU and the GPU 110 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. can also be integrated into a single integrated circuit die and the CPU and the GPU may share various resources or to share, such as instruction logic, buffers, functional units, etc., or separate resources for graphics and General-purpose operations be provided. Die GPU kann ferner in eine Kern-Logik-Komponente integriert sein. The GPU may also be integrated into a core logic component.
  • System system 100 100 kann z. z can. B. als ein Tisch-Computer-System oder ein Server-Computer-System implementiert sein, welches eine leistungsfähige Allgemeinzweck-CPU For example, be implemented as a desktop computer system or a server computer system having a powerful general-purpose CPU 101 101 hat, welche mit einer dedizierten Grafik-Rendering-GPU does that with a dedicated graphics rendering GPU 110 110 gekoppelt ist. is coupled. In solch einer Ausführungsform können Komponenten umfasst sein, welche periphere Busse, spezialisierte Audio-/Video-Komponenten, IO-Geräte und dergleichen hinzufügen. In such an embodiment components can be included that add peripheral buses, specialized audio / video components, IO devices and the like. Es wird geschätzt, dass die parallele Architektur von GPU It is estimated that the parallel architecture of the GPU 110 110 erhebliche Performance-Vorteile über CPU significant performance advantages over CPU 101 101 haben kann. may have.
  • 2 2 präsentiert ein Flussdiagramm, welches einen beispielhaften Computer-implementierten Kompilierungs-Prozess in Übereinstimmung mit verschiedenen Ausführungsformen der vorliegenden Erfindung bereitstellt. presents a flow chart that provides an exemplary computer-implemented compilation process in accordance with various embodiments of the present invention.
  • Bei Schritt In step 206 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. two or more host object files, each including device code objects which are able to be read by means of a GPU and executed fed into a device code-linker-program or fed.
  • Bei Schritt In step 207 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 operates the device code-linker-program on the device code objects, which are included within each host object file, which in the device-linker-program at step 206 206 gefüttert sind, um gelinkten Geräte-Code zu erzeugen. are fed to produce linked device code. Wenn auf der Host-Objekt-Datei gearbeitet bzw. operiert wird, ignoriert der Geräte-Code-Linker Objekte, welche keinen Geräte-Code beinhalten. When working on the host object file or surgery, the device code linker ignores objects that do not contain a device code.
  • Bei Schritt In step 208 208 wird der resultierende gelinkte Geräte-Code, welcher während des Schrittes is the resulting gelinkte device code, which during step 207 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. is generated to return embedded in a host object file, which is generated by the device code-linker-program, which serves as a "dummy" host object or "shell" (shell). Die Host-Objekt-Datei kann in einem Zustand zur Benutzung als Eingabe für das Host-Linker-Programm sein. The host object file can be in a state to be used as input for the host linker program.
  • Bei Schritt In step 209 209 operiert das Host-Linker-Programm auf den Host-Objekt-Dateien, welche in das Geräte-Linker-Programm bei Schritt operates the host linker program on the host object files, which in the Device Linker program in step 206 206 gefüttert bzw. zugeführt wurden, sowie auf der Host-Objekt-Datei, welche während des Schrittes fed or supplied, and to the host object file which during step 208 208 erzeugt ist. is generated. 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. The host linker program generates a file containing an executable form of gelinktem device code, which is able to be performed by the GPU of a computer system, as well as an executable form of gelinktem host code, which in is able to be executed by the CPU of a computer system.
  • 3 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. presents a flow chart that provides an exemplary computer-implemented entity shadow generation process in accordance with various embodiments of the present invention.
  • Bei Schritt In step 306 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. are devices entities, which are accessible in host code, read from a source file, which has both the device code, which includes the devices entities, as well as host code during a pre-compilation phase.
  • Bei Schritt In step 307 307 wird für jede Geräte-Entität, welche bei Schritt is for each device entity, which in step 306 306 bestimmt ist, eine entsprechende analoge oder „Schatten”-Entität erzeugt und an den Host-Code-Compiler passiert bzw. weitergereicht. a corresponding analog or "shadow" Entity is determined, generates and passes to the host code compiler or passed. 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. These corresponding shadow entities can hold a logical link to their respective units entities (upright) and it can bring you the same link type to be given to how the devices entity corresponding to each.
  • Bei Schritt In step 308 308 empfängt und kompiliert der Geräte-Code-Compiler den Geräte-Code der Quell-Datei, welche als Eingabe bei Schritt receives and device code compiler compiles the device code of the source file, receiving as input at step 306 306 benutzt ist. is used. Die resultierende Ausgabe wird dann in den Host-Code-Compiler gefüttert. The resulting output is then fed into the host code compiler.
  • Bei Schritt In step 309 309 operiert der Host-Code-Compiler auf dem Host-Code der Quell-Datei, welche als Eingabe bei Schritt operating the host code compiler on the host code of the source file, receiving as input at step 306 306 benutzt wird, einschließlich der Schatten-Entitäten, welche zu dem Host-Compiler bei Schritt is used, including the shadow entities which to the host compiler at step 307 307 passiert sind, sowie der resultierenden Ausgabe, welche mittels des Geräte-Compilers bei Schritt have happened, and the resultant output, which by means of the devices compiler at step 308 308 erzeugt ist. is generated.
  • Bei Schritt In step 310 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 the host code compiler creates a host object file, which is a compiled form of both the device codes, including the equipment entities, which in step 306 306 bestimmt sind, sowie des Host-Codes, einschließlich jeder entsprechenden Schatten-Entität Geräte-Entität, welche bei Schritt are determined, and the codes host, including each corresponding shadow entity devices entity, which in step 307 307 erzeugt ist, einkapselt. is generated encapsulating.
  • Beispielhaftes Verfahren eines Einbettens von mehreren Geräte-Links in ein Host-ausführbares Konstrukt Exemplary Method of embedding of several device links to 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. Embodiments of the present invention, natural independent groupings of device code can support in a manner that permits these groups ( "file blocks") can be linked separately. 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). For example, there may be a set of files in a large project formation, which include device code for manipulating a first object (z. B. image handling), while another set of files is capable of handling a second task which independently of the first object (z. B. parallel calculation). 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. Device code by various groups does not need to interact directly and therefore do not need each other during a Kompilierung- or during Link processes influence. 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. As such, enabling embodiments of the present invention that the first group of files linked together to form an executable form of gelinktem device code, while the second group of files separately be linked together in another executable form of gelinktem device code can. 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. This executable forms can be placed within the same executable file, and then packed where a CPU and GPU can access their corresponding files and can perform their respective tasks.
  • Wie in der Ausführungsform, welche in As in the embodiment shown in 4 4 gezeigt ist, illustriert ist, können ein Geräte-Linker (z. B. Geräte-Linker As shown, there is illustrated a device linker can (z. B. devices linker 130-1 130-1 und and 130-2 130-2 ) und ein Host-Linker (z. B. Host-Linker ) And a host linker (z. B. Host linker 150 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”. ) Are used in combination to generate an executable file, including the several parts of gelinktem device code or "Device 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. Multiple Device Links can increase an analytical precision during the performance of link operations, which may result in an optimum code generation. 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. Further, an embedding multiple device-links in the manner which is described by means of embodiments of the present invention, the linking of Seller libraries supported in that is allows a device link independent of any user's knowledge of other devices links, which have been created by an outside vendor, occurs or is performed.
  • Mit Bezug auf Regarding 4 4 kann Datei-Satz may file set 600 600 Code beinhalten, welcher logisch aufeinander bezogen ist und welcher funktional distinkt ist von dem Datei-Satz include code which is logically related to each other and which is functionally distinct from the file set 700 700 . , Zum Beispiel können Host-Objekte For example, host objects 110 110 und and 120 120 von Datei-Satz File Set 600 600 Code zur Benutzung in Bild-Handhabungs-Prozessen beinhalten, wohingegen Host-Objekte Code for use in image-handling processes include, whereas host objects 130 130 und and 150 150 von Datei-Satz File Set 700 700 Anweisungen zur Benutzung in Parallel-Berechnungen beinhalten können. may include instructions for use in parallel calculations. Als solches brauchen Datei-Satz As such need file set 600 600 und Datei-Satz and file set 700 700 nicht direkt zu interagieren und brauchen sich daher gegenseitig während einer Kompilierung oder eines Linkens nicht gegenseitig zu berühren bzw. beinflussen. not directly interact and therefore need each other during a compilation or a Linkens not mutually touching or leg influence.
  • Geräte-Linker Device Linker 130-1 130-1 kann kompilierten Geräte-Code may compiled device code 114 114 und kompilierten Geräte-Code and compiled device code 124 124 linken, um gelinkten Geräte-Code left to the linked device code 145 145 (z. B. wie oben diskutiert ist) zu erzeugen. (Z. B. discussed above) to generate. Zusätzlich kann Geräte-Linker Additionally, Device Linker 130-2 130-2 kompilierten Geräte-Code compiled device code 134 134 und kompilierten Geräte-Code and compiled device code 154 154 linken, um gelinkten Geräte-Code left to the linked device code 245 245 zu erzeugen (z. B. ähnlich der Erzeugung von gelinktem Geräte-Code to generate (z. B. similar to the generation of gelinktem device code 145 145 , wie oben diskutiert ist). , As discussed above). Gemäß einer Ausführungsform können Geräte-Linker According to an embodiment, devices linker 130-1 130-1 und Geräte-Linker and Device Linker 130-2 130-2 derselbe Linker sein, welcher bei separaten Zeiten aufgerufen wird. be the same linker which is called at separate times. Jeder Teil von gelinktem Geräte-Code (z. B. Every part of gelinktem device code (eg. B. 145 145 und and 245 245 ) kann eingebettet werden in oder Teil sein von einem entsprechenden Host-Objekt (z. B. ) Can be embedded in, or part of (from a corresponding host object z. B. 140 140 bzw. or. 240 240 ), welches mittels Geräte-Linker ), Which by means of devices linker 130-1 130-1 bzw. or. 130-2 130-2 erzeugt ist. is generated.
  • Host-Linker Host Linker 150 150 kann dann ausführbare Datei then executable file 160 160 als ein Ergebnis eines Linkens von Host-Objekt as a result of Linkens of host object 110 110 (z. B. einschließlich kompiliertem Host-Code (Z. B. including compiled host code 112 112 ), Host-Objekt ), Host object 120 120 (z. B. einschließlich kompiliertem Host-Code (Z. B. including compiled host code 122 122 ), Host-Objekt ), Host object 130 130 (z. B. einschließlich kompiliertem Host-Code (Z. B. including compiled host code 132 132 ), Host-Objekt ), Host object 150 150 (z. B. einschließlich kompiliertem Host-Code (Z. B. including compiled host code 152 152 ), Host-Objekt ), Host object 140 140 (z. B. einschließlich gelinktem Geräte-Code (Z. B. including gelinktem device code 145 145 ) und Host-Objekt ) And host object 240 240 (z. B. einschließlich gelinktem Geräte-Code (Z. B. including gelinktem device code 245 245 ) erzeugen. ) produce. Ausführbare Datei executable 160 160 kann zumindest einen Teil von gelinktem Geräte-Code (z. B. may be at least a part of gelinktem device code (z. B. 145 145 , . 245 245 , etc.) und gelinktem Host-Code (z. B. , Etc.) and gelinktem host code (z. B. 160 160 ) umfassen. ) Include. In einer Ausführungsform kann gelinkter Host-Code In one embodiment of linked host code 165 165 erzeugt werden mittels oder in Antwort auf ein Linken von Host-Codes be produced by or in response to a left of host Codes 112 112 , . 122 122 , . 132 132 und and 152 152 . , Demgemäß kann eine ausführbare Datei (z. B. Accordingly, an executable file (eg. B. 160 160 ) erzeugt werden, welche gelinkten Host-Code (z. B. ) Are generated, which linked host code (z. B. 165 165 ) und mehrere Teile von gelinktem Geräte-Code (z. B. ) And several parts of gelinktem device code (z. B. 145 145 , . 245 245 , etc.) umfasst. Comprising 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. Further embodiments of the present invention may uniquely identify each device code object that is linked, by the use of unique identifiers. 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. Through the use of unique identifiers embodiments of the present invention may provide a better assurance that a device code object is not linked in two different gelinkte device codes within the same executable. 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++). In this manner, embodiments of the present invention can provide a a backup precaution that ensures that device code, which is embedded within the host objects can be uniquely identified and can be linked in accordance with the protocols of conventional programming languages (z. B. C ++).
  • 5 5 präsentiert eine beispielhafte Darstellung, wie Geräte-Code-Objekte eindeutig in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung identifiziert werden können. presents an exemplary illustration of how devices Code objects can be clearly identified in accordance with embodiments of the present invention. Geräte-Linker-Tabelle Device Linker table 400 400 kann eine Tabelle sein, welche im Speicher gespeichert ist, welche eindeutig jeden Geräte-Code identifiziert, welcher mittels Geräte-Linker can be a table which is stored in the memory which uniquely identifies each device code, which means devices linker 130 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”). is used during the performance of link operations together or along with the host objects with which these entities are associated ( "Host object predecessor"). Geräte-Linker Device Linker 130 130 kann einen eindeutigen Identifikator für jedes Geräte-Objekt (z. B. „module_id”-Spalte) erzeugen, partizipierend an dem Geräte-Link-Prozess. can generate a unique identifier for each device object (eg. as "module_id" column), participative in the device link process.
  • Gemäß einer Ausführungsform kann sich Geräte-Linker According to one embodiment, device-linker may 130 130 auf Geräte-Linker-Tabelle Device Linker table 400 400 beziehen, um zu bestimmen, welche Geräte-Objekte bereits in dem Link-Prozess partizipiert haben. refer to determine which devices objects have already participates in the link process. Diejenigen Geräte-Objekte, welche als vorherige Partizipanten identifiziert worden sind, können vom Partizipieren an den Host-Link-Operationen mittels Host-Linker Those devices objects that have been identified as previous participation certificates, may from Benefiting from the Host Link operations by host Left 150 150 ausgeschlossen werden. be excluded. Als solches können Versuche, eine ausführbare Datei zu erstellen, welche vorherige Partizipanten beinhaltet, davon abgehalten werden, erfolgreich zu sein. As such, attempts to create an executable file that includes that previous participation certificates, are prevented from being successful. Zum Beispiel, mit Bezug auf Geräte-Linker-Tabelle For example, with respect to equipment linker table 400 400 , gegeben, dass Host-Objekt , Given that host object 110 110 (welches kompilierten Geräte-Code (Which compiled code devices 114 114 beinhaltet) und Host-Objekt includes) and host object 120 120 (welches kompilierten Geräte-Code (Which compiled code devices 124 124 beinhaltet) zusammen gelinkt wurden, um einen gelinkten Geräte-Code were included) together linked to a linked device code 145 145 zu erzeugen, können beide Host-Objekte to generate both host objects 110 110 und and 120 120 davon abgehalten werden, in einer nachfolgenden Geräte-Link-Operation zu partizipieren. are prevented from participating in a subsequent device link operation. Wenn Host-Objekt If host object 110 110 und eine andere Host-Objekt-Datei, welche ihren eigenen kompilierten Geräte-Code (nicht dargestellt) beinhaltet, als Eingabe, mittels Geräte-Linker and another host object file that their own devices compiled code (not shown) includes, as input devices by means of linker 130 130 gelinkt zu werden, ausgeführt würden, kann sich Geräte-Linker to be linked, were running, there are units linker can 130 130 auf Geräte-Linker-Tabelle Device Linker table 400 400 beziehen und bestimmen, dass Host-Objekt refer and determine that the host object 110 110 bereits ein Partizipant in einer vorherigen Link-Operation (z. B. gelinkter Geräte-Code already a participation certificate of linked in a previous link operation (eg. as device code 145 145 ) war. ) Was. Demgemäß kann Geräte-Linker Accordingly Device Linker 130 130 das Host-Objekt the host object 110 110 ignorieren und nur diejenigen Objekte linken, welche Code beinhalten, welcher vorher nicht gelinkt wurde. ignore and only those objects left which include code which has not been linked previously.
  • 6 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. presents a flow chart that provides an exemplary computer-implemented devices code compilation process in accordance with various embodiments of the present invention.
  • Bei Schritt In step 406 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. is any host object file that belongs to a file set, fed in a device code-linker-program among a plurality of host object file sets that are used as input.
  • Bei Schritt In step 407 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 searches the device code-linker-program of a unique identification code (z. B. modul_ID), wherein each host object file is assigned, which in step 406 406 zugeführt ist, um zu bestimmen, ob die Host-Objekt-Dateien in einem vorherigen Geräte-Code-Link-Prozess partizipiert haben. is supplied to determine whether the host object files have participated in a previous device code-link process.
  • Bei Schritt In step 408 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. a determination is made whether the host object files which have been received by the device code linker have participates in a previous device code-link process. 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 When the host object files have not participated in a previous device code-Link operation, then the device code linker program operates on the device code which is embedded within the host object files, which in the device linker program in step 406 406 gefüttert sind, wie in Schritt are fed, as in step 410 410 detailliert wurde. was detailed. 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 If one of the host object files has participated in a previous device code-Link operation, these host object file is excluded from participation in the current device link operation, as in step 409 409 detailliert ist. is detailed.
  • Bei Schritt In step 409 409 ist eine Host-Objekt-Datei, welche bei Schritt is a host object file, which in step 406 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. is supplied has been determined to have participated in a previous device code-link operation, and therefore is excluded from participation in the current device link operation.
  • Bei Schritt In step 410 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. 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 within the host object files is included, which are fed into the device code-linker-program, and generates the linked device 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. The device code-linker-program embeds the resulting linked device code within a host object file, which is generated by the device code-linker-program.
  • Bei Schritt In step 411 411 wird jeder Host-Objekt-Datei, welche während Schritt is any host object file which during step 410 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). is used, a unique identification code assigned to (z. B. modul_id), provides the information relating to the current link operation that is tracked by the device code-linker-program by using a table stored in memory (tracked).
  • Bei Schritt In step 412 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 the host-linker-program generates an executable form of the host code, which is embedded within the same host object files, which to the device code-linker-program at step 406 406 zugefüttert sind, sowie des gelinkten Geräte-Codes, welcher innerhalb der Host-Objekt-Datei eingebettet ist, welche bei Schritt are supplied feeds, as well as the linked device code, which is embedded within the host object file, which in step 410 410 erzeugt ist. is generated.
  • Bei Schritt In step 413 413 erzeugt das Host-Linker-Programm eine ausführbare Datei, welche jedes der ausführbare Konstrukte (executables) einkapselt, welche bei Schritt the host-linker-program creates an executable file that encapsulates each of the executable constructs (executables), which in step 412 412 erzeugt sind. 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. While the foregoing disclosure performs various embodiments using specific block diagrams, flowcharts, and examples, each block diagram component, flowchart step, operation and / or component that is described herein and / or illustrated, to be individually and / or collectively implemented, using a wide range of hardware, software, or firmware (or any combination thereof) configurations. 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. In addition, any disclosure of components which are included within other components, be considered as examples, since many other architectures can be implemented to achieve the same functionality should.
  • Die Prozess-Parameter und Sequenz von Schritten, welche hierin beschrieben und/oder illustriert sind, sind nur als Beispiel gegeben. The process parameters and sequence of steps described herein and / or illustrated are given only as an example. 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. While herein illustrated and / or may be shown steps in a certain order or discussed, these steps need not necessarily be performed in the illustrated or discussed order. 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 various example methods described herein and / or illustrated, can also include one or more of the steps which are described herein or illustrated omit or include additional steps in addition to those which are 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. While various embodiments have been described herein in the context of fully functional computer system and / or illustrated, 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 carry out the distribution. Die hierin offenbarten Ausführungsformen können auch unter Benutzung von Software-Modulen implementiert sein, welche gewisse Aufgaben durchführen. The herein disclosed embodiments may be implemented using software modules that perform certain tasks. 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. These software modules may script, batch, or other executable files comprise, which may be stored on a computer-readable storage medium or in a computing system. Diese Software-Module können ein Computer-System konfigurieren, eine oder mehrere der Beispiel-Ausführungsformen, welche hierin offenbart sind, durchzuführen. These software modules may configure a computer system, one or more of the example embodiments which are disclosed herein to perform. Ein oder mehrere der Software-Module, welche hierin offenbart sind, können in einer Wolke-Rechen-Umgebung (cloud computing environment) implementiert sein. One or more of the software modules, which are disclosed herein may be implemented in a cloud computing environment (cloud computing environment). Wolke-Rechen-Umgebungen können verschiedene Dienste und Anwendungen über das Internet bereitstellen. Cloud-computing environments can provide different services and applications over the Internet. 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. This cloud-based services (eg. As software as a service, platform as a service, infrastructure as a service) can be accessed through a Web browser or other remote interface. Verschiedene Funktionen, welche hierin beschrieben sind, können durch eine entfernter-Schreibtisch-Umgebung oder irgendeine andere Wolke-basierte Rechen-Umgebung bereitgestellt sein. Various features which are described herein may be provided by a remote desk 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. For the purpose of illustration, the foregoing description has been described with reference to specific embodiments. Die obigen illustrativen Diskussionen sind jedoch nicht beabsichtigt, erschöpfend zu sein oder die Erfindung auf die präzisen offenbarten Formen zu begrenzen. The above illustrative discussions are not intended to be exhaustive or to limit the invention to the precise forms disclosed. Viele Modifikationen und Variationen sind in Anbetracht der obigen Offenbarung möglich. Many modifications and variations are possible in light of the above disclosure. 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. The embodiments were chosen and described in order to explain the principles of the invention, the best and to illustrate its practical applications, to thereby enable those skilled in the art in the situation, the invention and various embodiments with various modifications as are specific for the suitable contemplated use are to use.
  • Ausführungsformen gemäß der Erfindung sind somit beschrieben. Embodiments of the invention are thus described. 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. 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 rather should be construed according to the claims below.

Claims (20)

  1. 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; A method of creating an executable file, the method comprising: compiling a first portion of program code and a second portion of program code which is accessed from a plurality of different source files, wherein the first portion comprising instructions, which means a central processing unit (CPU) to be executed, and wherein the second portion of code comprises instructions, which solely by means of a graphics processing unit (GPU) to be executed; Zusammen-Linken des ersten Teils von Code, kompiliert, um einen gelinkten ersten Teil von Code zu erzeugen; Together-left of the first portion of code compiled to generate a first part of the linked code; Zusammen-Linken des zweiten Teils von Code, kompiliert, um einen gelinkten zweiten Teil von Code zu erzeugen; Together-left of the second portion of code compiled to generate a linked part of the second code; 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. and generating the executable file, the executable file comprises an executable form of the linked portion of the first code and the second part of the linked code.
  2. 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 includes compiling separate the first portion and the second portion of code.
  3. 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 the compiling further comprises generating an analog encoded entity, wherein the first portion of code is operable to access data from the second portion of code using the analog encoded entity.
  4. 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 said second portion of code in a version of Compute Unified Device Architecture-programming-long vague (CUDA) is written.
  5. 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 the co-left of the second portion of code further comprises generating a shell host object file and embedding the linked second portion of code within the shell host object file.
  6. 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 co-left of the second portion of code further comprises distinguishing encoded objects, which are embedded within the second portion of code, which share a common name.
  7. 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 the distinguishing of encoded objects further comprises generating a unique identifier for the encoded objects which share a common name.
  8. 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; System to create an executable file, the system comprising: a first compiler for compiling a first portion of code, which is received from a plurality of different source files, wherein the first portion comprising instructions, which by means of a central processing unit (CPU) to be executed; 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; a second compiler to compile a second portion of code, which is received from the plurality of different source files, wherein the second portion of code comprises instructions, which solely by means of a graphics processing unit (GPU) to be executed; ein erstes Link-Modul zum Zusammen-Linken des ersten Teils von Code, kompiliert, um einen gelinkten ersten Teil von Code zu erzeugen; a first link module to co-left of the first portion of code compiled to generate a first part of the linked code; ein zweites Link-Modul zum Zusammen-Linken des zweiten Teils von Code, kompiliert, um einen gelinkten zweiten Teil von Code zu erzeugen; a second link module for co-left of the second portion of code compiled to generate a linked part of the second code; 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. and executable file generating module for generating the executable file, the executable file comprises an executable form of the linked portion of the first code and the second part of the linked code.
  9. 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. To compile system of claim 8, wherein the first and the second compiler compilers are also operably the first part and the second part of code independent.
  10. 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. System according to claim 9, wherein the second compiler is further operable to interpret an analog encoded entity, wherein the first portion of code is operable to access data from the second portion of code using the analog encoded entity.
  11. System gemäß Anspruch 8, wobei der zweite Teil von Code in einer Version einer Compute-Unified-Device-Architecture-programming-language (CUDA) geschrieben ist. System according to claim 8, wherein the second portion of code in a version of a Compute Unified Device Architecture-programming-language (CUDA) is written.
  12. 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. System according to claim 8, wherein said second link module is further operable to generate a shell host object file, wherein the second part of gelinkte code is embedded within the shell host object file.
  13. 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. System according to claim 8, wherein said second link module is further operable to distinguish coded objects, which are embedded within the second portion of code, which share a common name.
  14. 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. System according to claim 8, wherein said second link module is further operable to generate a unique identifier for the encoded objects which share a common name.
  15. 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; A computer implemented method of creating an executable file, the method comprising: extracting a device code portion from a non-device-code portion, which is received from a plurality of different source files, wherein the device-code comprising part instructions which exclusively by means of a graphics processing unit (GPU) to be executed; 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; The left of the device code portion separately from the non-device code portion using a separate link process to produce a linked part of device code; 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. and generating the executable file, the executable file comprises an executable form of the linked portion of device code and the non-device code portion.
  16. 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 the extracting further comprises compiling the device code portion separately from the non-device code part.
  17. 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 the 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.
  18. 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).
  19. 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 includes forming a shell-host object file and embedding the linked part of device code within the shell-host object file.
  20. 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 encoded objects, which are embedded within the device code portion, which share 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)

Priority Applications (4)

Application Number Priority Date Filing Date Title
US201261644956 true 2012-05-09 2012-05-09
US61/644,956 2012-05-09
US13/850,207 2013-03-25
US13850207 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 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 (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160188352A1 (en) * 2014-12-29 2016-06-30 Nvidia Corporation System and method for compiler support for compile time customization of code
CN105426226B (en) * 2015-11-24 2018-07-06 无锡江南计算技术研究所 Isomers and compile the code generation method fusion
CA2974556C (en) * 2016-08-25 2018-06-05 Sas Institute Inc. Compilation for node device gpu-based parallel processing

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
EP2494454A4 (en) * 2009-10-30 2013-05-15 Intel Corp Two way communication support for heterogeneous processors of a 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 Type
CN103389908A (en) 2013-11-13 application

Similar Documents

Publication Publication Date Title
Yoo et al. Engineering and algorithm design for an image processing API: a technical report on ITK-the insight toolkit
US6918110B2 (en) Dynamic instrumentation of an executable program by means of causing a breakpoint at the entry point of a function and providing instrumentation code
Gorgolewski et al. Nipype: a flexible, lightweight and extensible neuroimaging data processing framework in python
Aldinucci et al. An advanced environment supporting structured parallel programming in Java
Chiw et al. Diderot: a parallel DSL for image analysis and visualization
Tairas et al. Increasing clone maintenance support by unifying clone detection and refactoring activities
Nugteren et al. Introducing'Bones': a parallelizing source-to-source compiler based on algorithmic skeletons
US20130198494A1 (en) Method for compiling a parallel thread execution program for general execution
EP0825540A1 (en) Pipeline processor
Alkhalid et al. Software refactoring at the function level using new Adaptive K-Nearest Neighbor algorithm
Pizka Design and implementation of the GNU INSEL-compiler gic
Joselli et al. An architeture with automatic load balancing for real-time simulation and visualization systems
US8296741B1 (en) Identifying function-level code dependency by simulating runtime binding
DE19617842A1 (en) A method for code transformation
Tariq An introduction to gpu computing and cuda architecture
Palomar et al. Parallelizing and optimizing lip-canny using nvidia cuda
Aldinucci et al. FastFlow: High-level and efficient streaming on multi-core
da Silva et al. Comparing and combining GPU and FPGA accelerators in an image processing context
EP1343078A1 (en) Modelling system and generation of software generating systems
Bernabé et al. CUDA and OpenCL implementations of 3D fast wavelet transform
Sobral et al. Enabling JaSkel skeletons for clusters and computational Grids
Zhang et al. Compositional load test generation for software pipelines
JP2005216001A (en) Information processor and information processing method
Scaife et al. Comparative cross-platform performance results from a parallelizing SML compiler
Thomas Refactoring as Meta Programming.

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