< previous page page_464 next page >

Page 464
of the execution of a sequence of blocks of instructions that always execute together. The block is initiated by a target of a branch instruction and is concluded by a branch instruction. Since an unconditional branch is always executed without altering the sequence of instruction execution, i.e., the instructions that are its predecessors or successors, it is a member of such a block. These blocks of instructions are called basic blocks1 (or branch subsets [302]). The last instruction in a basic block is always a branch instruction (conditional), called the trailing branch. Most algorithms for out-of-order instruction execution, or concurrent instruction execution, execute instructions only within a basic block. More complex algorithms have been developed to detect instruction concurrency between basic blocks [282, 302].
2. Resource Dependency. The last type of dependency that can occur among instructions is contention for a physical resource. For example:
DIV
R3, R1, R2
DIV
R6, R4, R5.

d87111c01013bcda00bb8640fdff6754.gif
While these instructions have no data dependencies or procedural dependencies, they both require the use of a divide unit. Since divide is a relatively infrequent operation, it is unlikely that a processor could accommodate two sequential divide operations without encountering a resource contention. Unfortunately, it is in the nature of code that resource requirements are not uniformly distributed across code segments. The probability of a relatively rare operation increases, given that there has already been a recent request for such an operation.
Some examples:
1. Floating-point resources. After a sequence of integer operations to get addresses' base and index values, there may be multiple (presumably independent) floating-point operations requesting respective resources. Contention is usually highest for ADD.F and MPY.F resources.
2. Load and store resources. Here, cache bandwidth is a limit as multiple instructions access (presumably independent) data operands. Contention occurs as a result of multiple DFs in the same cycle.
7.6.4 When and How to Detect Instruction Concurrency
There are three related issues here:
1. Detecting concurrency.
2. Dispatching concurrent instructions.
3. Scheduling execution of concurrent instructions.
d87111c01013bcda00bb8640fdff6754.gif d87111c01013bcda00bb8640fdff6754.gif
1Sometimes compilers restrict the notion of basic block to instruction sequences that end in a branch of any type. For the run-time environment considered here, such restrictions are unnecessary.

 
< previous page page_464 next page >