US20040128490A1 - Using computation histories to make predictions - Google Patents

Using computation histories to make predictions Download PDF

Info

Publication number
US20040128490A1
US20040128490A1 US10/330,492 US33049202A US2004128490A1 US 20040128490 A1 US20040128490 A1 US 20040128490A1 US 33049202 A US33049202 A US 33049202A US 2004128490 A1 US2004128490 A1 US 2004128490A1
Authority
US
United States
Prior art keywords
computation history
instruction
computation
static
history
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
US10/330,492
Other versions
US7143272B2 (en
Inventor
Chris Wilkerson
Jared Stark
Renju Thomas
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority to US10/330,492 priority Critical patent/US7143272B2/en
Application filed by Intel Corp filed Critical Intel Corp
Assigned to INTEL CORPORATION reassignment INTEL CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: THOMAS, RENJU, STARK, JARED W., WILKERSON, CHRIS B.
Assigned to INTEL CORPORATION reassignment INTEL CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: THOMAS, RENJU, STARK, JARED W., WILKERSON, CHRIS B.
Priority to CN2003101129115A priority patent/CN1512325B/en
Priority to CN201110353106.6A priority patent/CN102591621B/en
Priority to CN2006101672158A priority patent/CN101140512B/en
Publication of US20040128490A1 publication Critical patent/US20040128490A1/en
Priority to US11/550,747 priority patent/US7624258B2/en
Publication of US7143272B2 publication Critical patent/US7143272B2/en
Application granted granted Critical
Expired - Fee Related legal-status Critical Current
Adjusted expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers

Definitions

  • This invention pertains to program execution, and more particularly to improving the efficiency in executing program instructions.
  • Modem processors include “pipelines”: at any moment, different parts of the processor are working on different instructions. For example, while the core of the central processing unit is executing an instruction, another part of the processor might be loading a data value from memory that will be needed by a future instruction.
  • branch processing One area of processor design that has received extensive study and thought is branch processing. Depending on an associated data value, after a branch instruction is executed, control may continue at one of two (or more) different points. This creates a problem for modern processors: until the outcome of the branch instruction is known, any preprocessing of later instructions may be in vain.
  • branch predictors try to make educated guesses. To accomplish this, they make certain assumptions.
  • One possible assumption is that the outcome at a particular branch instruction is dependent solely on the prior outcomes at that branch.
  • Another, more general assumption is that the outcome is dependent on some (fixed size) set of instructions preceding the branch instruction. There are other variations.
  • FIG. 1 shows a computer system executing a program according to the prior art.
  • computer system 105 includes computer 110 , installed into which is memory 115 .
  • program 130 Loaded in memory 115 is program 130 , a portion of which is shown in FIG. 1.
  • Program 130 includes branch instruction 135 .
  • a branch predictor may predict whether a branch is taken or not. As shown in row 145 , instruction 135 has branched more times than not (the counter is incremented each time the branch is taken, and decremented each time it is not). Thus, the branch predictor would guess that the branch will be taken again.
  • the branch predictor looks at instructions 150 (which include instruction 135 ) and hashes their program counters together. This produces an index that the branch predictor may use to access table 155 . As indicated at row 160 , using this approach, the branch predictor would guess that the branch will not be taken.
  • FIG. 1 shows a computer system executing a program according to the prior art.
  • FIG. 2 shows a computer system making predictions about instruction properties according to an embodiment of the invention.
  • FIG. 3 shows registers with associated computation histories in the computer system of FIG. 2, according to an embodiment of the invention.
  • FIG. 4 shows the generation of a computation history for a register of FIG. 3 from other registers, according to an embodiment of the invention.
  • FIG. 5 shows the generation of a computation history for a register of FIG. 3 without using computation histories for other registers, according to an embodiment of the invention.
  • FIG. 6 shows the generation of an index into a lookup table in the computer system of FIG. 2, according to an embodiment of the invention.
  • FIGS. 7 A- 7 B show a flowchart of the procedure for constructing computation histories for an instruction in the computer system of FIG. 2, according to an embodiment of the invention.
  • FIG. 8 shows a flowchart of the procedure for using one possible hash function to generate computation histories in the computer system of FIG. 2, according to an embodiment of the invention.
  • FIG. 9 shows a flowchart of the procedure for using a computation history to make a prediction about a property of an instruction in the computer system of FIG. 2, according to an embodiment of the invention.
  • FIG. 2 shows a computer system making predictions about instruction properties according to an embodiment of the invention.
  • computer system 202 is very similar to computer system 105 of FIG. 1.
  • Computer system 202 includes computer 205 , monitor 210 , keyboard 215 , and mouse 220 .
  • a person skilled in the art will recognize that although computer system 202 is shown as a desktop personal computer, the invention is not limited to any specific type of computer.
  • computer system 202 could also be an Internet appliance, lacking any of computer 205 , keyboard 215 , or mouse 220 .
  • Computer system 202 could also be, among others, a personal digital assistant (PDA), or a wireless computer.
  • Optional equipment not shown as part of computer system 202 in FIG. 2 are other input/output devices, such as a printer or a modem.
  • FIG. 2 are some of the conventional internal components of computer system 202 : e.g., a central processing unit, file system, network interface, etc.
  • Computer 205 includes computation history generator 225 .
  • Computation history generator 225 is responsible for generating computation histories for instructions in program 130 . Specific about what a computation history is and how it is used is discussed further with reference to FIGS. 3 - 5 .
  • computation history generator 225 is part of a central processing unit for computer 205 .
  • computation history generator 225 is a hardware component external to the central processing unit.
  • computation history generator 225 is software stored in memory 115 during operation of the computer.
  • computation history generator 225 When computer system 202 needs to make a prediction about a property of an instruction, computation history generator 225 generates a computation history for the instruction. The computation history may then be used to determine an index to lookup table 230 , which stores predictions about instruction properties. For example, if the property in question is the direction of branch instruction 135 , the computation history for instruction 135 may be generated by computation history generator 225 . Then, the computation history may be used to determine index 0x41D1, which indexes to row 235 of lookup table 230 . The prediction about the branch is that the branch will be taken (indicated by the positive counter value).
  • FIG. 3 shows registers with associated computation histories in the computer system of FIG. 2, according to an embodiment of the invention.
  • program 130 is shown, as are registers 305 - 1 through 305 - 8 , which are registers in the central processing unit.
  • Various instructions use the registers: for example, instruction 310 uses registers 305 - 1 , 305 - 3 , and 305 - 5 , whereas instruction 315 uses registers 305 - 5 and 305 - 7 .
  • Registers may be source registers or destination registers (or both), depending on whether the instruction is reading a value from the register or writing a value to the register.
  • register 305 - 5 is a destination register for instruction 310 , but a source register for instruction 315 (the directions of the arrows indicate whether a register is a source or destination register).
  • each register Associated with each register is a computation history.
  • register 305 - 1 has associated computation history 320 - 1
  • register 305 - 2 has associated computation history 320 - 2
  • Each computation history is an amalgamation of information about all the things that affect the current data value in the register. Things that affect the current data value of the register may include other register values, static constants, memory values, the instructions that write to the register, and so on.
  • static data are used to generate computation histories.
  • the adjective static implies that the things that are used in generating the computation history are things (usually values of some sort) known at the time the program is compiled.
  • the computation histories and other static data for objects that affect the register are determined. Typically, these are computation histories for other registers used by the instruction that is writing to the register. Other static data may be used: for example, the program counter of the instruction writing to the register. These computation histories and other static data are hashed together using a hashing algorithm. The result is a computation history, which may be associated with the register in its current state.
  • FIG. 4 illustrates this process in detail using a particular hashing algorithm.
  • the computation histories for the source registers are determined: in this case, computation histories 320 - 1 and 320 - 3 . Since the hashing algorithm uses the program counter of the instruction, program counter 405 is also determined. This information is input to computation history generator 225 , the detail of which is shown in box 410 . As shown in box 410 , one of the computation histories is rotated, resulting in rotated computation history 420 . This is combined with the other computation history and program counter 405 using an exclusive OR (XOR) operation, as shown in box 425 . The result is then shifted by box 430 . The final output is the new computation history for register 305 - 5 .
  • XOR exclusive OR
  • a computation history lasts only as long as it is being used. For example, assume that register 305 - 5 currently stores a value, and computation history 320 - 5 currently stores a computation history for the value in register 305 - 5 . If the next instruction loads a value from memory into register 305 - 5 , a new computation history 320 - 5 will be generated and the old computation history lost. In another embodiment, rather than discarding the computation history, the computation history may be placed in computation history stack 435 . Computation history stack 435 is a place in memory where computation histories can be saved when the value in the corresponding register is saved to memory.
  • the corresponding computation history may recovered from computation history stack 435 .
  • row 440 shows that the computation history associated with the value is 0x34D12F21.
  • FIGS. 3 - 4 show computation histories being associated with registers, they may also be associated with instructions.
  • the computation history for an instruction may be the computation history of an operand, a computation history generated from the computation histories of the source operands (and possibly other static information), or the computation history of the destination operand. For example, in predicting a branch instruction, the computation history of the source register may be loaded as the computation history for the instruction.
  • a person skilled in the art will recognize that the generation of computation histories is recursive: that is, generating one computation history depends on knowing a previous computation history. By generating computation histories recursively, each computation history identifies (via the hash) all values that affected the current value of the register. There is no limit on the number of objects that may affect the computation history: the computation history effectively traces the entire genesis of the current data value in the register.
  • instructions may have as operands objects other than registers.
  • LOAD loads a data value (perhaps from memory, if direct memory addressing is permitted, perhaps a static value) into a register. How this affects the computation history is discussed further with reference to FIG. 5 below.
  • FIG. 5 shows the generation of a computation history for a register of FIG. 3 without using computation histories for other registers, according to an embodiment of the invention.
  • instruction 505 might be a LOAD instruction, loading a value from memory 515 into the register.
  • the computation history for load instruction 505 is typically generated ignoring any source register(s) used by load instruction 505 , but the computation history for load instruction 505 may use the computation history of the source register(s) or the values in the source register(s). For example, the address of the memory location from which the value is being loaded may be stored in a register for load instruction 505 .
  • Computation history generator 225 may then optionally hash that value with program counter 510 for instruction 505 .) This new value becomes the computation history for register 305 - 5 .
  • Computation histories are a specific instance of a more general concept: the data flow graph.
  • a data flow graph is a representation of the data flow in a program. Data flow graphs may be generated dynamically, using run-time data (such as the actual values associated with variables in the program execution) or may be generated statically, using data available only at compile-time. Data flow graphs may be used in the same manner as computation histories: to make predictions about properties of instructions, such as the direction taken by a branch instruction.
  • FIG. 6 shows the generation of an index into a lookup table in the computer system of FIG. 2, according to an embodiment of the invention.
  • the computation history may be used directly to index into lookup table 230 .
  • each additional bit used in the index to lookup table 230 doubles the size of lookup table 230 , it is desirable to keep the size of lookup table 230 from becoming too big.
  • FIG. 6 shows 32-bit computation histories, the index size for lookup table 230 is only 16 bits.
  • index calculator 605 may be used. Box 610 shows the details of index calculator 610 in one embodiment.
  • box 610 the computation history is split in half.
  • the two halves 615 and 620 are then hashed, in FIG. 6 using an exclusive OR (XOR) operation in box 625 .
  • XOR exclusive OR
  • the result is a 16-bit index, which may be used to index into lookup table 230 . If a smaller index is desired, the process may be repeated, reducing the index to 8 bits.
  • a person skilled in the art will also recognize that other techniques may be used to reduce the size of the computation history to the size of an index into lookup table 230 .
  • lookup table 230 may store any kind of prediction about the data.
  • the most immediate use of lookup table 230 is to store a branch prediction, but there is no limitation on what kind of prediction may be stored.
  • lookup table 230 may be used to make predications about memory lookup addresses or the data values taken on by variable.
  • FIGS. 7 A- 7 B show a flowchart of the procedure for constructing computation histories for an instruction in the computer system of FIG. 2, according to an embodiment of the invention.
  • an instruction is read.
  • the source operands are checked to see if they have computation histories. If so, then at block 715 the computation histories for the source operands are loaded. If not, then at block 720 static values are used for the computation histories for the source operands. (As discussed above with reference to FIG. 5, examples of instructions that may not have source computation histories are instructions that access memory or that load a static value into a register.)
  • the computation histories are combined. Other static data may also be used at this time.
  • the result is determined to be the computation history for the instruction.
  • the computation history is (optionally) stored with the destination operand of the instruction.
  • FIG. 8 shows a flowchart of the procedure for using one possible hash function to generate computation histories in the computer system of FIG. 2, according to an embodiment of the invention.
  • the computation history for one of the source operands is rotated.
  • the computation histories are combined using an exclusive OR (XOR) operation.
  • any other static data may be factored into the computation history: for example, the program counter of the instruction.
  • the result is shifted, to age the computation history.
  • FIG. 9 shows a flowchart of the procedure for using a computation history to make a prediction about a property of an instruction in the computer system of FIG. 2, according to an embodiment of the invention.
  • a computation history is accessed for the instruction.
  • the computation history taken is the one associated with the destination register of the instruction.
  • the computation history taken is one associated with a source register of the instruction.
  • an index is generated from the computation history.
  • the index is used to access a lookup table.
  • a value is read from the lookup table.
  • a prediction is made about a property of the instruction, using the value read from the lookup table.
  • the value of the lookup table may be (optionally) updated, once the truth about the prediction is known.
  • an embodiment of the invention described above may be implemented using a computer.
  • the method is embodied as instructions that comprise a program (in this case, instructing a central processing unit how to execute programs).
  • the program may be stored on computer-readable media, such as floppy disks, optical disks (such as compact discs), fixed disks (such as hard drives), random access memory (RAM), read-only memory (ROM), or flash memory.
  • the program may then be executed on a computer to implement the method.
  • an embodiment of the invention described above may include a computer-readable modulated carrier signal, and that the program, or portions of its execution, may be distributed over multiple computers in a network.

Abstract

Associated with an instruction in a program is a computation history. The computation history represents all objects that affect the result of the instruction, such objects including (but not limited to) registers, memory locations, static values, and instruction program counters. The computation history may be used to make a prediction about a property of the instruction.

Description

    FIELD
  • This invention pertains to program execution, and more particularly to improving the efficiency in executing program instructions. [0001]
  • BACKGROUND
  • When computers were first built, the objective was to make programs run. There was no concern about making computers efficient: it was enough that they executed the programs written for the computers. Thus, the processor read an instruction and executed it, then went back to the program for the next instruction. [0002]
  • As more has become known about computer design, engineers have become able to design processors that are more efficient than simple “fetch and execute” processors. Modem processors include “pipelines”: at any moment, different parts of the processor are working on different instructions. For example, while the core of the central processing unit is executing an instruction, another part of the processor might be loading a data value from memory that will be needed by a future instruction. [0003]
  • One area of processor design that has received extensive study and thought is branch processing. Depending on an associated data value, after a branch instruction is executed, control may continue at one of two (or more) different points. This creates a problem for modern processors: until the outcome of the branch instruction is known, any preprocessing of later instructions may be in vain. [0004]
  • To account for this, modern processors perform branch prediction. Rather than waiting for the branch instruction to execute and the correct path through the program to be known, the processor makes a guess. But if the processor guesses incorrectly, any preprocessing along the projected path is wasted. For example, if both possible follow-up instructions to a branch instruction load a value into a register, if the wrong instruction is preprocessed, then the wrong value will be in the register. The processor must then unwind the preprocessing performed on the wrong path. If the processor guesses incorrectly, execution might be slower than if the processor had simply waited until the branch instruction was executed. [0005]
  • Rather than guessing blindly, branch predictors try to make educated guesses. To accomplish this, they make certain assumptions. One possible assumption is that the outcome at a particular branch instruction is dependent solely on the prior outcomes at that branch. Another, more general assumption is that the outcome is dependent on some (fixed size) set of instructions preceding the branch instruction. There are other variations. [0006]
  • FIG. 1 shows a computer system executing a program according to the prior art. In FIG. 1, [0007] computer system 105 includes computer 110, installed into which is memory 115. Loaded in memory 115 is program 130, a portion of which is shown in FIG. 1. Program 130 includes branch instruction 135.
  • Under the assumption that the most frequent direction taken for a branch is the most likely, using table [0008] 140, a branch predictor may predict whether a branch is taken or not. As shown in row 145, instruction 135 has branched more times than not (the counter is incremented each time the branch is taken, and decremented each time it is not). Thus, the branch predictor would guess that the branch will be taken again.
  • Under the assumption that the direction taken by a branch is affected by the preceding instructions, the branch predictor looks at instructions [0009] 150 (which include instruction 135) and hashes their program counters together. This produces an index that the branch predictor may use to access table 155. As indicated at row 160, using this approach, the branch predictor would guess that the branch will not be taken.
  • But consider a branch predictor that that looks at the last five instructions before the branch. There is no guarantee that any of these instructions have any impact on the data value that controls the outcome of the branch. Likewise, there is no guarantee that these instructions are the only instructions that affect a prediction. There might be an older instruction that is highly pertinent to the outcome of the branch. [0010]
  • A need remains for a way to more accurately predict branches and other properties of instructions, that addresses these and other problems associated with the prior art.[0011]
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • FIG. 1 shows a computer system executing a program according to the prior art. [0012]
  • FIG. 2 shows a computer system making predictions about instruction properties according to an embodiment of the invention. [0013]
  • FIG. 3 shows registers with associated computation histories in the computer system of FIG. 2, according to an embodiment of the invention. [0014]
  • FIG. 4 shows the generation of a computation history for a register of FIG. 3 from other registers, according to an embodiment of the invention. [0015]
  • FIG. 5 shows the generation of a computation history for a register of FIG. 3 without using computation histories for other registers, according to an embodiment of the invention. [0016]
  • FIG. 6 shows the generation of an index into a lookup table in the computer system of FIG. 2, according to an embodiment of the invention. [0017]
  • FIGS. [0018] 7A-7B show a flowchart of the procedure for constructing computation histories for an instruction in the computer system of FIG. 2, according to an embodiment of the invention.
  • FIG. 8 shows a flowchart of the procedure for using one possible hash function to generate computation histories in the computer system of FIG. 2, according to an embodiment of the invention. [0019]
  • FIG. 9 shows a flowchart of the procedure for using a computation history to make a prediction about a property of an instruction in the computer system of FIG. 2, according to an embodiment of the invention.[0020]
  • DETAILED DESCRIPTION
  • FIG. 2 shows a computer system making predictions about instruction properties according to an embodiment of the invention. In FIG. 2, [0021] computer system 202 is very similar to computer system 105 of FIG. 1. Computer system 202 includes computer 205, monitor 210, keyboard 215, and mouse 220. A person skilled in the art will recognize that although computer system 202 is shown as a desktop personal computer, the invention is not limited to any specific type of computer. For example, computer system 202 could also be an Internet appliance, lacking any of computer 205, keyboard 215, or mouse 220. Computer system 202 could also be, among others, a personal digital assistant (PDA), or a wireless computer. Optional equipment not shown as part of computer system 202 in FIG. 2 are other input/output devices, such as a printer or a modem. Also not shown in FIG. 2 are some of the conventional internal components of computer system 202: e.g., a central processing unit, file system, network interface, etc.
  • [0022] Computer 205 includes computation history generator 225. Computation history generator 225 is responsible for generating computation histories for instructions in program 130. Specific about what a computation history is and how it is used is discussed further with reference to FIGS. 3-5. In one embodiment, computation history generator 225 is part of a central processing unit for computer 205. In another embodiment, computation history generator 225 is a hardware component external to the central processing unit. In a third embodiment, computation history generator 225 is software stored in memory 115 during operation of the computer.
  • When [0023] computer system 202 needs to make a prediction about a property of an instruction, computation history generator 225 generates a computation history for the instruction. The computation history may then be used to determine an index to lookup table 230, which stores predictions about instruction properties. For example, if the property in question is the direction of branch instruction 135, the computation history for instruction 135 may be generated by computation history generator 225. Then, the computation history may be used to determine index 0x41D1, which indexes to row 235 of lookup table 230. The prediction about the branch is that the branch will be taken (indicated by the positive counter value).
  • FIG. 3 shows registers with associated computation histories in the computer system of FIG. 2, according to an embodiment of the invention. In FIG. 3, [0024] program 130 is shown, as are registers 305-1 through 305-8, which are registers in the central processing unit. Various instructions use the registers: for example, instruction 310 uses registers 305-1, 305-3, and 305-5, whereas instruction 315 uses registers 305-5 and 305-7.
  • Registers may be source registers or destination registers (or both), depending on whether the instruction is reading a value from the register or writing a value to the register. For example, register [0025] 305-5 is a destination register for instruction 310, but a source register for instruction 315 (the directions of the arrows indicate whether a register is a source or destination register).
  • Associated with each register is a computation history. For example, register [0026] 305-1 has associated computation history 320-1, register 305-2 has associated computation history 320-2, and so on. Each computation history is an amalgamation of information about all the things that affect the current data value in the register. Things that affect the current data value of the register may include other register values, static constants, memory values, the instructions that write to the register, and so on. To simplify generating computation histories, in one embodiment only static data are used to generate computation histories. The adjective static implies that the things that are used in generating the computation history are things (usually values of some sort) known at the time the program is compiled. (Compare the term static with the terms dynamic and run-time, which imply that things are known at the time the program is executed.) In other words, computation histories are not dependent on the data that are actually used in the program, and are limited to things that are always the same each time the program is executed.
  • To generate the computation history for a register, first the computation histories and other static data for objects that affect the register are determined. Typically, these are computation histories for other registers used by the instruction that is writing to the register. Other static data may be used: for example, the program counter of the instruction writing to the register. These computation histories and other static data are hashed together using a hashing algorithm. The result is a computation history, which may be associated with the register in its current state. [0027]
  • For example, consider an instruction like ADD R[0028] 1, R2, R3, which instructs the processor to read the values from registers R1 and R2, add them together, and store the result in register R3. To compute the computation history for register R3 after the execution of this instruction, the computation histories for registers R1 and R2 are read, and optionally the program counter for the ADD instruction. These values are hashed together, resulting in a new computation history, which may be associated with register R3 (at least until such time as register R3 is assigned a new value).
  • It is common to call the set of registers (that is, registers [0029] 305-1 through 305-8) a register file. In this context, as values change in the registers, the register file changes accordingly. In a similar manner, computation histories 320-1 through 320-8 can be called a computation history file. As the computation histories associated with individual registers change, so too does the computation history file.
  • FIG. 4 illustrates this process in detail using a particular hashing algorithm. In FIG. 4, the computation histories for the source registers are determined: in this case, computation histories [0030] 320-1 and 320-3. Since the hashing algorithm uses the program counter of the instruction, program counter 405 is also determined. This information is input to computation history generator 225, the detail of which is shown in box 410. As shown in box 410, one of the computation histories is rotated, resulting in rotated computation history 420. This is combined with the other computation history and program counter 405 using an exclusive OR (XOR) operation, as shown in box 425. The result is then shifted by box 430. The final output is the new computation history for register 305-5.
  • Some explanation for the hashing algorithm shown in [0031] box 410 is in order. First, if the same computation history is used twice (which may happen if the same register is used twice as a source operand for an instruction) then the exclusive OR (XOR) operation of the same operand unrotated would return a zero. To avoid this, one of the computation histories may be rotated. Second, by shifting the result, the computation histories may be aged. This helps the computation histories to reflect the fact that more recent instructions have a greater impact on the value of the computation history than older instructions.
  • In an embodiment of the invention, a computation history lasts only as long as it is being used. For example, assume that register [0032] 305-5 currently stores a value, and computation history 320-5 currently stores a computation history for the value in register 305-5. If the next instruction loads a value from memory into register 305-5, a new computation history 320-5 will be generated and the old computation history lost. In another embodiment, rather than discarding the computation history, the computation history may be placed in computation history stack 435. Computation history stack 435 is a place in memory where computation histories can be saved when the value in the corresponding register is saved to memory. Then, if the value with which the computation history is ever loaded back into a register, the corresponding computation history may recovered from computation history stack 435. For example, as the value of register 305-5 is swapped out to memory, row 440 shows that the computation history associated with the value is 0x34D12F21.
  • Although FIGS. [0033] 3-4 show computation histories being associated with registers, they may also be associated with instructions. The computation history for an instruction may be the computation history of an operand, a computation history generated from the computation histories of the source operands (and possibly other static information), or the computation history of the destination operand. For example, in predicting a branch instruction, the computation history of the source register may be loaded as the computation history for the instruction.
  • A person skilled in the art will recognize that the generation of computation histories is recursive: that is, generating one computation history depends on knowing a previous computation history. By generating computation histories recursively, each computation history identifies (via the hash) all values that affected the current value of the register. There is no limit on the number of objects that may affect the computation history: the computation history effectively traces the entire genesis of the current data value in the register. [0034]
  • A person skilled in the art will also recognize that instructions may have as operands objects other than registers. For example, a LOAD instruction loads a data value (perhaps from memory, if direct memory addressing is permitted, perhaps a static value) into a register. How this affects the computation history is discussed further with reference to FIG. 5 below. [0035]
  • FIG. 5 shows the generation of a computation history for a register of FIG. 3 without using computation histories for other registers, according to an embodiment of the invention. In FIG. 5, [0036] instruction 505 might be a LOAD instruction, loading a value from memory 515 into the register. The computation history for load instruction 505 is typically generated ignoring any source register(s) used by load instruction 505, but the computation history for load instruction 505 may use the computation history of the source register(s) or the values in the source register(s). For example, the address of the memory location from which the value is being loaded may be stored in a register for load instruction 505. (Computation history generator 225 may then optionally hash that value with program counter 510 for instruction 505.) This new value becomes the computation history for register 305-5.
  • Computation histories are a specific instance of a more general concept: the data flow graph. A data flow graph is a representation of the data flow in a program. Data flow graphs may be generated dynamically, using run-time data (such as the actual values associated with variables in the program execution) or may be generated statically, using data available only at compile-time. Data flow graphs may be used in the same manner as computation histories: to make predictions about properties of instructions, such as the direction taken by a branch instruction. [0037]
  • FIG. 6 shows the generation of an index into a lookup table in the computer system of FIG. 2, according to an embodiment of the invention. Obviously, the computation history may be used directly to index into lookup table [0038] 230. But because each additional bit used in the index to lookup table 230 doubles the size of lookup table 230, it is desirable to keep the size of lookup table 230 from becoming too big. Thus, even though FIG. 6 shows 32-bit computation histories, the index size for lookup table 230 is only 16 bits. To reduce the size of the computation history to the size of an index, index calculator 605 may be used. Box 610 shows the details of index calculator 610 in one embodiment.
  • In [0039] box 610, the computation history is split in half. The two halves 615 and 620 are then hashed, in FIG. 6 using an exclusive OR (XOR) operation in box 625. The result is a 16-bit index, which may be used to index into lookup table 230. If a smaller index is desired, the process may be repeated, reducing the index to 8 bits. A person skilled in the art will also recognize that other techniques may be used to reduce the size of the computation history to the size of an index into lookup table 230.
  • Notice that lookup table [0040] 230 may store any kind of prediction about the data. The most immediate use of lookup table 230 is to store a branch prediction, but there is no limitation on what kind of prediction may be stored. For example, lookup table 230 may be used to make predications about memory lookup addresses or the data values taken on by variable.
  • FIGS. [0041] 7A-7B show a flowchart of the procedure for constructing computation histories for an instruction in the computer system of FIG. 2, according to an embodiment of the invention. In FIG. 7A, at block 705, an instruction is read. At decision point 710, the source operands are checked to see if they have computation histories. If so, then at block 715 the computation histories for the source operands are loaded. If not, then at block 720 static values are used for the computation histories for the source operands. (As discussed above with reference to FIG. 5, examples of instructions that may not have source computation histories are instructions that access memory or that load a static value into a register.)
  • At block [0042] 725 (FIG. 7B), the computation histories are combined. Other static data may also be used at this time. At block 730, the result is determined to be the computation history for the instruction. Finally, at block 735, the computation history is (optionally) stored with the destination operand of the instruction.
  • FIG. 8 shows a flowchart of the procedure for using one possible hash function to generate computation histories in the computer system of FIG. 2, according to an embodiment of the invention. At [0043] block 805, the computation history for one of the source operands is rotated. At block 810, the computation histories are combined using an exclusive OR (XOR) operation. At block 815, any other static data may be factored into the computation history: for example, the program counter of the instruction. Finally, at block 820, the result is shifted, to age the computation history.
  • FIG. 9 shows a flowchart of the procedure for using a computation history to make a prediction about a property of an instruction in the computer system of FIG. 2, according to an embodiment of the invention. At [0044] block 905, a computation history is accessed for the instruction. Typically, if the instruction has a destination register, the computation history taken is the one associated with the destination register of the instruction. For instructions that do not have a destination register (e.g., a branch instruction), the computation history taken is one associated with a source register of the instruction. At block 910, an index is generated from the computation history. At block 915, the index is used to access a lookup table. At block 920, a value is read from the lookup table. At block 925, a prediction is made about a property of the instruction, using the value read from the lookup table. Finally, at block 930, the value of the lookup table may be (optionally) updated, once the truth about the prediction is known.
  • A person skilled in the art will recognize that an embodiment of the invention described above may be implemented using a computer. In that case, the method is embodied as instructions that comprise a program (in this case, instructing a central processing unit how to execute programs). The program may be stored on computer-readable media, such as floppy disks, optical disks (such as compact discs), fixed disks (such as hard drives), random access memory (RAM), read-only memory (ROM), or flash memory. The program may then be executed on a computer to implement the method. A person skilled in the art will also recognize that an embodiment of the invention described above may include a computer-readable modulated carrier signal, and that the program, or portions of its execution, may be distributed over multiple computers in a network. [0045]
  • Having illustrated and described the principles of the invention in an embodiment thereof, it should be readily apparent to those skilled in the art that the invention may be modified in arrangement and detail without departing from such principles. All modifications coming within the spirit and scope of the accompanying claims are claimed. [0046]

Claims (57)

1. A computer, comprising:
a memory;
an instruction stored in the memory;
a computation history for the instruction, the computation history statically determined from a set of static data values, each data value representing an object having an effect on the instruction;
a lookup table, the lookup table storing a plurality of predictions about a plurality of instructions; and
an index, derivable from the computation history, used to access the lookup table to determine a prediction for the instruction.
2. A computer according to claim 1, wherein the lookup table is stored in the memory.
3. A computer according to claim 1, wherein the lookup table is stored in a second memory of the computer.
4. A computer according to claim 1, further comprising a computation history generator operative to generate the computation history for the instruction.
5. A computer according to claim 4, wherein:
the instruction includes two operands, each operand being a register in the computer, the first register having a second computation history and the second register having a third computation history; and
the computation history generator is operative to rotate the second computation history and hash the rotated second computation history with the third computation history.
6. A computer according to claim 5, wherein the computation history generator is further operative to hash the rotated second computation history with the third computation history and a program counter for the instruction.
7. A computer according to claim 4, wherein the computation history generator is operative to generate the computation history using a second computation history for a source operand of the instruction.
8. A computer according to claim 4, wherein the computation history generator is operative to generate the computation history using a subset of the set of static values, the set of static values including one or more second computation histories, one or static values, and a program counter for the instruction.
9. A computer according to claim 1, wherein the computation history is determined from a computation history for a destination operand of the instruction.
10. A computer according to claim 1, further comprising an index calculator operative to compute the index from the computation history.
11. A computer according to claim 1, further comprising a computation history file to store the computation history.
12. A computer according to claim 1, further comprising a register associated with the computation history, the register a destination operand of the instruction.
13. A computer according to claim 1, wherein:
the instruction is one of a plurality of instructions comprising a program; and
the computation history is generated before executing the program.
14. A computer, comprising:
a memory;
a branch instruction stored in the memory;
a data flow graph; and
a lookup table, the lookup table storing a prediction about a direction taken by the branch instruction, the prediction in the lookup table identified using the data flow graph.
15. A computer according to claim 14, wherein the lookup table is stored in the memory.
16. A computer according to claim 14, wherein the lookup table is stored in a second memory of the computer.
17. A computer according to claim 14, wherein the data flow graph is statically determined from a set of static data values, each data value representing an object having an effect on the branch instruction.
18. A method for generating a computation history, comprising:
reading an instruction;
determining a source operand of the instruction;
loading a static first computation history for the source operand; and
combining the first computation history with a static datum to generate a static second computation history.
19. A method according to claim 18, further comprising:
determining a destination operand of the instruction; and
storing the second computation history as the second computation history for the destination operand.
20. A method according to claim 18, further comprising storing the second computation history as the second computation history for the instruction.
21. A method according to claim 18, wherein loading a first computation history includes assigning a static value as the computation history if the instruction lacks the source operand.
22. A method according to claim 18, wherein loading a first computation history includes using a static value as the computation history if the source operand is a memory address.
23. A method according to claim 18, wherein loading a first computation history includes loading a third computation history based on a second instruction, where the instruction and second instruction communicate.
24. A method according to claim 18, wherein determining a source operand includes determining a register to be the source operand.
25. A method according to claim 18, wherein combining the first computation history with a static datum includes:
determining if there is a second source operand; and
loading a third computation history for the second source operand as the static datum if there is a second source operand.
26. A method according to claim 18, wherein combining the first computation history with a static datum includes combining the first computation history with a program counter for the instruction.
27. A method according to claim 18, wherein combining the first computation history with a static datum includes hashing the first computation history with the static datum.
28. A method according to claim 27, wherein hashing the first computation history with the static datum includes:
rotating the first computation history; and
performing an exclusive OR (XOR) operation on the rotated first computation history and the static datum.
29. A method according to claim 28, wherein hashing the first computation history further includes shifting a result of the exclusive OR (XOR) operation.
30. An article comprising:
a storage medium, said storage medium having stored thereon instructions, that, when executed by a computer, result in:
reading an instruction;
determining a source operand of the instruction;
loading a static first computation history for the source operand; and
combining the first computation history with a static datum to generate a static second computation history.
31. An article according to claim 30, wherein the instructions further comprise:
determining a destination operand of the instruction; and
storing the second computation history as the second computation history for the destination operand.
32. An article according to claim 30, wherein the instructions further comprise storing the second computation history as the second computation history for the instruction.
33. An article according to claim 30, wherein loading a first computation history includes assigning a static value as the computation history if the instruction lacks the source operand.
34. An article according to claim 30, wherein loading a first computation history includes using a static value as the computation history if the source operand is a memory address.
35. An article according to claim 30, wherein loading a first computation history includes loading a third computation history based on a second instruction, where the instruction and second instruction communicate.
36. An article according to claim 30, wherein determining a source operand includes determining a register to be the source operand.
37. An article according to claim 30, wherein combining the first computation history with a static datum includes:
determining if there is a second source operand; and
loading a third computation history for the second source operand as the static datum if there is a second source operand.
38. An article according to claim 30, wherein combining the first computation history with a static datum includes combining the first computation history with a program counter for the instruction.
39. An article according to claim 30, wherein combining the first computation history with a static datum includes hashing the first computation history with the static datum.
40. An article according to claim 39, wherein hashing the first computation history with the static datum includes:
rotating the first computation history; and
performing an exclusive OR (XOR) operation on the rotated first computation history and the static datum.
41. An article according to claim 40, wherein hashing the first computation history further includes shifting a result of the exclusive OR (XOR) operation.
42. A method for using a static computation history, comprising:
reading an instruction;
determining a static computation history for the instruction; and
predicting a property of the instruction using the static computation history.
43. A method according to claim 42, wherein predicting a property of the instruction includes:
accessing a lookup table;
indexing into the lookup table using the static computation history; and
reading a value from the lookup table based on the index of the static computation history.
44. A method according to claim 43, wherein indexing into the lookup table includes reducing a length of the static computation history.
45. A method according to claim 44, wherein reducing a length of the static computation history includes:
dividing the static computation history into two parts;
performing an exclusive OR (XOR) operation on the two parts; and
indexing into the lookup table using a result of the exclusive OR (XOR) operation.
46. A method according to claim 42, wherein predicting a property of the instruction includes predicting a direction for a branch instruction.
47. A method according to claim 42, further comprising:
determining whether the prediction was correct; and
updating a counter to reflect the accuracy of the prediction.
48. An article comprising:
a storage medium, said storage medium having stored thereon instructions, that, when executed by a computer, result in:
reading an instruction;
determining a static computation history for the instruction; and
predicting a property of the instruction using the static computation history.
49. An article according to claim 48, wherein predicting a property of the instruction includes:
accessing a lookup table;
indexing into the lookup table using the static computation history; and
reading a value from the lookup table based on the index of the static computation history.
50. An article according to claim 49, wherein indexing into the lookup table includes reducing a length of the static computation history.
51. An article according to claim 50, wherein reducing a length of the static computation history includes:
dividing the static computation history into two parts;
performing an exclusive OR (XOR) operation on the two parts; and
indexing into the lookup table using a result of the exclusive OR (XOR) operation.
52. An article according to claim 48, wherein predicting a property of the instruction includes predicting a direction for a branch instruction.
53. An article according to claim 48, wherein the instructions further comprise:
determining whether the prediction was correct; and
updating a counter to reflect the accuracy of the prediction.
54. A method for using a data flow graph, comprising:
reading a branch instruction;
constructing a data flow graph for the branch instruction; and
predicting a direction taken by the branch instruction using the data flow graph.
55. A method according to claim 54, wherein constructing a data flow graph includes constructing the data flow graph using a set of static data values, each data value representing an object having an effect on the branch instruction.
56. An article comprising:
a storage medium, said storage medium having stored thereon instructions, that, when executed by a computer, result in:
reading a branch instruction;
constructing a data flow graph for the branch instruction; and
predicting a direction taken by the branch instruction using the data flow graph.
57. An article according to claim 56, wherein constructing a data flow graph includes constructing the data flow graph using a set of static data values, each data value representing an object having an effect on the branch instruction.
US10/330,492 2002-12-27 2002-12-27 Using computation histories to make predictions Expired - Fee Related US7143272B2 (en)

Priority Applications (5)

Application Number Priority Date Filing Date Title
US10/330,492 US7143272B2 (en) 2002-12-27 2002-12-27 Using computation histories to make predictions
CN2003101129115A CN1512325B (en) 2002-12-27 2003-12-25 Computer and method for producing and using calculating history
CN2006101672158A CN101140512B (en) 2002-12-27 2003-12-25 Processer and system using computation histories to make predictions
CN201110353106.6A CN102591621B (en) 2002-12-27 2003-12-25 Use computation histories to make predictions
US11/550,747 US7624258B2 (en) 2002-12-27 2006-10-18 Using computation histories to make predictions

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/330,492 US7143272B2 (en) 2002-12-27 2002-12-27 Using computation histories to make predictions

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US11/550,747 Continuation US7624258B2 (en) 2002-12-27 2006-10-18 Using computation histories to make predictions

Publications (2)

Publication Number Publication Date
US20040128490A1 true US20040128490A1 (en) 2004-07-01
US7143272B2 US7143272B2 (en) 2006-11-28

Family

ID=32654506

Family Applications (2)

Application Number Title Priority Date Filing Date
US10/330,492 Expired - Fee Related US7143272B2 (en) 2002-12-27 2002-12-27 Using computation histories to make predictions
US11/550,747 Expired - Fee Related US7624258B2 (en) 2002-12-27 2006-10-18 Using computation histories to make predictions

Family Applications After (1)

Application Number Title Priority Date Filing Date
US11/550,747 Expired - Fee Related US7624258B2 (en) 2002-12-27 2006-10-18 Using computation histories to make predictions

Country Status (2)

Country Link
US (2) US7143272B2 (en)
CN (3) CN102591621B (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070124732A1 (en) * 2005-11-29 2007-05-31 Lia Shih-Wei Compiler-based scheduling optimization hints for user-level threads

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060190709A1 (en) * 2003-07-09 2006-08-24 Koninklijke Philips Electronics N.V. Method and system for branch prediction
US7506105B2 (en) * 2005-05-02 2009-03-17 Freescale Semiconductor, Inc. Prefetching using hashed program counter
US20070101100A1 (en) * 2005-10-28 2007-05-03 Freescale Semiconductor, Inc. System and method for decoupled precomputation prefetching
CN101515230B (en) * 2008-02-18 2012-02-08 瑞昱半导体股份有限公司 Device and method for predicting access of storage
US8122223B2 (en) * 2008-04-18 2012-02-21 International Business Machines Corporation Access speculation predictor with predictions based on memory region prior requestor tag information
US8127106B2 (en) * 2008-04-18 2012-02-28 International Business Machines Corporation Access speculation predictor with predictions based on a domain indicator of a cache line
US8131974B2 (en) * 2008-04-18 2012-03-06 International Business Machines Corporation Access speculation predictor implemented via idle command processing resources
US8122222B2 (en) * 2008-04-18 2012-02-21 International Business Machines Corporation Access speculation predictor with predictions based on a scope predictor
US20100257529A1 (en) * 2009-04-06 2010-10-07 Christopher Wilkerson Efficient systems and methods for consuming and providing power
US9223710B2 (en) 2013-03-16 2015-12-29 Intel Corporation Read-write partitioning of cache memory
CN106843812A (en) * 2016-12-23 2017-06-13 北京北大众志微系统科技有限责任公司 A kind of method and device for realizing the prediction of indirect branch associated software
CN107145334B (en) * 2017-04-26 2020-10-09 龙芯中科技术有限公司 Constant acquisition method, device, processor and computer readable storage medium
CN107273098B (en) * 2017-05-03 2020-07-31 北京中科睿芯科技有限公司 Method and system for optimizing data transmission delay of data flow architecture
US10437592B2 (en) * 2017-08-24 2019-10-08 Qualcomm Incorporated Reduced logic level operation folding of context history in a history register in a prediction system for a processor-based system

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4370711A (en) * 1980-10-21 1983-01-25 Control Data Corporation Branch predictor using random access memory
US5996060A (en) * 1997-09-25 1999-11-30 Technion Research And Development Foundation Ltd. System and method for concurrent processing
US6173384B1 (en) * 1998-02-11 2001-01-09 Nortel Networks Limited Method of searching for a data element in a data structure
US6247122B1 (en) * 1998-12-02 2001-06-12 Ip-First, L.L.C. Method and apparatus for performing branch prediction combining static and dynamic branch predictors
US6353882B1 (en) * 1998-02-23 2002-03-05 Hewlett-Packard Company Reducing branch prediction interference of opposite well behaved branches sharing history entry by static prediction correctness based updating
US6393544B1 (en) * 1999-10-31 2002-05-21 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for calculating a page table index from a virtual address
US6427206B1 (en) * 1999-05-03 2002-07-30 Intel Corporation Optimized branch predictions for strongly predicted compiler branches
US6601161B2 (en) * 1998-12-30 2003-07-29 Intel Corporation Method and system for branch target prediction using path information
US6766443B2 (en) * 2001-05-17 2004-07-20 International Business Machines Corporation Compression of execution path history to improve branch prediction accuracy
US6779108B2 (en) * 2000-12-15 2004-08-17 Intel Corporation Incorporating trigger loads in branch histories for branch prediction
US6813763B1 (en) * 2000-03-24 2004-11-02 Fujitsu Limited Program conversion device for increasing hit rate of branch prediction and method therefor

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5564118A (en) * 1992-11-12 1996-10-08 Digital Equipment Corporation Past-history filtered branch prediction
US5978909A (en) * 1997-11-26 1999-11-02 Intel Corporation System for speculative branch target prediction having a dynamic prediction history buffer and a static prediction history buffer
JP2000132390A (en) * 1998-10-23 2000-05-12 Toshiba Corp Processor and branch prediction unit
US6272623B1 (en) * 1999-01-25 2001-08-07 Sun Microsystems, Inc. Methods and apparatus for branch prediction using hybrid history with index sharing
US6418530B2 (en) * 1999-02-18 2002-07-09 Hewlett-Packard Company Hardware/software system for instruction profiling and trace selection using branch history information for branch predictions
US6272624B1 (en) * 1999-04-02 2001-08-07 Compaq Computer Corporation Method and apparatus for predicting multiple conditional branches

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4370711A (en) * 1980-10-21 1983-01-25 Control Data Corporation Branch predictor using random access memory
US5996060A (en) * 1997-09-25 1999-11-30 Technion Research And Development Foundation Ltd. System and method for concurrent processing
US6173384B1 (en) * 1998-02-11 2001-01-09 Nortel Networks Limited Method of searching for a data element in a data structure
US6353882B1 (en) * 1998-02-23 2002-03-05 Hewlett-Packard Company Reducing branch prediction interference of opposite well behaved branches sharing history entry by static prediction correctness based updating
US6247122B1 (en) * 1998-12-02 2001-06-12 Ip-First, L.L.C. Method and apparatus for performing branch prediction combining static and dynamic branch predictors
US6601161B2 (en) * 1998-12-30 2003-07-29 Intel Corporation Method and system for branch target prediction using path information
US6427206B1 (en) * 1999-05-03 2002-07-30 Intel Corporation Optimized branch predictions for strongly predicted compiler branches
US6393544B1 (en) * 1999-10-31 2002-05-21 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for calculating a page table index from a virtual address
US6813763B1 (en) * 2000-03-24 2004-11-02 Fujitsu Limited Program conversion device for increasing hit rate of branch prediction and method therefor
US6779108B2 (en) * 2000-12-15 2004-08-17 Intel Corporation Incorporating trigger loads in branch histories for branch prediction
US6766443B2 (en) * 2001-05-17 2004-07-20 International Business Machines Corporation Compression of execution path history to improve branch prediction accuracy

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070124732A1 (en) * 2005-11-29 2007-05-31 Lia Shih-Wei Compiler-based scheduling optimization hints for user-level threads
US8205200B2 (en) * 2005-11-29 2012-06-19 Intel Corporation Compiler-based scheduling optimization hints for user-level threads

Also Published As

Publication number Publication date
CN1512325A (en) 2004-07-14
US20070088936A1 (en) 2007-04-19
US7624258B2 (en) 2009-11-24
CN1512325B (en) 2012-01-11
CN102591621A (en) 2012-07-18
US7143272B2 (en) 2006-11-28
CN102591621B (en) 2016-04-06
CN101140512B (en) 2010-05-19
CN101140512A (en) 2008-03-12

Similar Documents

Publication Publication Date Title
US7624258B2 (en) Using computation histories to make predictions
US8443171B2 (en) Run-time updating of prediction hint instructions
US5721927A (en) Method for verifying contiquity of a binary translated block of instructions by attaching a compare and/or branch instruction to predecessor block of instructions
US5687360A (en) Branch predictor using multiple prediction heuristics and a heuristic identifier in the branch instruction
US7739477B2 (en) Multiple page size address translation incorporating page size prediction
US10318256B2 (en) Sharing and persisting code caches
US6351796B1 (en) Methods and apparatus for increasing the efficiency of a higher level cache by selectively performing writes to the higher level cache
US20020144081A1 (en) Method and apparatus including heuristic for sharing TLB entries
US8943298B2 (en) Meta predictor restoration upon detecting misprediction
US9336125B2 (en) Systems and methods for hardware-assisted type checking
US5860151A (en) Data cache fast address calculation system and method
JPH0628184A (en) Branch estimation method and branch processor
TW201423584A (en) Fetch width predictor
US20150113249A1 (en) Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments
JPH08292886A (en) Method and apparatus for implementation of non-folding load instruction
US11301253B2 (en) Branch prediction structure indexed based on return address popped from a call-return stack
US20070162895A1 (en) Mechanism and method for two level adaptive trace prediction
US20160196156A1 (en) Simulation apparatus, simulation method, and computer product
JP3890910B2 (en) Instruction execution result prediction device
US5964870A (en) Method and apparatus for using function context to improve branch
US20100070716A1 (en) Processor and prefetch support program
US7472264B2 (en) Predicting a jump target based on a program counter and state information for a process
US20030120888A1 (en) Address range checking circuit and method of operation
US7131118B2 (en) Write-through caching a JAVA® local variable within a register of a register bank
JPH1115659A (en) Branch prediction system

Legal Events

Date Code Title Description
AS Assignment

Owner name: INTEL CORPORATION, MARYLAND

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:WILKERSON, CHRIS B.;STARK, JARED W.;THOMAS, RENJU;REEL/FRAME:013983/0453;SIGNING DATES FROM 20021216 TO 20030325

AS Assignment

Owner name: INTEL CORPORATION, CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:WILKERSON, CHRIS B.;STARK, JARED W.;THOMAS, RENJU;REEL/FRAME:014587/0883;SIGNING DATES FROM 20021216 TO 20030325

FEPP Fee payment procedure

Free format text: PAYOR NUMBER ASSIGNED (ORIGINAL EVENT CODE: ASPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

CC Certificate of correction
FEPP Fee payment procedure

Free format text: PAYER NUMBER DE-ASSIGNED (ORIGINAL EVENT CODE: RMPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

REMI Maintenance fee reminder mailed
LAPS Lapse for failure to pay maintenance fees
STCH Information on status: patent discontinuation

Free format text: PATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362

FP Lapsed due to failure to pay maintenance fee

Effective date: 20101128