Method and system for processing program for parallel processing purposes, storage medium having stored thereon program getting program processing executed for parallel processing purposes, and storage medium having stored thereon instruction set to be executed in parallel
Abstract
In a program processing procedure specially designed to perform compilation for parallel processing purposes, a method and system for increasing the program execution rate of a target machine is provided. A compiler front end translates source code into intermediate code that has been divided into basic blocks. A parallelizer converts the intermediate code, which has been generated by the compiler front end, into a parallelly executable form. An execution order determiner determines the order of the basic blocks to be executed. An expanded basic block parallelizer subdivides the intermediate code, which has already been divided into the basic blocks, into execution units, each of which is made up of parallelly executable instructions, following the order determined and on the basic block basis. When a particular one of the basic blocks is subdivided into execution units, an instruction belonging to the first execution unit of the next basic block, which has already been subdivided into execution units, is also used. Finally, an object code generator translates the intermediate code, which has been subdivided into the execution units by the parallelizer, into object code.
Claims
exact text as granted — not AI-modified1 - 22 (canceled).
23 . A method for processing a program for parallel processing purposes, the method comprising the steps of:
a) subdividing each of a plurality of basic blocks, into which program code has been divided, into a multiplicity of execution units, each said execution unit being made up of parallelly-executable instructions; and b) combining two of the execution units, which are located just before and after a basic block boundary, into a single execution unit if these execution units are executable in parallel.
24 . The method of claim 23 , wherein the step b) comprises analyzing dependence between instructions belonging to the two execution units located just before and after the basic block boundary, and
wherein it is determined based on the analyzed dependence between the instructions whether or not these execution units located just before and after the basic block boundary are combinable into the single execution unit.
25 . The method of claim 23 , wherein in the step a), an execution boundary code indicating the identity as boundary between an associated pair of the execution units is added to each said basic block boundary, and
wherein in the step b), if the execution units located just before and after the basic block boundary are executable in parallel, the execution boundary code that has been added to the basic block boundary is removed.
26 . The method of claim 23 , wherein in the step a), includes the steps of: analyzing dependence among the instructions included in each said basic block; and rearranging the instructions in each said basic block based on the analyzed dependence, and
wherein in the rearranging step, instructions, which impose less strict constraints on resources of a target machine for executing the program, are selected preferentially as respective instructions belonging to first and last execution units of each said basic block.
27 . The method of claim 26 , wherein when the instructions belonging to the first and last execution units of the basic block are selected in the rearranging step, an instruction that is executable only by itself during a clock cycle by the target machine is given a lower priority.
28 . The method of claim 23 , wherein the step a) includes the steps of:
analyzing dependence among the instructions included in each said basic block; and rearranging the instructions in each said basic block based on the analyzed dependence, and wherein when instructions belonging to first and last execution units of each said basic block are selected in the rearranging step, an instruction with a short word length is given a higher priority.
29 . A method for processing a program for parallel processing purposes, the method comprising the step of a) subdividing each of a plurality of basic blocks, into which program code has been divided, into a multiplicity of execution units, each said execution unit being made up of parallelly-executable instructions,
wherein in the step a), a particular one of the basic blocks is subdivided into a set of execution units along with an instruction belonging to one of the other execution units that is closest to the particular basic block, the closest execution unit belonging to another set of execution units, into which another one of the basic blocks that is adjacent to, and combinable with, the particular basic block has already been subdivided.
30 . The method of claim 29 , wherein in the step a), one of the basic blocks that is located just before the particular basic block is used as the combinable basic block, and
wherein the particular basic block, along with the instruction belonging to the last execution unit of the combinable basic block, is subdivided into the set of execution units.
31 . The method of claim 29 , wherein in the step a), one of the basic blocks that is located just after the particular basic block is used as the combinable basic block, and
wherein the particular basic block, along with the instruction belonging to the first execution unit of the combinable basic block, is subdivided into the set of execution units.
32 . The method of claim 29 , wherein in the step a), each said basic block is subdivided into the execution units sequentially in a forward direction from the beginning toward the end of the program.
33 . The method of claim 29 , wherein in the step a), each said basic block is subdivided into the execution units sequentially in a backward direction from the end toward the beginning of the program.
34 . The method of claim 29 , wherein in the step a), one of the basic blocks that belongs to the innermost loop is subdivided into the execution units preferentially.
35 . The method of claim 29 , further comprising the step b) of subdividing each said basic block of the program code into another set of execution units independent of adjacent ones of the basic blocks,
wherein result of the steps a) and b) are compared to each other and one of these steps a) and b) that results in the smaller number of execution units is adopted.
36 . A system for processing a program for parallel processing purposes, the system comprising:
an intra basic block parallelizer for subdividing each of a plurality of basic blocks, into which program code has been divided, into a multiplicity of execution units, each said execution unit being made up of parallely-executable instructions; and a basic block boundary parallelizer for combining two of the execution units, which are located just before and after a basic block boundary, into a single execution unit if these execution units are executable in parallel.
37 . A program processor for executing compilation for parallel processing purposes, the processor comprising:
a compiler front end for translating source code into intermediate code by dividing the source code into a plurality of basic blocks; a parallelizer for converting the intermediate code into code in a parallelly-executable form; and an object code generator for translating the intermediate code in the form converted by the parallelizer into object code executable by a target machine, wherein the parallelizer includes: an intra basic block parallelizer for subdividing each of a plurality of basic blocks, into which the intermediate code has been divided, into a multiplicity of execution units, each said execution unit being made up of parallelly-executable instructions; and a basic block boundary parallelizer for combining two of the execution units, which are located just before and after a basic block boundary, into a single execution unit if these execution units are executable in parallel.
38 . A system for processing a program for parallel processing purposes, the system comprising:
an expanded basic block parallelizer for subdividing each of a plurality of basic blocks, into which program code has been divided, into a multiplicity of execution units, each said execution unit being made up of parallelly-executable instructions, wherein the expanded basic block parallelizer subdivides a particular one of the basic blocks into a set of execution units along with an instruction belonging to one of the other execution units that is closest to the particular basic block, the closest execution unit belonging to another set of execution units, into which another one of the basic blocks that is adjacent to, and combinable with, the particular basic block has already been subdivided.
39 . A program processor for executing compilation for parallel processing purposes, the processor comprising:
a compiler front end for translating source code into intermediate code by dividing the source code into a plurality of basic blocks; a parallelizer for converting the intermediate code into code in a parallelly-executable form; and an object code generator for translating the intermediate code in the form converted by the parallelizer into object code executable by a target machine, wherein the parallelizer includes an expanded basic block parallelizer for subdividing each of a plurality of basic blocks, into which the intermediate code has been divided, into a multiplicity of execution units, each said execution unit being made up of parallelly-executable instructions, wherein the expanded basic block parallelizer subdivides a particular one of the basic blocks into a set of execution units along with an instruction belonging to one of the other execution units that is closest to the particular basic block, the closest execution unit belonging to another set of execution units, into which another one of the basic blocks that is adjacent to, and combinable with, the particular basic block has already been subdivided.
40 . A storage medium having stored thereon a program for a program processing procedure executed by a computer for parallel processing purposes, the program processing procedure comprising the steps of:
a) subdividing each of a plurality of basic blocks, into which program code has been divided, into a multiplicity of execution units, each said execution unit being made up of parallelly-executable instructions; and b) combining two of the execution units, which are located just before and after a basic block boundary, into a single execution unit if these execution units are executable in parallel.
41 . A storage medium having stored thereon a program for a program processing procedure executed by a computer through compilation for parallel processing purposes, the program processing procedure comprising the steps of:
a) translating source code into intermediate code by dividing the source code into a plurality of basic blocks; b) subdividing each said basic block of the intermediate code into a multiplicity of execution units, each said execution unit being made up of parallelly-executable instructions; c) combining two of the execution units, which are located just before and after a basic block boundary, into a single execution unit if these execution units are executable in parallel; d) translating the intermediate code in the form converted in the steps b) and c) into object code executable by a target machine.
42 . A storage medium having stored thereon a program getting a program processing procedure executed by a computer for parallel processing purposes, the program processing comprising the step of
subdividing each of a plurality of basic blocks, into which program code has been divided, into a multiplicity of execution units; each said execution unit being made up of parallelly-executable instructions, wherein a particular one of the basic blocks is subdivided into a set of execution units along with an instruction belonging to one of the other execution units that is closest to the particular basic block, the closest execution unit belonging to another set of execution units, into which another one of the basic blocks that is adjacent to, and combinable with, the particular basic block has already been subdivided.
43 . A storage medium having stored thereon a program getting a program processing procedure executed by a computer through compilation for parallel processing purposes, the program processing procedure comprising the steps of:
a) translating source code into intermediate code by dividing the source code into a plurality of basic blocks; b) subdividing each said basic block of the intermediate code into a multiplicity of execution units, each said execution unit being made up of parallelly-executable instructions; and c) translating the intermediate code in the form processed in the step b) into object code executable by a target machine, wherein a particular one of the basic blocks is subdivided into a set of execution units along with an instruction belonging to one of the other execution units that is closest to the particular basic block, the closest execution unit belonging to another set of execution units, into which another one of the basic blocks that is adjacent to, and combinable with, the particular basic block has already been subdivided.
44 . A storage medium having stored thereon a set of instructions to be executed in parallel,
wherein the instruction set is grouped into a plurality of execution units, each said execution unit being made up of parallelly-executable instructions, and wherein at least one of the execution units is located across a boundary between an associated pair of the basic blocks and is made up of instructions executable in parallel.
45 . A storage medium having stored thereon a set of instructions parallelized by a program processor.
wherein the instruction set is grouped into a plurality of execution units, each said execution unit being made up of instructions executed in parallel, and wherein at least one of the execution units includes a last instruction of a first basic block and another instruction of a second basic block different from the first basic block.
46 . A processor for executing an instruction set stored in a storage medium, said storage medium having stored thereon a set of instructions parallelized by a program processor,
wherein the instruction set is grouped into a plurality of execution units, each said execution unit being made up of instructions executed in parallel, and wherein at least one of the execution units includes a last instruction of a first basic block and another instruction of a second basic block different from the first basic block.
47 . The processor of claim 46 , wherein a number of unit in which instructions are executed in parallel is variable.
48 . The processor of claim 47 , wherein an execution boundary code indicating a boundary between the execution units is added to the instruction set by the program processor.
49 . The processor of claim 48 , wherein said processor implements a variable-length instruction system.
50 . A method of processing a program for parallel processing, the method comprising the step of:
(a) dividing the program into a plurality of basic blocks, each of the plurality of basic blocks is an instruction set without any branch or interrupt in the middle thereof; (b) subdividing each of the plurality of basic blocks divided by step (a) into a multiplicity of execution units, each of the multiplicity of execution units being made up of parallelly-executable instructions; (c) determining whether two of the execution units, which are located just before and after a basic block boundary, are executable in parallel or not after step (b); and (d) combining the two of execution units into one single execution unit if the result of step (c) indicates that the two of the execution units are executable in parallel.Join the waitlist — get patent alerts
Track US2004230770A1 — get alerts on status changes and closely related new filings.
We store only your email — no account needed. See our privacy policy.