Modern computer systems often employ complex architectures that can include a variety of processing units, with varying configurations and capabilities. In a common configuration, all of the processing units are identical, or homogeneous. Less commonly, two or more non-identical or heterogeneous processing units can be used, with differing local memory storage. In this case, the differing processors will have associated local memory storage, which is employed to store data and code executing within the processing unit. Each processor can be configured with differing local memory storage and, extremely, some processors can be inherently unable to execute entire programs that are too large to fit in the local memory storage. In this case, those programs must be split into smaller pieces that fit within the processor's local memory storage. Currently, partitioning large programs into pieces that fit in the target processor's local memory storage is done by the programmer, which is a major usability issue that can increase the time and complexity of the programming task.
The utility of a computer system is achieved by the process of executing specially designed software, herein referred to as computer programs or codes, on the processing unit(s) of the system. These codes are typically produced by a programmer writing in a computer language and are prepared for execution on the computer system by the use of a compiler. The ease of the programming task, and the efficiency of the ultimate execution of the code on the computer system are greatly affected by the facilities offered by the compiler. Many modern simple compilers produce slowly executing code for a single processor. Other compilers have been constructed that produce relatively extremely rapidly executing code for one or more processors in a homogeneous multi-processing system.
In general, for preparing programs for execution on heterogeneous multi-processing systems with varying or otherwise limited local memory, typical modern systems require a programmer to use several compilers and laboriously combine the results of these efforts to construct the final code. To do this, the programmer must partition the source program in such a way that the appropriate program segment sizes are sent to the appropriate processors used to execute the program code. In particular, where certain processors in the system are not capable of storing the entirety of executing program code, the partitioned program must fit within the local memory storage of the processor that is to execute the program code. Furthermore, even where multiple processor types are designed to perform the same function and are configured with similar local memory storage, to maximize the performance of the system, the partitioning should assign those functions to the processors that are most expeditious in the performance of said function while orchestrating the movement of the partitioned program pieces into local storage as needed without unreasonable performance degradation.
Therefore, there is a need for a system and/or method for computer program code size partitioning for multiple memory multi-processing systems that addresses at least some of the problems and disadvantages associated with conventional systems and methods.