Self-priming loop execution for loop prolog instruction
AssigneeTexas Instruments Incorporated
InventorsRichard H. Scales, Natarajan (Nat) Seshan
Life of this patent
Estimating the term…
Abstract
A method of operating a multiple execution unit microprocessor in a software pipelined loop is disclosed. This method executes the loop body before the pipeline is fully initialized, thus replacing prolog instructions with additional loop iterations. The method has the potential to greatly reduce prolog size for many software pipelined loops. As a further aspect of the method, the loop results are insulated from any deleterious effects of loop body execution prior to full initialization—methods for accomplishing this are disclosed, including array overallocation, conditional execution of some loop body instructions, and register initialization.
Claims12
A method of operating a processor having multiple execution units in a pipelined loop to produce a first result, said method comprising the steps of:
- executing on said processor a first number of iterations of a pipelined loop kernel in steady-state pipeline operation;
- and
- executing on said processor at least one self-priming iteration of said loop kernel prior to said processor reaching steady-state pipeline operation and immediately prior to said step of executing said first number of iterations of said loop kernel.
A method of operating a processor having multiple execution units in a pipelined loop to produce a first result, said method comprising the steps of:
- executing on said processor a first number of iterations of a pipelined loop kernel in steady-state pipeline operation;
- executing on said processor at least one self-priming iteration of said loop kernel prior to said processor reaching steady-state pipeline operation and immediately prior to said step of executing said first number of iterations of said loop kernel;
- and
- insulating said first result from any deleterious effects of said step of executing at least one self-priming iteration of said loop kernel step by overallocating an output array, thereby providing valid memory locations for use by a store instruction executing prematurely during said step of executing at least one self-priming iteration of said loop kernel.
A method of operating a processor having multiple execution units in a pipelined loop to produce a first result, said method comprising the steps of:
- executing on said processor a first number of iterations of a pipelined loop kernel in steady-state pipeline operation;
- executing on said processor at least one self-priming iteration of said loop kernel prior to said processor reaching steady-state pipeline operation and immediately prior to said step of executing said first number of iterations of said loop kernel;
- and
- insulating said first result from any deleterious effects of said step of executing at least one iteration of said loop kernel step by presetting, prior to said step of executing said at least one self-priming iteration of said loop kernel, at least one register on said processor that is used during said step of executing said at least one self-priming iteration of said loop kernel to a value such that an instruction executing prematurely using said register produces a result harmless to said first result.
A method of operating a processor having multiple execution units in a pipelined loop to produce a first result, said method comprising the steps of:
- executing on said processor a first number of iterations of a pipelined loop kernel in steady-state pipeline operation;
- executing on said processor at least one self-priming iteration of said loop kernel prior to said processor reaching steady-state pipeline operation and immediately prior to said step of executing said first number of iterations of said loop kernel;
- and
- insulating said first result from any deleterious effects of said step of executing at least one iteration of said loop kernel step by conditioning execution of at least one instruction executing during said step of executing at least one self-priming iteration of said loop kernel upon a counter reaching a first value, executing said at least one instruction if said counter had reached said first value and not executing said at least one instruction if said counter has not reached said first value, said counter initially incrementing or decrementing with each iteration of said loop kernel, wherein said first value indicates that said at least one instruction has operands available for valid pipeline operation.
Dependencies are inferred from the claim text.