Embedded Device Code Linking for Multi-Object Host Executables
Find Innovative SolutionsGenerate Solutions
Solution Overview
Problem
Conventional host linkers are unable to generate an executable file from multiple host objects containing respective host and device code for CPU and GPU execution, as they cannot properly link device code embedded in each host object.
Innovation Solution
A method and system that uniquely identifies and links device code portions within host objects, allowing them to be executed by different processors, and generates an executable file containing both host and linked device code portions.
Engineering Contradictions & Design Principles
Engineering Contradiction Analysis
1Adaptability or versatility
If conventional host linkers are used to generate executable files from multiple host objects, then host code can be linked together, but device code embedded in multiple host objects cannot be properly linked
Solution Approach 1:
The patent segments the linking process into two distinct phases: a device code linking phase that processes device code from multiple host objects separately, and a host code linking phase that links host objects together. This segmentation allows device code to be properly linked from multiple sources without interfering with host code linking, resolving the contradiction between versatility and reliability.
Solution Approach 2:
The patent performs preliminary device code linking before host code linking. By first extracting and linking device code from all host objects into a separate executable, and then using this pre-linked device code during host code linking, the system ensures device code is correctly linked before being integrated into the final executable. This preliminary action eliminates linking conflicts and ensures reliability.
2Adaptability or versatility
If device code is embedded in multiple host objects, then code reuse and modularity are improved, but conventional linkers cannot handle this structure
Solution Approach 1:
The patent extracts device code from host objects during the linking process. By separating device code from host objects and processing it independently, the system maintains the modularity and code reuse benefits of having device code in multiple host objects, while making the linking process manageable through extraction and separate processing.
Solution Approach 2:
The patent introduces an intermediary linking process that sits between the host objects and the final executable. This intermediary device code linker processes device code from multiple host objects and produces a separate executable that is then integrated into the final result, serving as a mediator that reconciles the complexity of multi-object device code embedding with linker capabilities.
3Productivity
If device code from multiple host objects is linked together, then functionality and parallel processing are enhanced, but code identification and linkage complexity increases
Solution Approach 1:
The patent applies local quality by treating device code and host code differently throughout the linking process. Device code is extracted, processed, and linked separately with its own identification mechanisms, while host code is linked separately. This localized processing approach maintains the productivity benefits of parallel processing while managing complexity through specialized handling of each code type.
Data Source
AI summary
Embodiments of the present invention provide a novel solution to generate multiple linked device code portions within a final executable file. Embodiments of the present invention are operable to extract device code from their respective host object filesets and then link them together to form multiple linked device code portions. Also, using the identification process described by embodiments of the present invention, device code embedded within host objects may also be uniquely identified and linked in accordance with the protocols of conventional programming languages. Furthermore, these multiple linked device code portions may be then converted into distinct executable forms of code that may be encapsulated within a single executable file.


