DE102013208418A1 - Method for producing executable data file in computer system, involves linking compiled device codes and host codes to generate linked device code and linked host code that are used for producing executable data file - Google Patents
Method for producing executable data file in computer system, involves linking compiled device codes and host codes to generate linked device code and linked host code that are used for producing executable data file Download PDFInfo
- Publication number
- DE102013208418A1 DE102013208418A1 DE201310208418 DE102013208418A DE102013208418A1 DE 102013208418 A1 DE102013208418 A1 DE 102013208418A1 DE 201310208418 DE201310208418 DE 201310208418 DE 102013208418 A DE102013208418 A DE 102013208418A DE 102013208418 A1 DE102013208418 A1 DE 102013208418A1
- Authority
- DE
- Germany
- Prior art keywords
- code
- linked
- host
- device code
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
Description
GEBIET DER ERFINDUNGFIELD OF THE INVENTION
Ausführungsformen der vorliegenden Erfindung betreffen im Allgemeinen Grafik-Verarbeitungs-Einheiten (GPUs) und Compiler für heterogene Umgebungen (z. B. GPU und CPU).Embodiments of the present invention generally relate to graphics processing units (GPUs) and heterogeneous environment compilers (e.g., GPU and CPU).
HINTERGRUND DER ERFINDUNGBACKGROUND OF THE INVENTION
Software-ausführbare Dateien werden typischerweise durch Kompilieren von separaten Host-Objekten erzeugt, wobei jedes Host-Objekt einen entsprechenden Teil von Source-Code oder Host-Code umfasst (z. B. in einer Hoch-Niveau-Sprache, wie etwa C, C++, etc. geschrieben). Die ausführbare Datei, welche mittels des Compilers erzeugt ist, umfasst Objekt-Code, welcher mittels einer Zentral-Verarbeitungs-Einheit (CPU) ausgeführt werden kann. Neuerdings haben Host-Systeme einschließlich einer CPU und einer Grafik-Verarbeitungs-Einheit (GPU) angefangen, einen Vorteil der Parallel-Verarbeitungs-Fähigkeit der GPU anzunehmen, um Aufgaben durchzuführen, welche anderenfalls mittels der CPU durchgeführt würden. Die GPU führt Geräte-Code aus, wogegen die CPU Host-Code ausführt. Der Geräte-Code ist typischerweise in dem Host-Code als eine einzelne Datei eingebettet, um somit eine heterogene Compiler-Umgebung zu erzeugen.Software executables are typically generated by compiling separate host objects, each host object comprising a corresponding portion of source code or host code (e.g., in a high level language such as C, C ++ written, etc.). The executable file generated by the compiler includes object code that can be executed by a central processing unit (CPU). Recently, host systems including a CPU and a graphics processing unit (GPU) have begun to take advantage of the GPU's parallel processing capability to perform tasks that would otherwise be performed by the CPU. The GPU executes device code, while the CPU executes host code. The device code is typically embedded in the host code as a single file, thus creating a heterogeneous compiler environment.
Konventionelle Host-Linker oder -Compiler erzeugen eine ausführbare Datei von mehreren Host-Objekten. Diese konventionellen Host-Linker sind jedoch nicht in der Lage, Geräte-Code, welcher in mehreren Host-Objekten eingebettet ist, zu linken bzw. zu verinken, und erfordern daher, dass irgendein Geräte-Code in ein einzelnes Host-Objekt eingebettet wird. Zum Beispiel können konventionelle Host-Linker eine ausführbare Datei von einem ersten Host-Objekt, welches nur Host-Code beinhaltet (zur Ausführung mittels der CPU), und einem zweiten Host-Objekt, welches Host-Code (zur Ausführung mittels der CPU) und Geräte-Code (zur Ausführung mittels der GPU) beinhaltet, erzeugen. Konventionelle Host-Linker sind jedoch nicht in der Lage, eine ausführbare Datei von mehreren Host-Objekten zu erzeugen, wobei jedes entsprechenden Host-Code (zur Ausführung mittels der CPU) und entsprechenden Geräte-Code (zur Ausführung mittels der GPU) beinhaltet, da die konventionellen Host-Linker nicht in der Lage sind, den entsprechenden Geräte-Code, welcher in jedem der Host-Objekte eingebettet ist, korrekt zu linken bzw. zu verbinden.Conventional host linkers or compilers create an executable file from multiple host objects. These conventional host linkers, however, are unable to link device code embedded in multiple host objects, and therefore require that some device code be embedded in a single host object. For example, conventional host linkers may include an executable file from a first host object that includes only host code (for execution by the CPU), and a second host object, host code (for execution by the CPU), and Generate device code (for execution by the GPU). However, conventional host linkers are unable to generate an executable file from multiple host objects, each containing respective host code (for execution by the CPU) and corresponding device code (for execution by the GPU) the conventional host linkers are unable to properly link or associate the corresponding device code embedded in each of the host objects.
ZUSAMMENFASSUNG DER ERFINDUNGSUMMARY OF THE INVENTION
Demgemäß existiert ein Bedarf, ausführbare Dateien von mehreren Host-Objekten zu erzeugen, welche entsprechenden Host-Code und entsprechenden Geräte-Code beinhalten. Ausführungsformen der vorliegenden Erfindung stellen eine neue Lösung bereit, welche die separate Kompilierung von Host-Code und Geräte-Code unterstützt, welche in einer heterogenen Programmier-Umgebung benutzt werden. Ausführungsformen der vorliegenden Erfindung sind operabel, um Geräte-Code, welcher innerhalb von mehreren Host-Objekt-Dateien eingebettet ist, unter Benutzung einer separaten Geräte-Link-Operation zu linken. Ausführungsformen der vorliegenden Erfindung können Geräte-Code von ihren entsprechenden Host-Objekt-Dateien extrahieren und dann zusammen linken, um gelinkten Geräte-Code zu bilden. Dieser gelinkte Geräte-Code kann dann zurück in ein Host-Objekt eingebettet werden, welches mittels Ausführungsformen der vorliegenden Erfindung erzeugt ist, welches dann an einen Host-Linker gereicht bzw. passiert werden kann, um eine Host-ausführbare Datei zu bilden. Als solches kann Geräte-Code in mehrere Dateien aufgetrennt werden und dann zusammen gelinkt werden, um eine finale ausführbare Datei mittels Ausführungsformen der vorliegenden Erfindung zu bilden.Accordingly, there is a need to create executables from multiple host objects that include corresponding host code and corresponding device code. Embodiments of the present invention provide a new solution that supports the separate compilation of host code and device code used in a heterogeneous programming environment. Embodiments of the present invention are operable to link device code embedded within multiple host object files using a separate device link operation. Embodiments of the present invention may extract device code from their respective host object files and then link together to form linked device code. This linked device code may then be embedded back into a host object generated by embodiments of the present invention, which may then be passed to a host linker to form a host executable file. As such, device code may be separated into multiple files and then linked together to form a final executable file using embodiments of the present invention.
Insbesondere ist in einer Ausführungsform die vorliegende Erfindung als ein Verfahren zum Erzeugen einer ausführbaren Datei implementiert. Das Verfahren umfasst Kompilieren eines ersten Teils von Programm-Code und eines zweiten Teils von Programm-Code, welcher aus bzw. von einer Mehrzahl von verschiedenen Quell-Dateien zugegriffen ist, wobei der erste Teil Anweisungen aufweist, welche mittels einer Zentral-Verarbeitungs-Einheit (CPU) auszuführen sind, und wobei der zweite Teil von Code Anweisungen aufweist, welche ausschließlich mittels einer Grafik-Verarbeitungs-Code (GPU) auszuführen sind. In einer Ausführungsform ist der zweite Teil von Code in einer Version einer Rechen-unifiziertes-Gerät-Architektur-Programmiersprache (Compute Unified Device Architecture programming language) (CUDA) geschrieben. In einer Ausführungsform umfasst das Verfahren eines Kompilierens ferner ein separates Kompilieren des ersten Teils und des zweiten Teils von Code.In particular, in one embodiment, the present invention is implemented as a method for generating an executable file. The method includes compiling a first portion of program code and a second portion of program code accessed from a plurality of different source files, the first portion having instructions that are executed by a central processing unit (CPU), and wherein the second part of code has instructions to be executed exclusively by means of a graphics processing code (GPU). In one embodiment, the second part of code is written in a version of a compute unified device architecture programming language (CUDA). In one embodiment, the method of compiling further comprises separately compiling the first part and the second part of code.
In einer Ausführungsform umfasst das Verfahren eines Kompilierens ferner ein Generieren einer analogen codierten Entität (analogous coded entity), wobei der erste Teil von Code operabel ist, auf Daten von dem zweiten Teil von Code unter Benutzen der analogen codierten Entität zuzugreifen. Das Verfahren umfasst auch Zusammenlinken des ersten Teils von Code, welcher kompiliert ist, um einen verlinkten ersten Teil von Code zu erzeugen. Das Verfahren umfasst auch Zusammenlinken des zweiten Teils von Code, welcher kompiliert ist, um einen verlinkten zweiten Teil von Code zu erzeugen. In einer Ausführungsform umfasst das Verfahren eines Zusammenlinkens des zweiten Teils von Code ferner ein Erzeugen einer Schale-Host-Objekt-Datei (shell host object file) und Einbetten des gelinkten zweiten Teils von Code innerhalb der Schale-Host-Objekt-Datei.In one embodiment, the method of compiling further comprises generating an analogous coded entity, wherein the first part of code is operable to access data from the second part of code using the analog coded entity. The method also includes merging the first part of code that is compiled to produce a linked first part of code. The method also includes concatenating the second part of code that is compiled to produce a linked second part of code. In one embodiment, the method of merging the second part of code further comprises generating a shell host object file (shell host object file) and embedding the linked second part of code within the shell host object file.
In einer Ausführungsform umfasst das Verfahren eines Zusammenlinkens des zweiten Teils von Code ferner ein Unterscheiden von kodierten Objekten, welche innerhalb des zweiten Teils von Code eingebettet sind, welche einen gemeinsamen Namen teilen bzw. gemeinsam nutzen. In einer Ausführungsform umfasst das Verfahren eines Unterscheidens von kodierten Objekten ferner ein Erzeugen eines eindeutigen Identifikators für die kodierten Objekte, welche den gemeinsamen Namen teilen. Ferner umfasst das Verfahren Erzeugen der ausführbaren Datei, in welcher die ausführbare Datei eine ausführbare Form des gelinkten ersten Teils von Code und des gelinkten zweiten Teils von Code aufweist.In one embodiment, the method of merging the second part of code further comprises distinguishing coded objects embedded within the second part of code that share a common name. In one embodiment, the method of distinguishing coded objects further comprises generating a unique identifier for the coded objects that share the common name. The method further comprises generating the executable file in which the executable file comprises an executable form of the linked first portion of code and the linked second portion of code.
In einer Ausführungsform ist die vorliegende Erfindung in einem System zum Erstellen einer ausführbaren Datei implementiert. Das System umfasst einen ersten Compiler zum Kompilieren eines ersten Teils von Code, welcher von einer Mehrzahl von verschiedenen Quell-Dateien empfangen ist, wobei der erste Teil Anweisungen aufweist, welche mittels einer Zentral-Verarbeitungs-Einheit (CPU) auszuführen sind. Das System umfasst auch einen zweiten Compiler zum Kompilieren eines zweiten Teils von Code, welcher von der Mehrzahl von verschiedenen Quell-Dateien empfangen ist, wobei der zweite Teil von Code Anweisungen aufweist, welche ausschließlich mittels einer Grafik-Verarbeitungs-Einheit (GPU) auszuführen sind. In einer Ausführungsform ist der zweite Teil von Code in einer Version einer Rechen-Unifiziertes-Gerät-Architektur-Programmier-Sprache (CUDA) geschrieben. In einer Ausführungsform sind der erste Compiler und der zweite Compiler ferner operabel, um den ersten Teil und den zweiten Teil von Code unabhängig zu kompilieren. In einer Ausführungsform ist der zweite Compiler ferner operabel, eine analoge kodierte Entität zu interpretieren, wobei der erste Teil von Code operabel ist, auf Daten von dem zweiten Teil von Code unter Benutzung der analogen kodierten Entität zuzugreifen.In one embodiment, the present invention is implemented in an executable file creation system. The system includes a first compiler for compiling a first portion of code received from a plurality of different source files, the first portion having instructions to be executed by a central processing unit (CPU). The system also includes a second compiler for compiling a second portion of code received from the plurality of different source files, the second portion of code having instructions to be executed solely by means of a graphics processing unit (GPU) , In one embodiment, the second part of code is written in a version of a compute unified device architecture programming language (CUDA). In one embodiment, the first compiler and the second compiler are further operable to independently compile the first part and the second part of code. In one embodiment, the second compiler is further operable to interpret an analog coded entity, wherein the first portion of code is operable to access data from the second portion of code using the analog coded entity.
Das System umfasst ein erstes Link-Modul zum Zusammenlinken des ersten Teils von Code, welcher kompiliert ist, um einen gelinkten ersten Teil von Code zu erzeugen. Das System umfasst ein zweites Link-Modul zum Zusammenlinken des zweiten Teils von Code, welcher kompiliert ist, um einen gelinkten zweiten Teil von Code zu erzeugen. In einer Ausführungsform ist das zweite Link-Modul ferner operabel, eine Schale-Host-Objekt-Datei zu erzeugen, wobei der gelinkte zweite Teil von Code innerhalb der Schale-Host-Objekt-Datei eingebettet ist. In einer Ausführungsform ist das zweite Link-Modul ferner operabel, kodierte Objekte, welche innerhalb des zweiten Teils von Code eingebettet sind, welche einen gemeinsamen Namen teilen, zu unterscheiden. In einer Ausführungsform ist das zweite Link-Modul ferner operabel, einen eindeutigen Identifikator für die kodierten Objekte, welche den gemeinsamen Namen teilen, zu erzeugen. Das System umfasst auch ein ausführbare-Datei-Erzeugungs-Modul zum Erzeugen der ausführbaren Datei, wobei die ausführbare Datei eine ausführbare Form des gelinkten ersten Teils von Code und des gelinkten zweiten Teils von Code aufweist.The system includes a first link module for concatenating the first part of code which is compiled to produce a linked first part of code. The system includes a second link module for concatenating the second part of code which is compiled to produce a linked second part of code. In one embodiment, the second link module is further operable to generate a shell host object file, wherein the linked second portion of code is embedded within the shell host object file. In one embodiment, the second link module is further operable to distinguish encoded objects embedded within the second portion of code that share a common name. In one embodiment, the second link module is further operable to generate a unique identifier for the encoded objects sharing the common name. The system also includes an executable file generation module for generating the executable file, the executable file having an executable form of the linked first portion of code and the linked second portion of code.
In einer Ausführungsform ist die vorliegende Erfindung als ein Computer-implementiertes Verfahren zum Erzeugen einer ausführbaren Datei implementiert. Das Verfahren umfasst ein Extrahieren eines Geräte-Code-Teils von einem Nicht-Geräte-Code-Teil, welcher von einer Mehrzahl von verschiedenen Quell-Dateien empfangen ist, wobei der Geräte-Code-Teil Anweisungen aufweist, welche ausschließlich mittels einer Grafik-Verarbeitungs-Einheit (GPU) auszuführen sind. In einer Ausführungsform ist der Geräte-Code-Teil in einer Version einer Rechen-Unifiziertes-Gerät-Architektur-Programmier-Sprache (CUDA) geschrieben.In one embodiment, the present invention is implemented as a computer-implemented method for creating an executable file. The method comprises extracting a device code portion from a non-device code portion received from a plurality of different source files, the device code portion including instructions that are exclusively through graphics processing Unit (GPU). In one embodiment, the device code portion is written in a version of a compute unified device architecture programming language (CUDA).
In einer Ausführungsform umfasst das Verfahren eines Extrahierens ferner ein Kompilieren des Geräte-Code-Teils separat von dem Nicht-Geräte-Code-Teil. In einer Ausführungsform umfasst das Verfahren eines Kompilierens ferner ein Erzeugen einer analogen kodierten Entität, wobei der Nicht-Geräte-Code-Teil operabel ist, auf Daten von dem Geräte-Code-Teil unter Benutzung der analogen kodierten Entität zuzugreifen. Das Verfahren umfasst Linken des Geräte-Code-Teils separat von dem Nicht-Geräte-Code-Teil unter Benutzung eines separaten Link-Prozesses, um einen gelinkten Teil von Geräte-Code zu erzeugen. In einer Ausführungsform umfasst das Verfahren eines Linkens ferner ein Erzeugen einer Schale-Host-Objekt-Datei und ein Einbetten des gelinkten Teils von Geräte-Code innerhalb der Schale-Host-Objekt-Datei.In one embodiment, the method of extracting further comprises compiling the device code part separately from the non-device code part. In one embodiment, the method of compiling further comprises generating an analog encoded entity, wherein the non-device code portion is operable to access data from the device code portion using the analog encoded entity. The method includes linking the device code portion separately from the non-device code portion using a separate link process to produce a linked portion of device code. In one embodiment, the method of linking further comprises creating a shell host object file and embedding the linked part of device code within the shell host object file.
In einer Ausführungsform umfasst das Verfahren eines Linkens ferner ein Unterscheiden von kodierten Objekten, welche innerhalb des Geräte-Code-Teils eingebettet sind, welche einen gemeinsamen Namen teilen. In einer Ausführungsform umfasst das Verfahren eines Unterscheidens von kodierten Objekten ferner ein Erzeugen eines eindeutigen Identifikators für die kodierte Objekte, welche den gemeinsamen Namen teilen. Das Verfahren umfasst auch ein Erzeugen der ausführbaren Datei, wobei die ausführbare Datei eine ausführbare Form des gelinkten Teils von Geräte-Code und des Nicht-Geräte-Code-Teils aufweist.In one embodiment, the method of linking further comprises discriminating encoded objects embedded within the device code portion sharing a common name. In one embodiment, the method of distinguishing coded objects further comprises generating a unique identifier for the coded objects that share the common name. The method also includes generating the executable file, the executable file having an executable form of the linked portion of device code and the non-device code portion.
KURZE BESCHREIBUNG DER ZEICHNUNGEN BRIEF DESCRIPTION OF THE DRAWINGS
Die begleitenden Zeichnungen, welche in dieser Spezifikation inkorporiert sind und einen Teil dieser Spezifikation bilden, und in welchen ähnliche Bezugsnummern ähnliche Elemente bezeichnen, illustrieren Ausführungsformen der vorliegenden Offenbarung und dienen zusammen mit der Beschreibung dazu, die Prinzipien der Offenbarung zu erläutern.The accompanying drawings, which are incorporated in and constitute a part of this specification, and in which like reference numerals designate like elements, illustrate embodiments of the present disclosure and, together with the description, serve to explain the principles of the disclosure.
DETAILLIERTE BESCHREIBUNGDETAILED DESCRIPTION
Es wird im Detail Bezug auf die verschiedenen Ausführungsformen der vorliegenden Offenbarung genommen, wobei Beispiele von diesen in den begleitenden Zeichnungen illustriert sind. Während sie im Zusammenhang mit diesen Ausführungsform beschrieben sind, wird es verstanden werden, dass sie nicht beabsichtigt sind, die Offenbarung auf diese Ausführungsformen zu begrenzen. Im Gegenteil ist die Offenbarung beabsichtigt, Alternativen, Modifikationen und Äquivalente abzudecken, welche innerhalb des Geistes und des Geltungsbereiches der Offenbarung umfasst sein können, wie mittels der angehängten Ansprüche definiert ist. Ferner werden in der folgenden detaillierten Beschreibung der vorliegenden Offenbarung zahlreiche spezifische Details ausgeführt, um ein durchgängiges Verständnis der Offenbarung bereitzustellen. Es wird jedoch verstanden werden, dass die vorliegende Offenbarung ohne diese spezifischen Details praktiziert werden kann. In anderen Fällen sind wohl bekannte Verfahren, Prozeduren, Komponenten und Schaltungen nicht im Detail beschrieben worden, um nicht unnötigerweise Aspekte der vorliegenden Offenbarung zu verschleiern.Reference will be made in detail to the various embodiments of the present disclosure, examples of which are illustrated in the accompanying drawings. While described in connection with this embodiment, it will be understood that they are not intended to limit the disclosure to these embodiments. On the contrary, the disclosure is intended to cover alternatives, modifications, and equivalents, which may be included within the spirit and scope of the disclosure as defined by the appended claims. Further, in the following detailed description of the present disclosure, numerous specific details are set forth in order to provide a thorough understanding of the disclosure. It will be understood, however, that the present disclosure may be practiced without these specific details. In other instances, well-known methods, procedures, components, and circuits have not been described in detail so as not to unnecessarily obscure aspects of the present disclosure.
Teile der detaillierten Beschreibung, welche folgt, sind in Ausdrücken eines Prozesses präsentiert und diskutiert. Obwohl Operationen und eine Abfolge davon in einer Figur hierin offenbart sind (z. B.
Wie in dieser Anmeldung benutzt, sind die Ausdrücke Steuerung, Modul, System und dergleichen beabsichtigt, sich auf eine Computer-bezogene Entität, insbesondere entweder Hardware, Firmware, eine Kombination von Hardware und Software, Software, oder Software in Ausführung, zu beziehen. Zum Beispiel kann ein Modul sein, ist aber nicht darauf beschränkt zu sein, ein Prozess, welcher auf einem Prozessor abläuft, eine integrierte Schaltung, ein Objekt, ein ausführbare (Datei), ein Ausführungs-Thread, ein Programm und/oder ein Computer. Zu Illustrations-Zwecken kann sowohl eine Anwendung, welche auf einem Rechen-Gerät abläuft, und das Rechen-Gerät ein Modul sein. Ein oder mehrere Module können innerhalb eines Prozesses und/oder Ausführungs-Threads ansässig sein und eine Komponente kann auf einem Computer lokalisiert sein und/oder zwischen zwei oder mehr Computern verteilt sein. Zusätzlich können diese Module von verschiedenen Computerlesbaren Medien ausgeführt werden, welche verschiedene Daten-Strukturen darin bzw. darauf gespeichert haben.As used in this application, the terms control, module, system and the like are intended to refer to a computer-related entity, in particular either hardware, firmware, a combination of hardware and software, software, or software in execution. For example, a module may be, but is not limited to, a process running on a processor, an integrated circuit, an object, an executable (file), an execution thread, a program, and / or a computer. For illustration purposes, both an application running on a computing device and the computing device may be a module. One or more modules may reside within a process and / or execution thread, and a component may be located on a computer and / or distributed between two or more computers. In addition, these modules can be executed by different computer readable media, which have stored various data structures in or on it.
Mit Bezug auf
Geräte-Linker
Wie mittels der in
Host-Linker
In einer Ausführungsform kann Host-Linker
Ausführungsformen der vorliegenden Erfindung können Gebrauch von mehreren Geräte-Code-Eintritts-Punkten („Kernels”) von dem Host-Code-Teil eines Programms in den Geräte-Code-Teil eines Programms machen. In gewissen Szenarien können diese Eintritts-Punkte denselben ausführbaren Geräte-Code teilen (z. B. Funktionen, welche in der Lage sind, parallel ausgeführt zu werden). Als solches können Ausführungsformen der vorliegenden Erfindung Host-Objekt-Dateien initialisieren, um eine gemeinsame Routine aufzurufen, um auf gelinkten Geräte-Code zuzugreifen (z. B. gelinkten Geräte-Code
Ferner können Ausführungsformen der vorliegenden Erfindung eine Sichtbarkeit (visibility) zwischen Host-Code und Geräte-Code während einer separaten Kompilierung derart aufrecht erhalten, dass Geräte-Entitäten (z. B. globale Funktionen, Geräte- und Konstant-Variablen, Texturen, Oberflächen), welche innerhalb des Geräte-Codes lokalisiert sind, noch für den Host-Code zugreifbar sein können. Für jeden Geräte-Eintrag, welcher innerhalb des Geräte-Codes vorhanden ist, können analoge oder „Schatten”-Entitäten innerhalb des Host-Codes erzeugt werden, um dem Host-Code zu ermöglichen, Zugriff auf Daten von einer entsprechenden Geräte-Entität zu erhalten und Daten von einer entsprechenden Geräte-Entität zu sammeln. Gemäß einer Ausführungsform können diese Schatten-Entitäten während einer Prä-Kompilierungs-Phase erzeugt werden. Further, embodiments of the present invention may maintain visibility between host code and device code during a separate compilation such that device entities (eg, global functions, device and constant variables, textures, surfaces) which are located within the device code, may still be accessible to the host code. For each device entry present within the device code, analog or "shadow" entities within the host code may be generated to allow the host code to gain access to data from a corresponding device entity and collect data from a corresponding device entity. According to one embodiment, these shadow entities may be generated during a pre-compile phase.
Mit Bezug auf die in
Gemäß einer Ausführungsform können Schatten-Entitäten
Zusätzlich zum Empfangen von unkompiliertem Host-Code
Ferner kann mit Bezug auf die in
Ausführungsformen der vorliegenden Erfindung können auch Namen-Konflikte auflösen, welche Geräte-Entitäten von separaten Dateien involvieren, welche denselben Namen während der Abbildung von Schatten-Entitäten teilen. Zum Beispiel können gemäß einer Ausführungsform zwei verschiedene Geräte-Entitäten, welche denselben Namen von verschiedenen Modulen teilen, jede mit einem „statischen” Link-Typus, mit einem eindeutigen Präfix an jede Instanz des „statischen” Link-Gerät-Entitäts-Namens angehängt werden, um dadurch die Geräte-Entität eindeutig in einem endgültigen gelinkten Geräte-Bild (z. B. gelinkter Geräte-Code
Computer-System-UmgebungComputer system environment
Die CPU
Die CPU
System
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Beispielhaftes Verfahren eines Einbettens von mehreren Geräte-Links in ein Host-ausführbares KonstruktExemplary method of embedding multiple device links into a host-executable construct
Ausführungsformen der vorliegenden Erfindung können natürliche unabhängige Gruppierungen von Geräte-Code in einer Weise unterstützen, welche erlaubt, dass diese Gruppen („Datei-Sätze”) separat gelinkt werden. Zum Beispiel kann es in einer großen Projekt-Aufstellung einen Satz von Dateien geben, welche Geräte-Code zum Handhaben einer ersten Aufgabe (z. B. Bild-Handhabung) beinhalten, während ein anderer Satz von Dateien eine zweite Aufgabe handhaben kann, welche unabhängig von der ersten Aufgabe ist (z. B. Parallel-Berechnung). Geräte-Code von verschiedenen Gruppen braucht nicht direkt zu interagieren und braucht sich daher nicht gegenseitig während einer Kompilierung- oder während Link-Prozessen beeinflussen. Als solches ermöglichen Ausführungsformen der vorliegenden Erfindung, dass die erste Gruppe von Dateien zusammen gelinkt wird, um eine ausführbare Form von gelinktem Geräte-Code zu bilden, während die zweite Gruppe von Dateien separat in eine andere ausführbare Form von gelinktem Geräte-Code zusammen gelinkt werden kann. Diese ausführbaren Formen können dann innerhalb derselben ausführbaren Datei platziert und gepackt werden, wo eine CPU und GPU ihre entsprechenden Dateien zugreifen kann und ihre entsprechenden Aufgaben durchführen kann.Embodiments of the present invention may support natural independent groupings of device code in a manner that allows these groups ("file sets") to be linked separately. For example, in a large project set up, there may be a set of files that include device code for handling a first task (eg, image handling) while another set of files may handle a second task that is independent from the first task is (eg parallel calculation). Device code from different groups does not need to interact directly, and therefore does not need to interfere with each other during a compilation or link process. As such, embodiments of the present invention allow the first group of files to be linked together to form an executable form of linked device code, while the second group of files are separately linked together into another executable form of linked device code can. These executable forms can then be placed and packaged within the same executable file, where a CPU and GPU can access their respective files and perform their respective tasks.
Wie in der Ausführungsform, welche in
Mit Bezug auf
Geräte-Linker
Host-Linker
Ferner können Ausführungsformen der vorliegenden Erfindung in eindeutiger Weise jedes Geräte-Code-Objekt, welches gelinkt ist, durch die Benutzung von eindeutigen Identifikatoren identifizieren. Durch die Benutzung von eindeutigen Identifikatoren können Ausführungsformen der vorliegenden Erfindung eine bessere Sicherheit bereitstellen, dass ein Geräte-Code-Objekt nicht in zwei verschiedene gelinkte Geräte-Codes innerhalb derselben ausführbaren Datei gelinkt wird. In dieser Weise können Ausführungsformen der vorliegenden Erfindung ein eine Sicherungs-Vorkehrung bereitstellen, welche sicherstellt, dass Geräte-Code, welcher innerhalb von Host-Objekten eingebettet ist, eindeutig identifiziert werden kann und gelinkt werden kann in Übereinstimmung mit den Protokollen von konventionellen Programmier-Sprachen (z. B. C++).Further For example, embodiments of the present invention can uniquely identify each device code object that is linked by the use of unique identifiers. By using unique identifiers, embodiments of the present invention may provide better security that a device code object will not be linked into two different linked device codes within the same executable file. In this manner, embodiments of the present invention may provide a backup precaution which ensures that device code embedded within host objects can be uniquely identified and linked in accordance with the protocols of conventional programming languages (eg C ++).
Gemäß einer Ausführungsform kann sich Geräte-Linker
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Bei Schritt
Während die vorangehende Offenbarung verschiedene Ausführungsformen unter Benutzung von spezifischen Blockdiagrammen, Flussdiagrammen und Beispielen ausführt, kann jede Blockdiagramm-Komponente, Flussdiagramm-Schritt, Operation und/oder Komponente, welche hierin beschrieben und/oder illustriert ist, individuell und/oder kollektiv implementiert sein, unter Benutzung eines breiten Bereichs von Hardware-, Software- oder Firmware- (oder irgendeiner Kombination davon) Konfigurationen. Zusätzlich sollte irgendeine Offenbarung von Komponenten, welche innerhalb anderer Komponenten beinhaltet sind, als Beispiele betrachtet werden, da viele andere Architekturen implementiert werden können, um dieselbe Funktionalität zu erreichen.While the foregoing disclosure embodies various embodiments using specific block diagrams, flowcharts, and examples, each block diagram component, flowchart step, operation, and / or component described and / or illustrated herein may be implemented individually and / or collectively, using a wide range of hardware, software or firmware (or any combination thereof) configurations. In addition, any disclosure of components included within other components should be considered as examples, since many other architectures can be implemented to achieve the same functionality.
Die Prozess-Parameter und Sequenz von Schritten, welche hierin beschrieben und/oder illustriert sind, sind nur als Beispiel gegeben. Während die hierin illustrierten und/oder beschriebenen Schritte in einer bestimmten Ordnung gezeigt oder diskutiert sein können, brauchen diese Schritte nicht notwendigerweise in der illustrierten oder diskutierten Ordnung durchgeführt werden. Die verschiedenen Beispiel-Methoden, welche hierin beschrieben und/oder illustriert sind, können auch einen oder mehrere der Schritte, welche hierin beschrieben oder illustriert sind, auslassen oder zusätzliche Schritte zusätzlich zu denjenigen umfassen, welche offenbart sind.The process parameters and sequence of steps described and / or illustrated herein are given by way of example only. While the steps illustrated and / or described herein may be shown or discussed in a particular order, these steps need not necessarily be performed in the illustrated or discussed order. The various example methods described and / or illustrated herein may also omit one or more of the steps described or illustrated herein, or include additional steps in addition to those disclosed.
Während verschiedene Ausführungsformen hierin im Zusammenhang von voll funktionalen Computer-System beschrieben und/oder illustriert worden sind, können eine oder mehrere dieser Beispiel-Ausführungsformen als ein Programm-Produkt in einer Verschiedenheit von Formen verteilt werden, unabhängig von dem bestimmten Typ von Computerlesbaren Medien, welche benutzt werden, um tatsächlich die Verteilung auszuführen. Die hierin offenbarten Ausführungsformen können auch unter Benutzung von Software-Modulen implementiert sein, welche gewisse Aufgaben durchführen. Diese Software-Module können Skript-, Batch-, oder andere ausführbare Dateien umfassen, welche auf einem Computer-lesbaren Speicher-Medium oder in einem Rechen-System gespeichert sein können. Diese Software-Module können ein Computer-System konfigurieren, eine oder mehrere der Beispiel-Ausführungsformen, welche hierin offenbart sind, durchzuführen. Ein oder mehrere der Software-Module, welche hierin offenbart sind, können in einer Wolke-Rechen-Umgebung (cloud computing environment) implementiert sein. Wolke-Rechen-Umgebungen können verschiedene Dienste und Anwendungen über das Internet bereitstellen. Diese Wolke-basierten Dienste (z. B. Software als ein Dienst, Plattform als ein Dienst, Infrastruktur als ein Dienst) können durch einen Web-Browser oder eine andere entfernte Schnittstelle zugreifbar sein. Verschiedene Funktionen, welche hierin beschrieben sind, können durch eine entfernter-Schreibtisch-Umgebung oder irgendeine andere Wolke-basierte Rechen-Umgebung bereitgestellt sein.While various embodiments have been described and / or illustrated herein in the context of fully functional computer systems, one or more of these example embodiments may be distributed as a program product in a variety of forms, regardless of the particular type of computer-readable media, which are used to actually execute the distribution. The embodiments disclosed herein may also be implemented using software modules that perform certain tasks. These software modules may include script, batch, or other executable files that may be stored on a computer-readable storage medium or in a computing system. These software modules may configure a computer system to perform one or more of the example embodiments disclosed herein. One or more of the software modules disclosed herein may be implemented in a cloud computing environment. Cloud computing environments can provide various services and applications over the Internet. These cloud-based services (eg, software as a service, platform as a service, infrastructure as a service) may be accessible through a web browser or other remote interface. Various functions described herein may be provided by a remote desktop environment or any other cloud-based computing environment.
Für den Zweck einer Erläuterung ist die vorangehende Beschreibung mit Bezug auf spezifische Ausführungsformen beschrieben worden. Die obigen illustrativen Diskussionen sind jedoch nicht beabsichtigt, erschöpfend zu sein oder die Erfindung auf die präzisen offenbarten Formen zu begrenzen. Viele Modifikationen und Variationen sind in Anbetracht der obigen Offenbarung möglich. Die Ausführungsformen wurden ausgewählt und beschrieben, um am Besten die Prinzipien der Erfindung zu erläutern und ihre praktische Anwendungen zu erläutern, um dadurch die Fachleute in der Technik in die Lage zu versetzen, die Erfindung und verschiedene Ausführungsformen mit verschiedenen Modifikationen, wie sie für die bestimmte in Betracht gezogene Benutzung geeignet sind, zu benutzen.For the purpose of explanation, the foregoing description has been described with reference to specific embodiments. The above illustrative discussions, however, are not intended to be exhaustive or to limit the invention to the precise forms disclosed. Many modifications and variations are possible in light of the above disclosure. The embodiments have been chosen and described to best explain the principles of the invention and to explain its practical applications, thereby enabling those skilled in the art to embody the invention and various embodiments with various modifications as may be intended are considered suitable for use.
Ausführungsformen gemäß der Erfindung sind somit beschrieben. Während die vorliegende Offenbarung in bestimmten Ausführungsformen beschrieben worden ist, sollte es geschätzt werden, dass die Erfindung nicht aufgefasst werden sollte, mittels solcher Ausführungsformen begrenzt zu sein, sondern stattdessen gemäß der Ansprüche unten aufgefasst werden sollte.Embodiments according to the invention are thus described. While the present disclosure has been described in particular embodiments, it should be appreciated that the invention should not be construed to be limited by such embodiments, but instead should be construed according to the claims below.
Claims (20)
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261644956P | 2012-05-09 | 2012-05-09 | |
US61/644,956 | 2012-05-09 | ||
US13/850,207 | 2013-03-25 | ||
US13/850,207 US9483235B2 (en) | 2012-05-09 | 2013-03-25 | Method and system for separate compilation of device code embedded in host code |
Publications (1)
Publication Number | Publication Date |
---|---|
DE102013208418A1 true DE102013208418A1 (en) | 2013-11-14 |
Family
ID=49475715
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE201310208418 Pending DE102013208418A1 (en) | 2012-05-09 | 2013-05-07 | Method for producing executable data file in computer system, involves linking compiled device codes and host codes to generate linked device code and linked host code that are used for producing executable data file |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103389908A (en) |
DE (1) | DE102013208418A1 (en) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10241761B2 (en) | 2014-12-29 | 2019-03-26 | Nvidia Corporation | System and method for compiler support for compile time customization of code |
CN105426226B (en) * | 2015-11-24 | 2018-07-06 | 无锡江南计算技术研究所 | A kind of compiling of isomery code fusion and generation method |
CA2974556C (en) * | 2016-08-25 | 2018-06-05 | Sas Institute Inc. | Compilation for node device gpu-based parallel processing |
US10289393B2 (en) | 2017-06-22 | 2019-05-14 | Microsoft Technology Licensing, Llc | GPU-executed program sequence cross-compilation |
US10657698B2 (en) | 2017-06-22 | 2020-05-19 | Microsoft Technology Licensing, Llc | Texture value patch used in GPU-executed program sequence cross-compilation |
US10241766B2 (en) | 2017-06-22 | 2019-03-26 | Microsoft Technology Licensing, Llc | Application binary interface cross compilation |
US10102015B1 (en) | 2017-06-22 | 2018-10-16 | Microsoft Technology Licensing, Llc | Just in time GPU executed program cross compilation |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080109795A1 (en) * | 2006-11-02 | 2008-05-08 | Nvidia Corporation | C/c++ language extensions for general-purpose graphics processing unit |
US20100153934A1 (en) * | 2008-12-12 | 2010-06-17 | Peter Lachner | Prefetch for systems with heterogeneous architectures |
CN102741828B (en) * | 2009-10-30 | 2015-12-09 | 英特尔公司 | To the two-way communication support of the heterogeneous processor of computer platform |
US8756590B2 (en) * | 2010-06-22 | 2014-06-17 | Microsoft Corporation | Binding data parallel device source code |
CN101937343A (en) * | 2010-09-17 | 2011-01-05 | 上海交通大学 | Method for realizing rear-end translation framework of heterogeneous multi-core virtual execution environment |
-
2013
- 2013-05-07 DE DE201310208418 patent/DE102013208418A1/en active Pending
- 2013-05-09 CN CN2013101703917A patent/CN103389908A/en active Pending
Also Published As
Publication number | Publication date |
---|---|
CN103389908A (en) | 2013-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE102013208418A1 (en) | Method for producing executable data file in computer system, involves linking compiled device codes and host codes to generate linked device code and linked host code that are used for producing executable data file | |
DE68921906T2 (en) | Method for a multiprocessor system with self-assigning processors. | |
DE112012000214T5 (en) | Technique for inter-procedural memory address space optimization in GPU computing compiler | |
DE68921775T2 (en) | Processor simulation. | |
DE102008005515A1 (en) | Virtual architecture and virtual instruction set for the calculation of parallel instruction sequences | |
DE112016003949T5 (en) | WEB-BASED PROGRAMMING ENVIRONMENT FOR EMBEDDED EQUIPMENT | |
DE102015112202A1 (en) | Combining paths | |
DE60002327T2 (en) | DERIVING OPERAND TYPES WITHIN A INTERMEDIATE LANGUAGE | |
DE102005021749A1 (en) | Program-controlled information processing method, involves initiating information processing operations in selected resources, and disconnecting connections that are no longer needed between selected resources | |
DE102013208041A1 (en) | Server-based graphics processing techniques | |
DE112014002771T5 (en) | Hybrid-on-demand graphics translation table shadowing | |
DE102013006396A1 (en) | A GRAPHIC PROCESSING UNIT USING A STANDARD PROCESSING UNIT AND A PROCESS FOR BUILDING A GRAPHIC PROCESSING UNIT | |
DE112022001140T5 (en) | IMPLEMENTING A MATRIX VALUE DETERMINATION | |
DE102015122908A1 (en) | System and method for compiler support for code compile-time adaptation | |
DE102020130524A1 (en) | SYSTEM, DEVICE AND METHOD FOR DYNAMIC TRACKING IN A SYSTEM WITH ONE OR MORE VIRTUALIZATION ENVIRONMENTS | |
DE112022003222T5 (en) | MULTI-ARCHITECTURE EXECUTION GRAPHS | |
DE102013208560A1 (en) | Method for generating executable data file in compiler e.g. CPU for heterogeneous environment, involves generating executable data file comprising executable form from both host code portions and unique linked apparatus code portions | |
DE102023101893A1 (en) | GRAPH-BASED STORAGE | |
WO2023138890A1 (en) | Data processing device, and method for converting data | |
DE102022131530A1 (en) | METHOD OF MODIFYING GRAPH CODE | |
DE102022132013A1 (en) | APPLICATION PROGRAMMING INTERFACES FOR INTEROPERABILITY | |
DE102022132008A1 (en) | ASYNCHRONE MEMORY DEALLOCATION | |
DE102022132017A1 (en) | APPLICATION PROGRAMMING INTERFACES FOR INTEROPERABILITY | |
DE112022000425T5 (en) | SIMULTANEOUS CODE INTRODUCTION | |
DE112022001917T5 (en) | SYNCHRONIZING A GRAPH EXECUTION |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R012 | Request for examination validly filed | ||
R082 | Change of representative |
Representative=s name: KRAUS & WEISERT PATENTANWAELTE PARTGMBB, DE |
|
R079 | Amendment of ipc main class |
Free format text: PREVIOUS MAIN CLASS: G06F0009450000 Ipc: G06F0009440000 |
|
R016 | Response to examination communication |