Method and apparatus for scheduling dynamic trace groups to reduce current swings in a dynamic compilation system
Original Publication Date: 2002-Sep-09
Included in the Prior Art Database: 2003-Jun-21
A dynamic compilation program is disclosed being specially adapted to schedule instructions to reduce current swings during the execution of scheduled instructions. According to this invention, a program is compiled dynamically from a first representation (e.g., a first instruction set architecture, or other means for representing a program such as a virtual machine code or byte code) to a second representation (e.g., an unchanged, modified, extended or subsetted first instruction set architecture, or a different second instruction set architecture) while ensuring the generated code does not exceed a defined maximum change of current drawn over a given time interval (di/dt). In one embodiment, the maximum permissible current change for a time interval (di/dt) is defined statically, e.g., during the program design cycle, or at boot time, in another embodiment, the maximum permissible current change for a time interval (di/dt) is defined dynamically, e.g., in response to measurement taken during system operation or other configuration steps. In one exemplary embodiment, the dynamic compilation program creates a target program consisting of tree regions, which have a single entry (root of the tree) and one or more exits (terminal nodes of the tree) as described herein below: The dynamic compilation algorithm interprets code when a fragment of source representation (i.e., the instruction set or byte code in its original representation) code is executed for the first time. As base representation primitives (e.g., instructions or byte codes) are interpreted, the instructions are also converted to execution primitives for the target instruction set. These execution primitives are then scheduled into target code fragments which are saved in a memory. Any untaken branches, i.e., branches off the currently interpreted and translated trace, are translated into calls to the dynamic compiler. Interpretation and translation stops when a stopping condition has been detected. A target code fragment of an instruction group is ended by a branch to the next target code fragment.