A method for parallel processing, in a system, natural concurrencies in streams of low level instructions contained in a program, each of the streams having a plurality of single entry-single exit (SESE) basic blocks (BBs), said system having a plurality of processor elements and a plurality of shared storage locations, said method comprising the steps of:
- statically adding intelligence representing the natural concurrencies existing within the instructions in each basic block, said step of adding comprising the steps of:
- (a) ascertaining the resource requirements of each instruction within each basic block to determine the natural concurrencies in each basic block,
- (b) identifying logical resource dependencies between instructions,
- (c) assigning condition code storage (CCs) to groups of resource dependent instructions, such that dependent instructions can execute on the same of different processor elements,
- (d) determining the earliest possible instruction firing time (IFT) for each of said instructions in each of said plurality of basic blocks,
- (e) adding said instruction firing times to each instruction in each of said plurality of basic blocks,
- (f) assigning a logical processor number (LPN) to each instruction in each of said basic blocks,
- (g) adding said logical processor numbers to each instruction in each of said basic blocks, and
- (h) repeating steps (a) through (g) until all basic blocks are processed for said program, and
- processing the instructions having the statically added intelligence in the system, the step of processing further comprising the steps of:
- (i) separately storing instructions delivered in the system based on the logical processor number,
- (j) selectively connecting the separately stored instructions to the processor element (PE) assigned to the logical processor number, said separately stored instructions being delivered in a predetermined order so that one instruction having the earliest instruction firing time is connected to a given processor element,
- (k) processing said one instruction from each of the separately stored instructions in each said connected processor element, and
- (l) repeating steps (i) through (k) until all instructions in each of said plurality of basic blocks for said program are processed.