IP Library Granted Patent US 9,811,340
Granted Patent B2
US 9,811,340 · App. 13/525,825 · Granted Nov 7, 2017

Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor

Inventors: Nikolay Kosarev (Yoshkar-Ola, RU); Jayesh Iyer (Bangalore, IN); Sergey Shishlov (Moscow, RU); Andrey Kluchnikov (Moscow, RU); Alexander Butuzov (Moscow, RU); Boris A. Babayan (Moscow, RU); Vladimir Penkovski (Folsom, CA); Sergey V. Bulenkov (Moscow, RU)
Assignee: Intel Corporation
G06F9/38G06F9/321G06F9/3834G06F9/3851G06F9/3855
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,811,340
App. No.
13/525,825
Granted
Nov 7, 2017
Kind
B2
Abstract

A computer system, a processor in a computer and a computer-implemented method executable on a computer processor involve dividing a set of computer instructions arranged in a sequential program order into a plurality of instruction sequences. Instructions within each sequence are arranged according to the program order. An increment value is assigned to a preceding instruction in each sequence. The increment value is equal to a difference between a program order value of a subsequent instruction in the sequence and a program order value of the preceding instruction. The processor calculates the program order value of each subsequent instruction based on the program order value and the increment value of a corresponding preceding instruction in the same sequence.

Claims (50)

1. A computer system that is configured to perform the following:

dividing a set of computer instructions arranged in a sequential program order into a plurality of instruction sequences, wherein instructions within each sequence are arranged and executed according to the program order, but executed out-of-order relative to instructions in other sequences;

assigning increment values to individual program-ordered (PO) instructions in each sequence, wherein each increment value is equal to a difference between a program order value of a subsequent PO instruction in the sequence and a program order value of the PO instruction, and wherein the increment value is encoded into the PO instruction; and

at a processor of the system, reconstructing the program order of instructions in each sequence relative to the program order of instructions in the other sequences by:

calculating the program order value of PO instructions based on the program order value and the increment value of a preceding PO instruction in the same sequence, wherein the calculating is repeated for each sequence, and

setting the program order value of non-PO instructions to the calculated program order value of a next PO instruction.

2. The computer system of claim 1 , wherein the processor is a multi-strand out-of-order processor configured to execute each of the sequences as a separate strand.

3. The computer system of claim 1 , wherein the PO instructions include load instructions, store instructions and instructions that are capable of triggering interrupts.

4. The computer system of claim 1 , wherein the system is further configured to perform:

storing program order values of head instructions in each sequence, together with corresponding increment values assigned to the head instructions, as entries in a waiting buffer having a separate entry for each sequence; and

dispatching selected head instructions, together with their corresponding program order values, into a memory ordering buffer that performs the handling of data dependencies by retiring the instructions according to their reconstructed program order.

5. The computer system of claim 4 , wherein the system is further configured to perform:

simultaneously dispatching the program order values together with corresponding increment values of the selected head instructions to reconstruction units in the processor, which are configured to perform the calculating of the reconstructed program order values for instructions subsequent to the head instructions.

6. The computer system of claim 4 , wherein the system is further configured to perform:

setting a pointer value equal to a lowest program order value amongst the program order values of the selected head instructions that will be dispatched next in each of the strands; and

determining that an instruction can retire if the reconstructed program order of the instruction indicates that the instruction is older than the instruction associated with the pointer value.

7. The computer system of claim 1 , further comprising a compiler configured to perform the assigning of the increment values and to output machine code including the assigned increment values to the processor.

8. A processor, comprising:

an instruction fetch unit configured to obtain a set of computer instructions arranged in a sequential program order and divided into a plurality of instruction sequences, wherein:

instructions within each sequence are arranged and executed according to the program order, but executed out-of-order relative to instructions in other sequences, and

increment values are assigned to individual program-ordered (PO) instructions in each sequence, each increment value being equal to a difference between a program order value of a subsequent PO instruction in the sequence and a program order value of the PO instruction, and wherein the increment value is encoded into the PO instruction; and

a plurality of reconstruction units, each of which is configured to calculate the program order value of a PO instruction based on the program order value and the increment value of a preceding PO instruction in the same sequence, wherein the calculating is repeated for each sequence,

wherein the processor reconstructs the program order of instructions in each sequence relative to the program order of instructions in the other sequences by, in addition to the calculating of the program order values for the PO instructions, setting the program order value of non-PO instructions to the calculated program order value of a next PO instruction.

9. The processor of claim 8 , wherein the processor is a multi-strand out-of-order processor configured to execute each of the plurality of sequences as a separate strand.

10. The processor of claim 8 , wherein the PO instructions include load instructions, store instructions and instructions that are capable of triggering interrupts.

11. The processor of claim 8 , further comprising:

a waiting buffer that stores the program order values of head instructions in each sequence, together with corresponding increment values assigned to the head instructions, as entries in a waiting buffer having a separate entry for each sequence; and

a dispatch arrangement configured to dispatch selected head instructions, together with their corresponding program order values, into a memory ordering buffer that performs the handling of data dependencies by retiring the instructions according to their reconstructed program order.

12. The processor of claim 11 , wherein the dispatch arrangement is further configured to:

simultaneously dispatch the program order values together with corresponding increment values of the selected head instructions to the reconstruction units, which then perform the calculating of the reconstructed program order values for instructions subsequent to the head instructions.

13. The processor of claim 11 , further comprising:

a pointer calculation unit configured to set a pointer value equal to a lowest program order value amongst the program order values of the selected head instructions that have been dispatched, wherein the processor determines that an instruction can retire if the reconstructed program order of the instruction indicates that the instruction is older than the instruction associated with the pointer value.

14. The processor of claim 8 , wherein the processor obtains the plurality of sequences of computer instructions from a compiler that performs the assigning of the increment values.

15. A computer-implemented method, comprising:

dividing a set of computer instructions arranged in a sequential program order into a plurality of instruction sequences, wherein instructions within each sequence are arranged and executed according to the program order, but executed out-of-order relative to instructions in other sequences;

assigning increment values to individual program-ordered (PO) instructions in each sequence, wherein each increment value is equal to a difference between a program order value of a subsequent PO instruction in the sequence and a program order value of the PO instruction, and wherein the increment value is encoded into the PO instruction; and

at a processor of the system, reconstructing the program order of instructions in each sequence relative to the program order of instructions in the other sequences by:

calculating the program order value of PO instructions based on the program order value and the increment value of a PO instruction in the same sequence, wherein the calculating is repeated for each sequence, and

setting the program order value of non-PO instructions to the calculated program order value of a next PO instruction.

16. The method of claim 15 , wherein the processor is a multi-strand out-of-order processor configured to execute each of the plurality of sequences as a separate strand.

17. The method of claim 15 , wherein the PO instructions include load instructions, store instructions and instructions that are capable of triggering interrupts.

18. The method of claim 15 , further comprising:

storing program order values of head instructions in each sequence, together with corresponding increment values assigned to the head instructions, as entries in a waiting buffer having a separate entry for each sequence; and

dispatching selected head instructions, together with their corresponding program order values, into a memory ordering buffer that performs the handling of data dependencies by retiring the instructions according to their reconstructed program order.

19. The method of claim 18 , further comprising:

simultaneously dispatching the program order values together with corresponding increment values of the selected head instructions to reconstruction units in the processor, which are configured to perform the calculating of the reconstructed program order values for instructions subsequent to the head instructions.

20. The method of claim 18 , further comprising:

setting a pointer value equal to a lowest program order value amongst the program order values of the selected head instructions that will be dispatched next in each of the sequences; and

determining that an instruction can retire if the reconstructed program order of the instruction indicates that the instruction is older than the instruction associated with the pointer value.

21. The method of claim 15 , wherein the assigning of the increment values is performed at a compiler that outputs machine code including the assigned increment values to the processor.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 15, 2012
From: KOSAREV, NIKOLAY; IYER, JAYESH; SHISHLOV, SERGEY; KLUCHNIKOV, ANDREY; BUTUZOV, ALEXANDER; BABAYAN, BORIS A.; PENKOVSKI, VLADIMIR; BULENKOV, SERGEY
To: INTEL CORPORATION
Reel/Frame 029130/0537 →
Continuity (1)
Related Publication 20130339711A1 · Dec 19, 2013