Dynamic allocation of executable code for multi-architecture heterogeneous computing
By dynamically configuring processing units using an intermediate representation to generate executable instruction sets, the solution addresses the challenge of task delegation in heterogeneous systems, enhancing performance and reducing costs.
Patent Information
- Application Number
- JP2023548318
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2021-02-10
- Filing Date
- 2022-02-01
- Publication Date
- 2026-01-22
- Estimated Expiration
- 2042-02-01
AI Technical Summary
Existing heterogeneous computing systems face limitations in dynamically delegating tasks between processing units with different architectures, leading to suboptimal performance gains due to the inability to identify and allocate tasks effectively to coprocessors, especially in heterogeneous systems where different ABIs are involved.
The solution involves dynamically configuring caller and target processing units using an intermediate representation of a software program to generate executable instruction sets, allowing dynamic selection and delegation of execution blocks to coprocessors, thereby improving system performance by optimizing task allocation.
This approach enhances system performance by enabling dynamic configuration of processing units, improving latency and throughput, and reducing implementation and operating costs without significantly impacting performance.
Smart Images

Figure 0007804688000001 
Figure 0007804688000002 
Figure 0007804688000003
Abstract
Description
[Technical Field]
[0001] Related Applications This application claims the benefit of priority to U.S. Patent Application No. 17 / 172,134, filed February 10, 2021, which issued as U.S. Patent No. 11,113,059 on September 7, 2021, the entire contents of which are incorporated herein by reference. [Background technology]
[0002] Some embodiments described in this disclosure relate to computing devices, and more particularly, but not exclusively, to heterogeneous multi-architecture computing systems.
[0003] In the field of computing, the term performance refers to the amount of useful work performed by a computer processing system. Some characteristics of useful work include the speed at which the work is performed, the utilization of computing resources (such as the amount of memory used or the amount of network bandwidth consumed), and the time it takes a computer processing system to react to input. There are various metrics for measuring the amount of useful work. Some metrics are specific to the context of computer processing systems, while others are general metrics that can be measured on a variety of computer processing systems.
[0004] As used herein, the term "processing unit" is used to mean any kind of programmable or non-programmable circuitry configured to perform a set of operations. A processing unit can comprise hardware as well as software. For example, a processing unit can include one or more processors and temporary or non-transitory memory that holds programs that cause the processing unit to perform respective operations when the programs are executed by the one or more processors.
[0005] Furthermore, as used herein, the term "improving performance" refers to improving one or more performance scores measured or calculated according to one or more performance metrics. Two common metrics used to measure the performance of a processing unit are latency and throughput. Latency is the time it takes a processing unit to perform an identified operation. Some examples of identified operations are delivering a data packet from a source to a destination and executing an identified set of computer instructions according to input values. Improving latency refers to reducing the time it takes a processing unit to perform an identified operation. Throughput is the amount of identified operations a processing unit performs within a time interval, e.g., the amount of data packets delivered during that time interval. Another example of system throughput is the amount of input values a processing unit executes an identified set of computer instructions within a time interval. Improving throughput refers to increasing the amount of identified operations a processing unit performs within a time interval.
[0006] In the computing field, the term coprocessor is used to describe an auxiliary processing unit that complements a system's primary processing unit and facilitates improved system performance by offloading some of the system's processor-intensive tasks. As the demand for high-performance computing increases, the use of coprocessing to improve performance is on the rise. Some coprocessors are designed to perform unique tasks. A commonly known coprocessor is a floating-point processor for performing floating-point arithmetic tasks. Other examples of unique tasks that may be performed by a coprocessor include network input-output interface tasks, cryptography, string processing, graphics processing, linear algebra processing, machine learning processing, and signal processing. Other coprocessors may be configured to execute any portion of a computer program that cannot be characterized as a unique task.
[0007] Coprocessing differs from distributed processing. In a distributed system, a problem is divided into multiple independent tasks, each of which is solved by one or more of multiple processing units, each operating substantially independently of the others and possibly communicating among themselves. In coprocessing, the coprocessor complements the functionality of the primary processing unit and works in conjunction with it.
[0008] It is necessary to delegate a portion of a computer program to be executed by one or more coprocessors. Summary of the Invention
[0009] Some embodiments of the present disclosure describe executing software programs on a heterogeneous computing system, the heterogeneous computing system including multiple processing units, each processing unit having one of multiple computer architectures.
[0010] These and other objects are achieved by the features of the independent claims. Further embodiment forms are evident from the dependent claims, the description and the drawings.
[0011] These and other objects are achieved by the features of the independent claims. Further embodiment forms are evident from the dependent claims, the description and the drawings.
[0012] According to a first aspect of the present invention, an apparatus for executing a software program includes a plurality of processing units and at least one hardware processor, the at least one hardware processor being adapted for: identifying, in an intermediate representation of a software program including a plurality of blocks, each block being associated with one of a plurality of execution blocks of the software program and comprising an intermediate instruction set, a caller block comprising at least one control flow intermediate instruction for executing at least one target intermediate instruction of the target block; generating a target executable instruction set using the target block; generating a caller executable instruction set using the caller block and using at least one computer control instruction for calling the target executable instruction set when the caller executable instruction set is executed by the caller processing unit and the target executable instruction set is executed by the target processing unit; configuring the caller processing unit to execute the caller executable instruction set; and configuring the target processing unit to execute the target executable instruction set. Identifying the caller block and the target block in the intermediate representation of the software program enables dynamic generation of the caller executable instruction set and additional or alternative target executable instruction sets, such as during runtime of the software program, thereby enabling dynamic configuration of the caller processing unit and additional or alternative target processing unit. The dynamic configuration of the caller processing unit and additional or alternative target processing unit facilitates improving the performance of a system executing the software program by delegating execution of the caller block and additional or alternative target block to one or more coprocessors.
[0013] According to a second aspect of the present invention, a method for executing a software program includes identifying, in an intermediate representation of the software program including a plurality of blocks, each block associated with one of a plurality of execution blocks of the software program and comprising an intermediate instruction set, a caller block including at least one control flow intermediate instruction for executing at least one target intermediate instruction of the target block, and the target block; generating a target executable instruction set using the target block; if the caller executable instruction set is executed by a caller processing unit of the plurality of processing units and the target executable instruction set is executed by a target processing unit of the plurality of processing units, generating a caller executable instruction set using the caller block and at least one computer control instruction for calling the target executable instruction set; configuring the caller processing unit to execute the caller executable instruction set; and configuring the target processing unit to execute the target executable instruction set.
[0014] According to a third aspect of the present invention, a software program product for executing a software program includes a non-transitory computer-readable storage medium; an intermediate representation of the software program including a plurality of blocks, each block associated with one of a plurality of execution blocks of the software program and comprising an intermediate instruction set; first program instructions for identifying, in the intermediate representation, a caller block including at least one control flow intermediate instruction for executing at least one target-side intermediate instruction of the target-side block; second program instructions for generating a target-side executable instruction set using the target-side block; and second program instructions for generating a target-side executable instruction set when the caller-executable instruction set is executed by the caller processing unit of the plurality of processing units. and when the target-side executable instruction set is executed by a target processing unit of the plurality of processing units, the program includes third program instructions for generating the caller executable instruction set using the caller block and using at least one computer control instruction for calling the target-side executable instruction set, fourth program instructions for configuring the caller processing unit to execute the caller executable instruction set, and fifth program instructions for configuring the target processing unit to execute the target-side executable instruction set, wherein the first, second, third, fourth, and fifth program instructions are executed by at least one computer processor from a non-transitory computer-readable storage medium.
[0015] Referring to the first and second aspects, in a first possible implementation of the first and second aspects of the present invention, a first computer architecture of the calling processing unit is different from a second computer architecture of the target processing unit, and optionally at least one of the first computer architecture and the second computer architecture is selected from the group of computer architectures consisting of a complex instruction set computer (CISC) architecture, a reduced instruction set computer (RISC) architecture, an x86 family-based computer architecture, an IBM (International Business Machine) Power family-based computer architecture, and an ARM family-based computer architecture. Optionally, the target processing unit is selected from the group of processing units consisting of a central processing unit, a multi-core central processing unit (CPU), a data processing unit (DPU), a microcontroller unit (MCU), an accelerated processing unit (ACU), a field programmable gate array (FPGA), a coarse-grained reconfigurable architecture (CGRA), a neural network accelerator, an intelligence processing unit (IPU), an application specific integrated circuit (ASIC), a quantum computer, and an interconnected computing grid comprising a plurality of reconfigurable logic elements connected by a plurality of configurable data routing junctions. Optionally, the caller executable instruction set includes a plurality of translation instructions implementing an application binary interface applied to at least one control flow intermediate instruction to translate between a first computer architecture of the caller processing unit and a second computer architecture of the target processing unit.Optionally, the target block includes a plurality of target metadata values, and generating the target-executable instruction set includes generating a plurality of transformed target metadata values using the plurality of target metadata values according to a second computer architecture of the target processing unit. Using a caller processing unit having a computer architecture different from another computer architecture of the target processing unit facilitates reducing implementation costs, and additionally or alternatively, operating costs, of systems implemented in accordance with the present disclosure without significantly impacting system performance when executing software programs, by allowing at least one of the caller processing unit and the target processing unit to be less expensive and additionally or alternatively designed to consume less power than the other respective processing unit. Implementing an application binary interface applied to one or more control flow intermediate instructions facilitates delegation of the target block to the target processing unit for execution by the caller executable instruction set, thereby improving system performance when executing software programs. By generating a plurality of transformed target metadata values using a plurality of target metadata values in accordance with a second computer architecture of the target processing unit, execution of the target executable instruction set by the target processing unit and execution of the call executable instruction set by the call processing unit are facilitated in a common execution context, thereby improving flexibility in identifying target blocks to delegate to the target processing unit for execution and improving system performance when executing software programs.
[0016]
[0013] Referring to the first and second aspects, in a second possible implementation of the first and second aspects of the present invention, the target processing unit is further configured to provide to the caller processing unit at least one value generated by the target processing unit executing at least some of the target instruction set. Optionally, the caller processing unit is further configured to receive from the caller processing unit at least one value generated by the target processing unit executing at least some of the target instruction set. Optionally, the caller processing unit is further configured to provide to the target processing unit at least one argument value. Providing to the caller processing unit one or more values generated by the target processing unit executing at least some of the target instruction set, and additionally or alternatively providing by the caller processing unit one or more argument values to the target processing unit, facilitates delegation of target blocks to the target processing unit for execution, thereby improving performance of systems implemented in accordance with the present disclosure when running software programs.
[0017]
[0010] Referring to the first and second aspects, in a third possible implementation of the first and second aspects of the present invention, the target processing unit is further configured to instruct the caller processing unit to execute at least some of the caller-executable instruction set after executing at least some others of the target instruction set. Optionally, the caller processing unit is further configured to suspend execution of the caller-executable instruction set after executing at least one computer control instruction for invoking the target-executable instruction set, and execute at least some of the caller-executable instruction set in response to receiving instructions from the target processing unit. Invoking execution of at least some of the caller-executable instruction set by the target processing unit facilitates providing the target processing unit access to one or more computing resources connected to the target processing unit, thereby providing greater flexibility in identifying target blocks to delegate to the target processing unit for execution and improving system performance when running software programs.
[0018]
[0013] Referring to the first and second aspects, in a fourth possible implementation of the first and second aspects of the present invention, the caller executable instruction set includes at least one first memory access instruction to at least one memory address within an identified range of application memory addresses, and the target executable instruction set includes at least one second memory access instruction to at least one other memory address within the identified range of application memory addresses. Optionally, the identified range of application memory addresses is one of a physical memory address range, a virtual memory address range, a memory-mapped I / O address range, and a bus address range. Accessing the identified range of application memory addresses by both the caller executable instruction set and the target executable instruction set provides increased flexibility in identifying target blocks to delegate to the target processing unit for execution, improving system performance when running a software program.
[0019]
[0013] Referring to the first and second aspects, in a fifth possible implementation of the first and second aspects of the present invention, the caller executable instruction set includes accessing the at least one device using at least one device handle associated with the at least one device, and the target executable instruction set includes accessing the at least one device using the at least one device handle. Optionally, the at least one device handle is at least one of a network socket handle, an operating system kernel object handle, and a file descriptor. Accessing one or more devices by both the caller executable instruction set and the target executable instruction set improves flexibility in identifying target blocks to delegate to a target processing unit for execution, improving system performance.
[0020] Referring to the first and second aspects, in a sixth possible implementation of the first and second aspects of the present invention, the at least one hardware processor is further adapted to collect a plurality of statistics while executing at least a portion of the software program, and identify the caller block and the target block according to the plurality of statistics. Optionally, at least one of the plurality of statistics indicates one of an outcome of executing a control flow instruction, a data value of a variable of the software program, a memory access pattern, and a memory virtual address translation. Optionally, the at least one hardware processor is further adapted to insert a plurality of telemetry intermediate instructions into the intermediate representation of the software program for purposes of collecting the plurality of statistics. Identifying the caller block and the target block according to the plurality of statistics improves the accuracy of the identification, thereby improving system performance when executing the software program.
[0021]
[0013] Referring to the first and second aspects, in a seventh possible implementation of the first and second aspects of the present invention, the caller processing unit is at least one hardware processor. Having one or more hardware processors that identify the caller and target blocks that execute the caller executable instruction set enables run-time identification of the caller and target blocks and improves the accuracy of that identification, thereby improving system performance when running the software program.
[0022] Other systems, methods, features, and advantages of the present disclosure will be or become apparent to one with skill in the art upon examination of the following figures and detailed description. It is intended that all such additional systems, methods, features, and advantages be included within this description, be within the scope of the disclosure, and be protected by the accompanying claims.
[0023] Unless otherwise defined, all technical and / or scientific terms used herein have the same meaning as commonly understood by one of ordinary skill in the art to which the embodiments relate. Although methods and materials similar or equivalent to those described herein can be used in the practice or testing of the embodiments, exemplary methods and / or materials are described below. In case of conflict, the patent specification, including definitions, will control. Furthermore, the materials, methods, and examples are illustrative only and are not intended to be necessarily limiting.
[0024] Some embodiments are herein described, by way of example only, with reference to the accompanying drawings. While specific reference will now be made to the drawings in detail, it is emphasized that the details shown are for the purpose of illustrating and discussing the embodiments by way of example. In this regard, the description using the drawings will make apparent to those skilled in the art how the embodiments may be practiced. [Brief explanation of the drawings]
[0025] [Figure 1] FIG. 2 is a schematic block diagram of an exemplary software program according to some embodiments. [Figure 2] FIG. 1 is a schematic block diagram of an exemplary apparatus for executing software programs, according to some embodiments. [Figure 3] 1 is a flowchart that generally depicts an optional operational flow according to some embodiments. [Figure 4] FIG. 10 is a sequence diagram of another optional operational flow according to some embodiments. DETAILED DESCRIPTION OF THE INVENTION
[0026] Some coprocessors operate independently without being invoked by the system's primary processing unit (for example, a network interface coprocessor can process received network packets with little, if any, involvement from the primary processing unit). Other coprocessors receive instructions from the primary processing unit (for example, a graphics processing unit (GPU) receives instructions for rendering digital images).
[0027] When two processing units in a system work in tandem, it may be necessary for a caller processing unit to invoke an operation on a target processing unit, e.g., a primary processing unit to invoke a coprocessor. In another example, a coprocessor may invoke a primary processing unit to access resources that the coprocessor cannot access independently, e.g., non-volatile digital storage. In addition to the caller processing unit invoking the target processing unit, it may be necessary to receive one or more data values from the caller processing unit and pass them to the target processing unit, e.g., input arguments for an operation performed by the target processing unit. Furthermore, it may be necessary to receive one or more other data values from the target processing unit and pass them back to the caller processing unit, such as an outcome value calculated by the target processing unit.
[0028] In computing, the term application binary interface (ABI) refers to an interface between two binary program modules that describes, in a hardware-dependent format, how to access data and computational routines. The interface between two binary program modules may include the format of data structures. Additionally or alternatively, the interface may include calling conventions for providing data as input to, and additionally or alternatively reading data as output from, the computational routines.
[0029] In computing, the term architecture refers to the organization of components that make up a computer system and the semantics or meaning of the operations that guide the function of the computer system. As used herein, the term "homogeneous system" refers to a computing system that includes multiple processing units that all have a common architecture. For example, a computing system that includes multiple central processing units (CPUs) that have a common architecture is a homogeneous system. Similarly, the term "heterogeneous system" refers to a system that includes multiple processing units, in which at least one of the multiple processing units has an architecture that is different from the architecture of another of the multiple processing units. For example, a system that includes a CPU and a GPU is a heterogeneous system. Another example of a heterogeneous system is a system that includes a CPU and a field programmable gate array (FPGA) coprocessor. Another example of a heterogeneous system is a system that includes a CPU with a complex instruction set computer (CISC)-based architecture and another CPU with a reduced instruction set computer (RISC)-based architecture. An additional example of a heterogeneous system is a system having two or more CPUs, each supporting a different instruction set architecture (ISA), for example, one CPU supporting the Intel x86 ISA and another CPU supporting the Motorola 68000 series ISA, or one CPU supporting the ARM ISA and another CPU supporting the RISC-V ISA. In yet another example of a heterogeneous system, the heterogeneous system has a high-performance CPU that consumes high power and an efficient CPU that consumes low power.
[0030] When a software program including multiple execution blocks having a caller execution block and a target execution block is executed, the caller execution block is said to call the target execution block if the caller execution block includes one or more control flow instructions for executing one or more instructions of the target caller block. When a software program is executed by multiple processing units, the execution of the caller execution block by the caller processing unit may call the target execution block executed by the target processing unit. In such a case, for the caller execution block to call the target execution block, an instruction set executed by the caller processing unit must be generated according to an ABI that describes the interface to the target processing unit, i.e., the instruction set must implement the ABI. Optionally, implementing the ABI includes adding one or more translation instructions to the instruction set for translating between the architecture of the caller processing unit and another architecture of the target processing unit. Optionally, the one or more translation instructions are added to the instruction set executed by the caller processing unit. Optionally, the one or more translation instructions are added to other instructions executed by the target processing unit. Optionally, implementing the ABI includes organizing one or more data values in a memory area, such as a stack, according to another architecture of the target unit, e.g., according to another architecture's data encoding, another architecture's byte alignment, and another architecture's byte order.
[0031] Additionally, the execution state of the caller processing unit, for example, to share access rights to a file or memory region, and additionally or alternatively to share one or more data values, may need to be provided to the target processing unit via the ABI. Other examples of shared execution state include a network socket context, a view of a network topology, and a virtualization context such as Single Root Input / Output Virtualization (SRIOV). The execution state may include, but is not limited to, one or more of a thread identification value, a process identification value, an instruction address of an instruction to execute after execution of a return instruction (return address), and values of one or more formal arguments of a function. Optionally, the caller execution block and the target execution block access a common range of application memory addresses of the software program. Some examples of application memory addresses include, but are not limited to, physical memory addresses, virtual memory addresses, memory-mapped I / O addresses, and bus addresses. Optionally, the target execution block includes access to one or more devices of the computer processing system, for example, a disk drive or a network adapter. Optionally, one or more device handles associated with one or more devices need to be provided to the target processing unit via the ABI.
[0032] If one or more execution blocks to be executed by a coprocessor can be identified in advance, and if the coprocessor is known when compiling a software program from source files, one or more appropriate instruction sets can be generated to direct the coprocessor to execute the one or more execution blocks, although the performance improvement achieved by pre-generating instructions for a coprocessor is limited by the ability to identify tasks that, when delegated to one or more coprocessors, will improve system performance.
[0033] In a homogeneous system, where multiple processing units have a common architecture and therefore a common ABI, an execution block may be compiled and call another execution block to be executed by another processing unit without determining in advance which of the multiple processing units will execute the other execution block. However, the performance gains achieved in a homogeneous system are limited by the common architecture's support for dynamically allocated tasks. For example, if each of the multiple processing units is a CPU, delegating one or more floating-point arithmetic operations to another CPU may provide less performance gain than delegating one or more floating-point arithmetic operations to a floating-point processor.
[0034] A heterogeneous system optionally includes a first target processing unit having a first architecture and a second target processing unit having a second architecture. In such a heterogeneous system, an instruction set executed by a calling processing unit and invoking an execution block executed by the first target processing unit is generated according to a first ABI of the first architecture. In such a heterogeneous system, a second ABI of the second architecture may differ from the first ABI, so the instruction set cannot be used to invoke the same execution block when executed by the second target processing unit.
[0035] In computer programming, an intermediate representation of a computer program is a representation of a computer program in an abstract machine language that is not dedicated to any particular machine, but which describes the operation of the machine (processing unit).
[0036] In some embodiments described herein, the present disclosure proposes dynamically configuring a caller processing unit and a target processing unit using an intermediate representation of a software program. Optionally, the intermediate representation includes a plurality of blocks. According to such embodiments, using the intermediate representation, the caller processing unit is configured to execute a caller block of the plurality of blocks, the target processing unit is configured to execute a target block of the plurality of blocks, and the caller block calls the target block. To do so, in such embodiments, the present disclosure proposes using the intermediate representation to dynamically generate a caller executable instruction set using the caller block and a target executable instruction set using the target block, and configuring the caller processing unit to execute the caller executable instruction set and the target processing unit to execute the target executable instruction set. Optionally, executing the software program includes the caller processing unit executing the caller executable instruction set and the target processing unit executing the target executable instruction set. Optionally, executing the software program includes generating a caller executable instruction set and, additionally or alternatively, generating a target executable instruction set. Optionally, executing the software program includes configuring the caller processing unit to execute the caller executable instruction set and, additionally or alternatively, configuring the target processing unit to execute the target executable instruction set. Optionally, the dynamic generation of the caller executable instruction set and the target executable instruction set occurs during runtime, i.e., during just-in-time (JIT) compilation, of the software program. Optionally, a first architecture of the caller processing unit is different from a second architecture of the target processing unit.The use of intermediate representations of multiple blocks enables dynamic generation of caller executable instruction sets and target executable instruction sets and enables dynamic configuration of the caller and target processing units, thereby enabling dynamic selection of the caller and target processing units from multiple processing units. Dynamic configuration of the caller and target processing units facilitates improved system performance when executing the software program compared to static configuration of the caller and target processing units, such as improved latency and additionally or alternatively improved throughput.
[0037] One block of the multiple blocks of the intermediate representation may call another block of the intermediate representation by including one or more control flow intermediate instructions for executing one or more intermediate instructions of the other block. Examples of control flow intermediate instructions include a function call intermediate instruction, a jump intermediate instruction, and a conditional branch intermediate instruction. Optionally, the caller block and the target block are identified such that the caller block includes one or more control flow intermediate instructions for executing one or more target intermediate instructions of the target block.
[0038] Furthermore, the one or more control flow intermediate instructions optionally include the caller processing unit providing one or more input values, e.g., one or more formal arguments of a function, to the target processing unit. Furthermore, the target processing unit is optionally configured to provide one or more values generated by the target processing unit, e.g., an execution outcome of the target block, to the caller processing unit.
[0039] Furthermore, in some embodiments described herein, the caller block and the target block are identified according to a plurality of statistics collected during execution of at least a portion of the software program. Some examples of statistics are outcomes of executing control flow instructions, data values of variables of the software program, memory access patterns, and memory virtual address translations. Statistics such as these enable identification of one or more possible paths of execution of the software program. Identifying the caller block and the target block according to a plurality of statistics improves the accuracy of identifying the caller block and the target block in a manner that improves system performance when executing the software program. Optionally, a plurality of telemetry intermediate instructions are inserted into the intermediate representation of the software program for the optional purpose of collecting a plurality of statistics.
[0040] Before describing at least one embodiment in detail, it is to be understood that the embodiments are not necessarily limited in their application to the details of construction and the arrangements of components and / or methods set forth in the following description and / or illustrated in the drawings and / or examples. Implementations described herein are capable of other embodiments or of being practiced or carried out in various ways.
[0041] Embodiments may be systems, methods, and / or computer program products, which may include computer-readable storage medium(s) having computer-readable program instructions thereon for causing a processor to perform aspects of the embodiments.
[0042] A computer-readable storage medium may be a tangible device that can hold and store instructions for use by an instruction-execution device. A computer-readable storage medium may be, for example, but is not limited to, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination thereof. More specific, non-exhaustive examples of computer-readable storage media include: a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or flash memory), a static random access memory (SRAM), a portable compact disk read-only memory (CD-ROM), a digital versatile disk (DVD), a memory stick, a floppy disk, and any suitable combination of the above. As used herein, a computer-readable storage medium should not be construed as a transitory signal itself, such as an electric wave or other freely propagating electromagnetic wave, an electromagnetic wave propagating through a waveguide or other transmission medium (e.g., a light pulse passing through a fiber optic cable), or an electrical signal transmitted over an electrical wire.
[0043] The computer-readable program instructions described herein can be downloaded from a computer-readable storage medium to each computing / processing device or to an external computer or external storage device over a network, such as the Internet, a local area network, a wide area network, and / or a wireless network. The network may include copper transmission cables, optical fiber transmissions, wireless transmissions, routers, firewalls, switches, gateway computers, and / or edge servers. A network adapter card or network interface of each computing / processing device receives the computer-readable program instructions from the network and transfers the computer-readable program instructions for storage on a computer-readable storage medium within the respective computing / processing device.
[0044] The computer-readable program instructions for carrying out the operations of an embodiment may be either source code or object code, natively compiled or just-in-time (JIT) compiled, written in any combination of one or more programming languages, including assembler instructions, instruction set architecture (ISA) instructions, machine language instructions, machine-dependent instructions, microcode, firmware instructions, state-setting data, or interpreted programming languages such as Smalltalk, C++, Java, object-oriented Fortran, JavaScript, object-oriented programming languages such as Python or others, and traditional procedural programming languages such as the "C" programming language, Fortran, or similar programming languages. The computer-readable program instructions may execute entirely on the user's computer, partially on the user's computer as a stand-alone software package, partially on the user's computer and partially on a remote computer, or entirely on a remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer via any type of network, including a local area network (LAN) or a wide area network (WAN), or may be connected to an external computer (e.g., via the Internet using an Internet service provider). In some embodiments, electronic circuitry, including, for example, programmable logic circuitry, field programmable gate arrays (FPGAs), or programmable logic arrays (PLAs), may execute computer-readable program instructions by utilizing state information of the computer-readable program instructions to personalize the electronic circuitry to implement aspects of the embodiments.
[0045] Aspects of the embodiments are described herein with reference to flowchart illustrations and / or block diagrams of methods, apparatus (systems), and computer program products according to the embodiments. It will be understood that each block of the flowchart illustrations and / or block diagrams, and combinations of blocks in the flowchart illustrations and / or block diagrams, can be implemented by computer-readable program instructions.
[0046] These computer-readable program instructions may be provided to a processor of a general-purpose computer, special-purpose computer, or other programmable data processing unit to create a machine, such that the instructions, executed by the processor of the computer or other programmable data processing unit, create means for performing the functions / acts specified in one or more blocks of the flowcharts and / or block diagrams. These computer-readable program instructions may also be stored on a computer-readable storage medium, which may direct a computer, programmable data processing unit, and / or other device to function in a particular manner, such as an article of manufacture containing instructions that implement aspects of the functions / acts specified in one or more blocks of the flowcharts and / or block diagrams.
[0047] Furthermore, computer-readable program instructions can be loaded into a computer, other programmable data processing unit, or other device to execute a series of operational steps on the computer, other programmable data processing unit, or other device to create a computer-implemented process, such that the instructions executing on the computer, other programmable data processing unit, or other device perform the functions / acts specified in one or more blocks of the flowcharts and / or block diagrams.
[0048] The flowcharts and block diagrams in the figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments. In this regard, each block in the flowcharts or block diagrams may represent a module, segment, or portion of instructions, including one or more executable instructions for implementing the specified logical function(s). In some alternative implementations, the functions noted in the blocks may occur out of the order noted in the figures. For example, two blocks shown in succession may in fact be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending on the functionality involved. It should also be noted that each block of the block diagrams and / or flowchart diagrams, and combinations of blocks in the block diagrams and / or flowchart diagrams, may be implemented by a special-purpose hardware-based system that performs the specified functions or acts, or a combination of special-purpose hardware and computer instructions.
[0049] 1, a schematic block diagram of an exemplary software program 100 is shown, according to some embodiments. In such embodiments, the software program's source code 101 includes multiple execution blocks, having a calling execution block 110 and a target execution block 120. Optionally, the calling execution block 110 calls the target execution block 120. Optionally, the calling execution block 110 includes one or more control flow source code instructions for executing one or more source code instructions of the target execution block 120.
[0050] Optionally, the intermediate representation 102 is a representation of the source code 101 that is not specific to a computer architecture, such as an intermediate language. Examples of intermediate languages used for the intermediate representation include a register transfer language (RTL), the C programming language, MATLAB precompiled code, the LLVM Developer Group intermediate representation language, the GNU Compiler Collection intermediate representation language, Microsoft P-code, and Java bytecode. Optionally, the intermediate representation 102 is a language that targets a virtual machine. Optionally, the intermediate representation 102 includes a plurality of blocks having a caller block 111 and a target block 121. Optionally, each of the plurality of blocks is associated with one of the plurality of execution blocks of the source code 101 and includes a plurality of intermediate instructions. In this example, the caller block 111 is associated with the caller execution block 110, and the target block 121 is associated with the target execution block 120.
[0051] In the association between each of the plurality of blocks on the intermediate representation 102 and one of the plurality of execution blocks of the source code 101, the intermediate representation 102 optionally holds an execution block 110 that calls the execution block 120. Optionally, the caller block 111 includes one or more control flow intermediate instructions for executing one or more target-side intermediate instructions of the target-side block 121.
[0052] For execution of the software program on one or more processing units, one or more executable instruction sets are generated for each of the blocks of the intermediate representation 102. Thus, a caller executable instruction set 112 is optionally generated for the caller block 111, and a target executable instruction set 122 is optionally generated for the target block 121.
[0053] 2, a schematic block diagram of an exemplary apparatus 200 for executing software programs is shown, according to some embodiments. In such embodiments, at least one hardware processor 201 is connected to a plurality of processing units, including, for example, a caller processing unit 210 and a target processing unit 220. Optionally, one or more of the plurality of processing units is selected from a group of processing units, including, but not limited to, a central processing unit, a multi-core central processing unit (CPU), a data processing unit (DPU), a microcontroller unit (MCU), an accelerated processing unit (ACU), a field programmable gate array (FPGA), a coarse-grained reconfigurable architecture (CGRA), a neural network accelerator, an intelligent processing unit (IPU), an application-specific integrated circuit (ASIC), a quantum computer, and an interconnected computing grid comprising a plurality of reconfigurable logic elements connected by a plurality of configurable data routing junctions.
[0054] Optionally, the caller processing unit has a first computer architecture selected from the group of computer architectures including, but not limited to, a complex instruction set computer (CISC) architecture, a reduced instruction set computer (RISC) architecture, an x86 family-based computer architecture, an IBM (International Business Machine) Power family-based computer architecture, and an ARM family-based computer architecture. Optionally, the target processing unit has a second computer architecture selected from the group of computer architectures. Optionally, the first computer architecture is different from the second computer architecture. Optionally, the first computer architecture is the second computer architecture.
[0055] Optionally, at least one hardware processor 201 is connected to the plurality of processing units via one or more digital communication networks, for example, a local area network (LAN) such as an Ethernet network or a Wi-Fi network, or a wide area network (WAN) such as the Internet. Optionally, the caller processing unit 210 is connected to the target processing unit 220, optionally via a digital communication network. Optionally, the target processing unit 220 is electrically coupled to the caller processing unit 210 via, for example, a memory bus, a peripheral component expansion bus, or an interconnect, for example, Intel QuickPath Interconnect (QPI) and Peripheral Component Interconnect Express (PCIe).
[0056] Optionally, device 200 includes memory 230, optionally connected to one or more of the plurality of processing units. Optionally, memory 230 is random access memory (RAM), including, for example, static RAM (SRAM), and additionally or alternatively, dynamic RAM (DRAM). Examples of DRAM include synchronous dynamic RAM (SDRAM), double data rate SDRAM (DDR), graphics double data rate SDRAM (GDDR), and low power double data rate SDRAM (LPDDR), as well as high bandwidth RAM (HBM). Optionally, device 200 includes non-volatile digital storage 233, optionally connected to one or more of the plurality of processing units. Examples of non-volatile digital storage include hard disk drives, solid state drives, network-attached storage, and storage networks.
[0057] Optionally, apparatus 200 includes one or more other devices 231, optionally connected to one or more of the processing units. Examples of devices include a display device and a network adapter. Optionally, one or more other devices 231 are electrically coupled to one or more processing units.
[0058] For the sake of brevity, hereinafter the term "processing unit" will also be used to mean "at least one hardware processor".
[0059] In some embodiments, to execute the software program 100, the device 200 implements the following optional methods.
[0060] 3, a flowchart is shown that generally depicts an operational flow of operation 300, according to some embodiments. In such embodiments, at 301, the processing unit 201 identifies a caller block 111 and a target block 121 within a plurality of blocks of the intermediate representation 102. Optionally, the caller block 111 includes one or more control flow intermediate instructions for executing one or more target-side intermediate instructions of the target block 121. At 311, the processing unit 201 optionally generates a target-side executable instruction set 122 using the target-side block 121.
[0061] At 313, processing unit 201 uses caller block 111 and optionally generates caller executable instruction set 112 using one or more computer control instructions. Optionally, the one or more computer control instructions call target executable instruction set 122 when caller executable instruction set 112 is executed by caller processing unit 210 and target executable instruction set 122 is executed by target processing unit 220. Optionally, caller executable instruction set 112 includes a plurality of translation instructions that implement an ABI applied to one or more control flow intermediate instructions to translate between a first computer architecture of caller processing unit 210 and a second computer architecture of target processing unit 220.
[0062] Optionally, the target block 121 includes a plurality of target metadata values. Optionally, some of the plurality of target metadata values describe an execution context for executing the target block 121. Examples of target metadata values include stack memory values and program counter values. Optionally, generating the target executable instruction set 122 includes generating a plurality of target metadata values transformed using the plurality of target metadata values in accordance with a second computer architecture of the target processing unit 220.
[0063] Optionally, caller executable instruction set 112 and target executable instruction set 122 both access a common range of application memory addresses, such that caller executable instruction set 112 includes one or more first memory access instructions to one or more memory addresses in the common range of application memory addresses, and target executable instruction set 122 includes one or more second memory access instructions to one or more other memory addresses in the common range of application memory addresses. Optionally, the common range of application memory addresses is a range of physical memory addresses, e.g., a range of physical addresses in memory 230. Optionally, the common range of application memory addresses is a range of virtual memory addresses. Optionally, the common range of application memory addresses is a range of bus addresses. Optionally, the common range of application memory addresses is a range of memory-mapped I / O addresses.
[0064] Optionally, the caller executable instruction set 112 and the target executable instruction set 122 share a common execution state, for example to provide common access privileges. Optionally, a caller thread identifier of the caller executable instruction set 112 is associated with a target thread identifier of the target executable instruction set 122. In a possible example, both the caller executable instruction set 112 and the target executable instruction set 122 access one or more devices 231 using a common device handle. Examples of device handles include network socket handles, operating system kernel object handles, and file descriptors. Thus, in this example, the caller executable instruction set 112 includes accessing one or more devices 231 using one or more device handles associated with the one or more devices 231, and in this example, the target executable instruction set 122 includes accessing one or more devices 231 using the one or more device handles.
[0065] Optionally, at 321, processing unit 201 configures caller processing unit 210 to execute caller executable instruction set 112. Optionally, at 323, processing unit 201 configures target processing unit 220 to execute target executable instruction set 122.
[0066] Optionally, the caller processing unit 210 is processing unit 201, such that processing unit 201 is configured to execute the caller executable instruction set 112. Optionally, processing unit 201 executes method 300 while executing software program 100, i.e., JIT compilation.
[0067] When executing the software program 100, the calling processing unit 210 and the target processing unit 220 can communicate with each other.
[0068] Referring now also to Figure 4, a sequence diagram of another optional flow of operations 400 is shown, according to some embodiments. In such embodiments, at 401, the caller processing unit 210 executes one or more computer control instructions to invoke the target-side executable instruction set 122. Optionally, configuring the caller processing unit 210 to execute the one or more computer control instructions includes configuring the caller processing unit 210 to provide one or more argument values to the target-side processing unit 220, such that at 401, the caller processing unit 210 optionally provides the one or more argument values to the target-side processing unit 220. Optionally, at 402, the target-side processing unit 220 executes at least some of the target-side executable instruction set 122. Optionally, at 402, the target-side processing unit 220 generates one or more values. Optionally, configuring target processing unit 220 to execute target executable instruction set 122 includes configuring target processing unit 220 to provide one or more values to caller processing unit 210, so that, at 410, target processing unit 220 optionally provides the one or more values to caller processing unit 210. Optionally, configuring caller processing unit 210 includes configuring caller processing unit 210 to receive the one or more values, so that, at 413, caller processing unit 210 optionally receives the one or more values.
[0069] Optionally, target side block 111 returns control of execution of software program 100 to caller block 112. Optionally, processing unit 201 optionally further configures target side processing unit 220 to instruct caller processing unit 210 to execute at least some of caller executable instruction set 112, so that, at 420, target side processing unit 220 optionally instructs caller processing unit 210 to execute at least some of caller executable instruction set 112, and at 422, caller processing unit 210 optionally executes at least some of caller executable instruction set 112. Optionally, target side processing unit 220 instructs caller processing unit 210 using software signals, which in some examples are operating system process signals, hardware queues, hardware mailboxes, messages, communication pipes, and shared memory areas.
[0070] Optionally, the target-side processing unit 220 executes 420 after executing some other ones of the target-side executable instruction set 122 .
[0071] Optionally, caller processing unit 210 is further configured to suspend execution of caller executable instruction set 112 after executing 401. Optionally, caller processing unit 210 executes 422 in response to receiving the instruction at 420. Optionally, target processing unit 220 instructs caller processing unit 210 to execute at least some of caller executable instruction set 112 to access resources not shared with target processing unit 220. Optionally, target processing unit 220 instructs caller processing unit 210 to execute at least some of caller executable instruction set 112 after completing execution of target executable instruction set 122.
[0072] Referring again to Figure 1 , optionally, at 330, processing unit 201 collects a plurality of statistics while executing at least a portion of software program 100. Optionally, at least one of the plurality of statistics is indicative of an outcome of executing a control flow instruction. Optionally, at least one other of the plurality of statistics is indicative of a value of software program 100, for example, an input value to a function or a conditional branch instruction. Optionally, at least one of the plurality of statistics is indicative of a memory access pattern, optionally a plurality of memory accesses to memory 230. Optionally, the memory access pattern includes an amount of accesses to a memory address or a range of memory addresses. Optionally, at least one of the plurality of statistics is indicative of memory address translation.
[0073] Optionally, in order to collect the plurality of statistical values, the processing unit 201 is further adapted to insert a plurality of telemetry intermediate instructions into the intermediate representation 102. Optionally, the processing unit 201 is further adapted to modify the software program using a hot patch technique while the software program is running, for the purpose of collecting the plurality of statistical values.
[0074] Optionally, the processing unit 201 receives at least some of the plurality of statistical values from one or more of the plurality of processing units.
[0075] Optionally, the processing unit 201 identifies 301 the caller block and the target block according to a plurality of statistics.
[0076] The descriptions of various embodiments are presented for illustrative purposes and are not intended to be exhaustive or limited to the disclosed embodiments. Many modifications and variations will be apparent to those skilled in the art without departing from the scope and spirit of the described embodiments. The terms used herein have been selected to best explain the principles of the embodiments, practical applications or technical improvements to technology found in the market, or to enable those skilled in the art to understand the embodiments disclosed herein.
[0077] During the life of the patent that matures from this application, many related intermediate representations and computer architectures will be developed, and the scope of the terms "intermediate representation" and "computer architecture" is intended to include all such new technologies a priori.
[0078] As used herein, the term "about" means ±10%.
[0079] The terms "comprises," "comprising," "includes," "including," "having," and their cognates mean "including, but not limited to." This term encompasses the terms "consisting of" and "consisting essentially of."
[0080] The phrase "consisting essentially of" means that the composition or method may include additional components and / or steps, but only if the additional components and / or steps do not materially alter the basic and novel characteristics of the claimed composition or method.
[0081] As used herein, the singular forms "a," "an," and "the" include plural referents unless the context clearly indicates otherwise. For example, the terms "a compound" or "at least one compound" can include multiple compounds, including mixtures thereof.
[0082] The word "exemplary" is used herein to mean "serving as an example, instance, or illustration." Any embodiment described as "exemplary" is not necessarily to be construed as preferred or advantageous over other embodiments and / or to exclude the incorporation of features from other embodiments.
[0083] The word "optionally" is used herein to mean "provided in some embodiments and not provided in other embodiments." Any particular embodiment may include multiple "optional" features unless such features are inconsistent.
[0084] Throughout this application, various embodiments may be presented in a range format. It should be understood that the description in range format is merely for convenience and brevity and should not be construed as an inflexible limitation on the scope of the embodiments. Accordingly, the description of a range should be considered to have specifically disclosed not only each individual numerical value within that range, but also all possible subranges. For example, a description of a range such as "1 to 6" should be considered to have specifically disclosed subranges such as "1 to 3," "1 to 4," "1 to 5," "2 to 4," "2 to 6," "3 to 6," etc., as well as each individual numerical value within that range, e.g., 1, 2, 3, 4, 5, and 6. This applies regardless of the breadth of the range.
[0085] Whenever a numerical range is given herein, it is meant to include any recited number (fractional or integer) within the range given. The phrases "ranging / ranges between" a first and second designator number and "ranging / ranges from" a first designator number "to" a second designator number are used interchangeably herein and are meant to include the first and second designators and all fractional and integer numbers therebetween.
[0086] It is understood that certain features of embodiments that are, for clarity, described in the context of separate embodiments, can also be provided in combination in a single embodiment. Conversely, various features of embodiments that are, for brevity, described in the context of a single embodiment, can also be provided separately or in any suitable subcombination or as preferred in any other described embodiment. Particular features described in the context of various embodiments should not be considered essential features of those embodiments, except to the extent that the embodiments cannot function without those elements.
[0087] While the embodiments have been described in connection with specific embodiments thereof, it is evident that many alternatives, modifications, and variations will be apparent to those skilled in the art. Accordingly, it is intended to embrace all such alternatives, modifications, and variations that fall within the spirit and broad scope of the appended claims.
[0088] It is the intention of the applicants (applicants) that all publications, patents, and patent applications mentioned herein be incorporated by reference in their entireties, as if each individual publication, patent, or patent application was specifically and individually indicated to be incorporated by reference herein. Furthermore, citation or identification of any reference in this application should not be construed as an admission that such reference is available as prior art to the present invention. Section headings, if used, should not be construed as necessarily limiting. Additionally, any priority document(s) of this application are hereby incorporated by reference in their entireties.
Claims
1. An apparatus (200) for executing a software program (101), comprising: A system including a plurality of processing units (210, 220) and at least one hardware processor (201); The at least one hardware processor: In an intermediate representation (102) of the software program comprising a plurality of blocks, each block being associated with one of a plurality of execution blocks of the software program and comprising an intermediate instruction set, a caller block (111) comprising at least one control flow intermediate instruction for executing at least one target-side intermediate instruction of the target-side block (121) and the target-side block (121) are identified (301); generating (311) a target-side executable instruction set (122) using the target-side blocks; generating (313) the caller executable instruction set (122) using the caller block and using at least one computer control instruction for calling the target executable instruction set, if the caller executable instruction set is to be executed by a caller processing unit (210) of the plurality of processing units and the target executable instruction set is to be executed by a target processing unit (220) of the plurality of processing units; configuring (321) the caller processing unit to execute the caller executable instruction set; configuring the target processing unit to execute the target executable instruction set (323); The apparatus is adapted to:
2. 2. The apparatus of claim 1, wherein the target processing unit is further configured to provide (410) to the caller processing unit at least one value produced by the target processing unit executing (402) at least some of the target executable instructions.
3. 3. The apparatus of claim 2, wherein the caller processing unit is further configured to receive (413) from the caller processing unit the at least one value produced by the target processing unit executing at least some of the target-executable instruction set.
4. The apparatus of claim 1 , wherein the caller processing unit is further configured to provide (410) a value of at least one argument to the target processing unit.
5. 2. The apparatus of claim 1, wherein the target processing unit is further configured to instruct (420) the caller processing unit to execute at least some of the caller executable instruction set after executing at least some other of the target executable instruction set.
6. The calling processing unit further comprises: suspending execution of the caller executable instruction set after executing the at least one computer control instruction for calling the target executable instruction set; Executing (422) the at least some of the caller executable instruction set in response to receiving instructions from the target processing unit. The device according to claim 5 , configured to:
7. 2. The apparatus of claim 1, wherein the target-side processing unit is selected from the group of processing units consisting of a central processing unit, a multi-core central processing unit (CPU), a data processing unit (DPU), a microcontroller unit (MCU), an accelerated processing unit (ACU), a field programmable gate array (FPGA), a coarse-grained reconfigurable architecture (CGRA), a neural network accelerator, an intelligence processing unit (IPU), an application specific integrated circuit (ASIC), a quantum computer, and an interconnected computing grid comprising a plurality of reconfigurable logic elements connected by a plurality of configurable data routing junctions.
8. The apparatus of claim 1 , wherein a first computer architecture of the calling processing unit is different from a second computer architecture of the target processing unit.
9. 9. The apparatus of claim 8, wherein at least one of the first computer architecture and the second computer architecture is selected from the group of computer architectures consisting of a complex instruction set computer (CISC) architecture, a reduced instruction set computer (RISC) architecture, an x86 family-based computer architecture, an IBM® (International Business Machine) Power family-based computer architecture, and an ARM family-based computer architecture.
10. 9. The apparatus of claim 8, wherein the caller executable instruction set comprises a plurality of translation instructions implementing an application binary interface applied to the at least one control flow intermediate instruction to translate between the first computer architecture of the caller processing unit and the second computer architecture of the target processing unit.
11. the target-side block comprises a plurality of target-side metadata values; 9. The apparatus of claim 8, wherein generating the target-side executable instruction set comprises generating a plurality of target-side metadata values transformed using the plurality of target-side metadata values in accordance with the second computer architecture of the target-side processing unit.
12. the caller executable instruction set comprises at least one first memory access instruction to at least one memory address within an identified range of application memory addresses; The apparatus of claim 1 , wherein the target-side executable instruction set comprises at least one second memory access instruction to at least one other memory address within the identified range of application memory addresses.
13. 13. The apparatus of claim 12, wherein the identified range of application memory addresses is one of a physical memory address range, a virtual memory address range, a memory-mapped I / O address range, and a bus address range.
14. the caller executable set of instructions comprising accessing at least one device using at least one device handle associated with the at least one device; The apparatus of claim 1 , wherein the target-side executable instruction set comprises accessing the at least one device using the at least one device handle.
15. 15. The apparatus of claim 14, wherein the at least one device handle is at least one of a network socket handle, an operating system kernel object handle, and a file descriptor.
16. The at least one hardware processor: collecting (330) a plurality of statistics during execution of at least a portion of the software program; identifying the caller block and the target block according to the plurality of statistics (301); The apparatus of claim 1 further adapted to:
17. 17. The apparatus of claim 16, wherein at least one of the plurality of statistics indicates one of an outcome of executing a control flow instruction, a data value of a variable of the software program, a memory access pattern, and a memory virtual address translation.
18. The at least one hardware processor:
17. The apparatus of claim 16, further adapted to insert a plurality of telemetry intermediate instructions into the intermediate representation of the software program for purposes of collecting the plurality of statistics.
19. The apparatus of claim 1 , wherein the calling processing unit is the at least one hardware processor.
20. A method (300) for executing a software program (101), comprising: In the intermediate representation of the software program comprising a plurality of blocks, each block being associated with one of a plurality of execution blocks of the software program and comprising an intermediate instruction set, at least one computer processor identifies (301) a caller block (111) comprising at least one control flow intermediate instruction that causes at least one processing unit (210, 220) executing the target block to execute at least one target intermediate instruction of the target block, and the target block (121); generating (311) a target-side executable instruction set (112) using the target-side blocks by the at least one computer processor; generating (313), by the at least one computer processor, the caller executable instruction set (112) using the caller block and at least one computer control instruction for calling the target executable instruction set, if the caller executable instruction set is executed by a caller processing unit (210) of a plurality of processing units (210, 220) and the target executable instruction set is executed by a target processing unit (220) of the plurality of processing units; configuring (321) the caller processing unit to execute, by the at least one computer processor, the caller executable instruction set; configuring (323) the target processing unit to execute the target-executable instruction set by the at least one computer processor; A method comprising:
21. A software program comprising: first program instructions for causing at least one computer processor to identify a caller block and a target block in an intermediate representation of the software program comprising a plurality of blocks, each block being associated with one of a plurality of executable blocks of the software program and comprising a set of intermediate instructions, the caller block comprising at least one control flow intermediate instruction that causes at least one processing unit executing the target block to execute at least one target intermediate instruction of the target block; second program instructions for causing the at least one computer processor to generate a target-side executable instruction set using the target-side blocks; third program instructions for causing the at least one computer processor to generate a caller executable instruction set using the caller block and using at least one computer control instruction for calling the target executable instruction set when the caller executable instruction set is executed by a caller processing unit of a plurality of processing units and the target executable instruction set is executed by a target processing unit of the plurality of processing units; fourth program instructions for causing the at least one computer processor to configure the calling processing unit to execute the calling executable instruction set; fifth program instructions for causing the at least one computer processor to configure the target processing unit to execute the target-executable instruction set; A software program comprising:
Citation Information
Patent Citations
Program execution method, program, and program execution system
JP2007334643A
Parallel software execution method for processor
JP2011028705A
Information processing device, compiling method, and compiling program
JP2019144857A
Generating object code from intermediate code that includes hierarchical sub-routine information
US20160364216A1
Software application performance enhancement
WO2010019254A1