US8935517B2 - System and method for selectively managing a branch target address cache of a multiple-stage predictor - Google Patents

System and method for selectively managing a branch target address cache of a multiple-stage predictor Download PDF

Info

Publication number
US8935517B2
US8935517B2 US11/427,349 US42734906A US8935517B2 US 8935517 B2 US8935517 B2 US 8935517B2 US 42734906 A US42734906 A US 42734906A US 8935517 B2 US8935517 B2 US 8935517B2
Authority
US
United States
Prior art keywords
instruction
branch
btac
predicted
entry
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.)
Active, expires
Application number
US11/427,349
Other versions
US20080005543A1 (en
Inventor
Bohuslav Rychlik
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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Priority to US11/427,349 priority Critical patent/US8935517B2/en
Assigned to QUALCOMM INCORPORATED reassignment QUALCOMM INCORPORATED ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: RYCHLIK, BOHUSLAV
Priority to KR1020097001907A priority patent/KR101074621B1/en
Priority to MX2008016116A priority patent/MX2008016116A/en
Priority to BRPI0713434-7A priority patent/BRPI0713434A2/en
Priority to ES07840305T priority patent/ES2386478T3/en
Priority to RU2009102809/08A priority patent/RU2421783C2/en
Priority to EP11195677.7A priority patent/EP2434393B1/en
Priority to PCT/US2007/072317 priority patent/WO2008003019A2/en
Priority to EP07840305A priority patent/EP2035921B1/en
Priority to JP2009518553A priority patent/JP5558814B2/en
Priority to CN200780023873.2A priority patent/CN101479700B/en
Priority to CA002654231A priority patent/CA2654231A1/en
Priority to TW096123816A priority patent/TWI386850B/en
Publication of US20080005543A1 publication Critical patent/US20080005543A1/en
Priority to US13/281,913 priority patent/US8782383B2/en
Priority to JP2013119018A priority patent/JP2013229038A/en
Publication of US8935517B2 publication Critical patent/US8935517B2/en
Application granted granted Critical
Priority to JP2015041619A priority patent/JP2015144001A/en
Priority to JP2017007265A priority patent/JP2017107578A/en
Active 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
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

Definitions

  • the present invention relates generally to the field of processors and in particular to a method of improving branch prediction by proactively managing the contents of a branch target address cache.
  • Microprocessors perform computational tasks in a wide variety of applications. Improved processor performance is almost always desirable, to allow for faster operation and/or increased functionality through software changes. In many embedded applications, such as portable electronic devices, conserving power is also a goal in processor design and implementation.
  • conditional branch instructions Most programs include conditional branch instructions, the actual branching behavior of which is not known until the instruction is evaluated deep in the pipeline. To avoid the stall that would result from waiting for actual evaluation of the branch instruction, modern processors may employ some form of branch prediction, whereby the branching behavior of conditional branch instructions is predicted early in the pipeline. Based on the predicted branch evaluation, the processor speculatively fetches (prefetches) and executes instructions from a predicted address—either the branch target address (if the branch is predicted to be taken) or the next sequential address after the branch instruction (if the branch is predicted not to be taken). Whether a conditional branch instruction is to be taken or not to be taken is referred to as determining the direction of the branch.
  • Determining the direction of the branch may be made at prediction time and at actual branch resolution time.
  • the actual branch behavior is determined, if the branch was mispredicted, the speculatively fetched instructions must be flushed from the pipeline, and new instructions fetched from the correct next address.
  • Prefeteching instructions in response to an erroneous branch prediction can adversely impact processor performance and power consumption. Consequently, improving the accuracy of branch prediction is an important processor design goal.
  • branch prediction includes partitioning branch prediction into two predictors: an initial branch target address cache (BTAC) and a branch history table (BHT).
  • the BTAC also known as a branch target buffer (BTB)
  • BHT branch history table
  • the BTAC also known as a branch target buffer (BTB)
  • BHT branch history table
  • the BTAC also known as a branch target buffer (BTB)
  • BTB branch target buffer
  • Entries are added to a conventional BTAC after a branch instruction has passed through the processor pipeline and its branch has been taken. If the conventional BTAC is full, entries are conventionally removed from the BTAC using standard cache replacement algorithms (such as round robin or least-recently used) when the next entry is being added.
  • BTACs in general, are often embodied as a highly-associative cache design and accessed early in the fetch pipeline. If the fetch address matches a BTAC entry (a BTAC hit), the corresponding next fetch address or target address is fetched in the next cycle. This match and subsequent fetching of the target address is referred to as an implicit taken branch prediction. If there is no match (a BTAC miss), the next sequentially incremented address is fetched in the next cycle. This no match situation is also referred to an implicit not-taken prediction.
  • BTACs in general, are utilized in conjunction with a more accurate individual branch direction predictor such as the branch history table (BHT) also known as a pattern history table (PHT).
  • BHT branch history table
  • PHT pattern history table
  • Conventional BHTs are accessed later in the pipeline than a conventional BTAC. As such, additional information may be potentially present in order to make a better prediction.
  • a conventional BHT may contain a set of saturating predicted direction counters to produce a more accurate taken/not-taken decision for individual branch instructions.
  • each saturating predicted direction counter may comprise a 2-bit counter that assumes one of four states, each assigned a weighted prediction value, such as:
  • BHTs in general, are conventionally indexed by bits stored in a branch history register (BHR).
  • BHR branch history register
  • the output of a conventional BHT is a taken or not taken decision which results in either fetching the target address of the branch instruction or the next sequential address in the next cycle.
  • the BHT is commonly updated with branch outcome information as it becomes known.
  • a processor may override an earlier implicit prediction made by a BTAC. For example, a BTAC may hit (implicitly predicting a taken branch), but the BHT may override the BTAC implicit prediction with a not taken prediction. Conversely, following a BTAC miss, the BHT may override the BTAC miss with a taken prediction provided the target address is now known at this point in the processor pipeline.
  • Overriding BTAC predictions by a BHT results in wasted cycles resulting from flushing the processor pipeline.
  • Overriding BTAC predictions by a BHT can happen repeatedly when a similar branch instruction is subsequently processed by the pipeline. For example, if the BTAC implicitly predicts taken by a match being found in the BTAC, instructions from the target address (taken branch) begin to be fetched in to the processor pipeline. If the BHT subsequently overrides the BTAC prediction by deciding that the branch should not be taken, all the instructions after the fetching of the target address have to be flushed from the pipeline. In this conventional branch prediction technique, this cycle potentially repeats itself for the same branch instruction subsequently fetched.
  • the multiple flush cycle problem may continue to exist for a conditional branch instruction until the BTAC is updated. Therefore, it is recognized that apparatus and methods are needed to proactively manage the BTAC and reduce the probability of the occurrence of the multiple flush cycle problem.
  • a branch target address cache (BTAC) and a branch predictor circuit are disclosed.
  • the BTAC is configured to store a BTAC entry.
  • the branch predictor circuit is configured to store state information.
  • the branch predictor circuit utilizes the state information to predict the direction of a branch instruction and to manage the BTAC entry based on the stored state information in response to actual resolution of the branch instruction.
  • the multiple stage branch prediction system includes a BTAC and a branch predictor circuit.
  • the BTAC is configured to store a BTAC entry.
  • the branch predictor circuit is configured to store state information.
  • the branch predictor circuit utilizes the state information to predict the direction of a branch instruction and manages the BTAC entry based on the stored state information in response to actual resolution of the branch instruction.
  • Another embodiment relates to a method of managing a branch target access cache (BTAC).
  • a branch direction of a conditional branch instruction which has been actually resolved is received.
  • State information of a branch predictor circuit is evaluated in response to the received branch direction.
  • An entry in the BTAC associated with the conditional branch instruction is managed according to the state information of the branch predictor circuit.
  • Another embodiment relates to a method for lowering the probability of a multiple flush cycle of a pipeline.
  • a first direction for a conditional branch instruction is implicitly predicted.
  • a second direction for the conditional branch instruction is predicted based on state information.
  • a BTAC entry associated with the conditional branch instruction is managed utilizing state information.
  • FIG. 1 is a functional block diagram of a processor.
  • FIG. 2 is a functional block diagram of the branch predictor system of FIG. 1 .
  • FIG. 3 is a functional block diagram of a first exemplary embodiment of a BTAC management signal circuit.
  • FIG. 4 is a functional block diagram of a second exemplary embodiment of a BTAC management signal circuit.
  • FIG. 5 is a flow chart illustrating a method of managing a BTAC.
  • FIG. 6 is a flow chart illustrating a method for lowering the probability of the multiple flush cycle of a pipeline.
  • FIG. 1 depicts a functional block diagram of a processor 100 .
  • the processor 100 executes instructions in an instruction execution pipeline 112 according to control logic 114 .
  • the pipeline 112 may be a superscalar design, with multiple parallel pipelines.
  • the pipeline 112 includes various registers or latches 116 A-D, organized in pipe stages, and one or more execution units such as arithmetic logic unit (ALU) 118 .
  • a General Purpose Register (GPR) file 120 provides registers comprising the top of the memory hierarchy.
  • GPR General Purpose Register
  • Data is accessed from a data cache (D-cache) 140 , with memory address translation and permissions managed by a main Translation Lookaside Buffer (TLB) 142 .
  • the ITLB 124 may comprise a copy of part of the TLB 142 .
  • the ITLB 124 and TLB 142 may be integrated.
  • the I-cache 122 and D-cache 140 may be integrated, or unified. Misses in the I-cache 122 and/or the D-cache 140 cause an access to main (off-chip) memory 144 , under the control of a memory interface 146 .
  • the processor 100 may include an Input/Output (I/O) interface 148 , controlling access to various peripheral devices 150 .
  • I/O Input/Output
  • the processor 100 may include a second-level (L2) cache for either or both the I and D caches 122 , 140 .
  • L2 second-level cache
  • one or more of the functional blocks depicted in the processor 100 may be omitted from a particular embodiment.
  • Processor 100 includes a multiple stage branch prediction system 143 .
  • the multiple stage branch prediction system 143 includes a BTAC 141 (the first stage) and a branch predictor circuit 126 (the second stage).
  • the BTAC 141 is configured to store one or more entries where each entry contains a branch target address corresponding to a fetch address.
  • Instruction prefetch unit 128 fetches instructions from an instruction cache (I-cache or I$) 122 , with memory address translation and permissions managed by an Instruction-side Translation Lookaside Buffer (ITLB) 124 .
  • I-cache or I$ Instruction-side Translation Lookaside Buffer
  • the multiple stage branch prediction system 143 determines whether a fetch address hits in the BTAC 141 , predicts the direction of a branch instruction by utilizing stored prediction patterns in the branch predictor circuit 126 , and updates the BTAC 141 based on the state of the stored prediction patterns in the branch predictor circuit 126 .
  • the multiple stage branch prediction system 143 as well as the operation of the instruction prefetch unit 128 and pipeline 112 will be described in more detail in connection with the discussion of FIG. 2 .
  • FIG. 2 is a functional block diagram of the branch predictor system 143 of FIG. 1 .
  • the pipeline 112 and the instruction prefetch unit 128 each include one or more processing stages.
  • Branch predictor circuit 126 may include a branch history register 203 , branch history table (BHT) 207 and branch table update and prediction logic circuit 205 . Exemplary embodiments of the BTAC management portion of the branch table update and prediction logic circuit 205 will be described in connection with FIGS. 3 and 4 .
  • a fetch address is looked up in BTAC 141 over path 219 to determine if it corresponds to a taken branch instruction, which has been previously processed by the pipeline 112 .
  • the instruction prefetch unit 128 speculatively prefetches instructions from the instruction cache 122 over path 221 , beginning at the branch target address returned from the BTAC 141 for branches implicitly predicted “taken”, or beginning at the next sequential address for branches implicitly predicted “not taken.” In either case, the prefetched instructions are loaded into instruction prefetch unit 128 along path 223 .
  • conditional branch instruction is processed by the stages of the instruction prefetch unit 128 or pipeline 112 .
  • additional information about the conditional branch instruction is determined such as information carried in predecode bits retrieved from the I-cache 122 over path 223 .
  • the branch predictor circuit 126 utilizing stored prediction patterns and this additional information, is invoked over path 121 in order to predict with a higher level of confidence than the BTAC lookup the direction of the conditional branch instruction.
  • the branch table update and prediction logic circuit 205 utilizes the branch instruction address, the branch history register (BHR) 203 and the branch history table (BHT) 207 to predict the direction of the conditional branch instruction.
  • the BHR 203 acts as shift register for a conditional branch instruction. For example, if a conditional branch instruction is actually taken, a “1” is shifted into BHR 203 . If the conditional branch instruction is actually not taken, a “0” is shifted into BHR 203 , resulting in BHR 203 storing the historical branch direction for a particular branch instruction.
  • BHR 203 includes a specific register for each branch instruction processed by pipeline 112 over a period of time.
  • BHR 203 may have global scope which contains historical branch direction for recently processed conditional branch instructions.
  • the BHT 207 may include two bit counters for a particular branch instruction as described in the Background section above. It is recognized that various known techniques for predicting branch direction may utilize the BHR 203 and BHT 207 . It is also recognized that these known predictive techniques utilize various implementations of BHR 203 and BHT 207 . It is also recognized that this disclosure contemplates utilizing other predictive techniques which implement alternatives to a BHR or a BHT.
  • the branch direction predictor circuit 126 Based on the BHR 203 and BHT 207 , the branch direction predictor circuit 126 , in the example illustrated in FIG. 2 , predicts a branch direction which conflicts with the BTAC 141 implicit prediction. As a result, all of the instructions above “Taken Path 1 ”, the stage location of the conditional branch instruction, will be flushed from the instruction prefetch unit 128 . Without a conflict, the instruction prefetch unit 128 would continue to prefetch instructions which began from the branch target address.
  • conditional branch instruction progresses through the stages of pipeline 112 , the conditional branch instruction reaches a stage where the condition is actually resolved. If the actual resolution of the branch differs from the prediction of the branch predictor circuit 126 , all the instructions above the conditional branch instruction are flushed from both pipeline 112 and instruction prefetch unit 128 . At the actual branch resolution stage of the pipeline, the actual direction of the conditional branch is sent to the branch predictor circuit 126 over path 213 .
  • the branch table update and prediction logic circuit 205 is configured to utilize the actual branch direction in addition to the branch instruction address, the state of an entry in the BHT 207 and, optionally, the contents of the BHR 203 to update the contents of the BHT 207 . Additionally, the branch table update and prediction logic circuit 205 is configured to manage an entry in BTAC 141 depending on the actual branch direction and the state of the BHT 207 , or any other state in the branch direction predictor, advantageously allowing the entry in BTAC 141 to be responsive to the branch predictor circuit 126 and any branch prediction technique implemented by other branch predictor circuits storing state information utilized for branch prediction.
  • FIG. 3 is a functional block diagram of a first exemplary embodiment of a BTAC management circuit 300 .
  • the BTAC management circuit 300 may be a suitable circuit included in the branch table update and prediction logic circuit 205 to manage the BTAC 141 after the BHT 207 has been updated.
  • the input to the BTAC management circuit 300 is the most significant bit, after being updated as a result of actual resolution, of a two bit counter value corresponding to the conditional branch instruction.
  • the output signal 305 of the BTAC management circuit 300 is the inverted signal of the input.
  • the BTAC 141 interprets the output signal 305 to determine whether to manage an entry corresponding to the conditional branch instruction as described below.
  • the entry for this conditional branch instruction in BTAC 141 will be managed according to various alternatives described below. Similarly, if the updated two bit counter has value of 01 (weakly predicted not taken), the entry for this conditional branch instruction in BTAC 141 will be managed. If the updated two bit counter either has the value 10 (weakly predicted taken) or value 11 (strongly predicted taken), the entry in BTAC 141 will not be modified.
  • FIG. 4 is a functional block diagram of a second exemplary embodiment of a BTAC management signal circuit 400 .
  • the BTAC management circuit 400 may be a suitable circuit for a portion of the BTAC management portion of the branch table update and prediction logic circuit 205 to manage the BTAC 141 before the BHT 207 has been updated.
  • the BTAC management circuit 400 is a logic circuit including AND gates 405 A- 405 B and an OR gate 415 utilized to generate a management signal 425 to manage an entry corresponding to a conditional branch instruction which was actually resolved.
  • the BTAC management circuit 400 operates in response to the actual direction of the branch and the current state of the BHT 207 before update resulting from the actual direction.
  • the BTAC management circuit 400 has inputs A′ (the actual branch direction inverted), B′ (the most significant bit of the two-bit counter inverted), and C′ (the least significant bit of the two-bit counter inverted). In this embodiment, the BTAC 141 would interpret the output signal 425 to manage an entry corresponding to the conditional branch instruction as described below.
  • BTAC management circuits 300 and 400 have been described as being dependent on the implementation of BHT 207 , they may also depend on a chosen implementation of a BHR. Furthermore, it is recognized that this disclosure contemplates other BTAC management circuits which are driven by various implementation of a BHT or implemented with various branch predictive implementations. Moreover, BTAC management circuits as shown in FIGS. 3 and 4 may be integrated with or separate from the branch table update and prediction logic circuit 205 .
  • the type of management of the entry may include various alternatives.
  • the types of management include removing the BTAC entry immediately, marking the BTAC entry for removal on the next added branch instruction, pinning or maintaining the BTAC entry for an extended period of time, and the like. It is recognized that management of the BTAC entries not associated with conditional branch instruction as an alternative to management of the BTAC entry associated with conditional branch instruction is contemplated by the present disclosure.
  • BTAC 141 employs a least recently used replacement policy where the entries are organized in an order which indicate the replacement order of entries in the BTAC 141 .
  • a known pseudo least recently used circuit may be suitable to maintain the replacement order of entries.
  • the output signal of the BTAC management circuit 300 may result in modifying the position of the entry corresponding to the conditional branch instruction in the BTAC 141 .
  • the entry may be bumped up in the replacement order or bumped down in the replacement order.
  • the entry may be maintained by adjusting the position in the BTAC 141 to indicate it is the most recently used in order to prolong its life in BTAC 141 .
  • BTAC 141 may employ a modified round robin policy.
  • a register points to an entry to be replaced the next time a conditional branch is added and sequentially steps to the next sequential entry after the entry is replaced, cycling through the entries in a fair manner.
  • a pointer is employed to point to the entry corresponding to the conditional branch instruction which was actually resolved.
  • the entry corresponding to the conditional branch instruction may be marked for removal by adjusting the pointer to now point to this entry. In so doing, this entry is replaced the next time a conditional branch instruction and its corresponding target address are added to BTAC 141 . Consequently, the next entry to be removed would be the entry recently determined to be removed.
  • the replacement policies employed by BTAC 141 provided herein are exemplary, the inventive techniques are also applicable to other replacement policies typically used in BTACs.
  • FIG. 5 is a flow chart 500 illustrating a method of managing a BTAC.
  • a branch direction of a conditional branch instruction which has been actually resolved is received.
  • path 213 of FIG. 2 illustrates branch predictor circuit 126 as receiving the branch direction from pipeline 112 .
  • the state of a branch predictor circuit is evaluated in response to receiving the actual branch direction.
  • an entry in a BTAC associated with the conditional branch instruction is managed according to the state of the branch predictor circuit.
  • Blocks 530 A- 530 D are alternative exemplary embodiments of various types of management of an entry in the BTAC as shown in block 530 . These exemplary embodiments may be employed singularly or in combination.
  • the entry in the BTAC to be managed is removed, advantageously removing the last conditional branch instruction to be predicted “not taken” from the BTAC.
  • the entry in the BTAC to be managed is maintained in the BTAC for an extended period of time, advantageously prolonging the life of the last conditional branch instruction to be predicted “taken” in the BTAC.
  • Block 530 C shows the entry in the BTAC to be managed having its position in a replacement order adjusted for a BTAC employing a least recently used replacement policy.
  • the entry in the BTAC has its position in the replacement order modified in a manner to have the entry less likely to be replaced on the next BTAC entry to be added, advantageously prolonging the life of the last conditional branch instruction to be predicted “taken” in the BTAC.
  • the entry in the BTAC has its position in the replacement order modified in a manner to have the entry more likely to be replaced on the next BTAC entry to be added.
  • Block 530 D shows a next replacement register being adjusted for a BTAC employing a modified round robin replacement policy.
  • the contents of the next replacement register are modified to point to the entry to be managed in the BTAC.
  • the pointed to entry is replaced with the added entry, advantageously removing the last conditional branch instruction to be predicted “not taken” from the BTAC.
  • the contents of the next replacement register are modified to point to the next entry in the BTAC after the entry to be managed.
  • next conditional branch instruction when the next conditional branch instruction is to be added to the BTAC, the next entry in the BTAC after the entry to be managed is replaced with the added entry, advantageously prolonging the life of the managed entry in the BTAC. It is recognized that other management techniques for managing a BTAC may be utilized by the present disclosure.
  • FIG. 6 is a flow chart illustrating a method 600 of lowering the probability of the multiple flush cycle of a pipeline.
  • a first direction for a conditional branch instruction is implicitly predicted. For example, if there is a hit in a BTAC for the conditional branch instruction, the corresponding branch target address in the BTAC is then prefetched. Thus, the branch direction is implicitly predicted “taken.”
  • a second direction for the conditional branch instruction is subsequently predicted based on state information such as state information stored in branch prediction circuit 126 .
  • a branch predictor circuit predicts that the conditional branch instruction should be “not taken,” thus, conflicting with the implicit prediction of the BTAC.
  • the BTAC entry associated with the conditional branch instruction is managed utilizing state information stored, for example, in branch prediction circuit 126 . Different types of BTAC management are described above in connection with the discussion of FIG. 5 . Alternatively, at block 630 , the BTAC entry associated with the conditional branch instruction is managed due to the conflict between the branch predictor circuit and the BTAC lookup independent of any state stored in the branch predictor circuit.
  • DSP digital signal processor
  • ASIC application specific integrated circuit
  • FPGA field programmable gate array
  • a general-purpose processor may be a microprocessor, but in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine.
  • a processor may also be implemented as a combination of computing components, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration.
  • a software module may reside in RAM memory, flash memory, ROM memory, EPROM memory, EEPROM memory, registers, hard disk, a removable disk, a CD-ROM, or any other form of storage medium known in the art.
  • a storage medium may be coupled to the processor such that the processor can read information from, and write information to, the storage medium. In the alternative, the storage medium may be integral to the processor.

Abstract

A multiple stage branch prediction system including a branch target address cache (BTAC) and a branch predictor circuit is disclosed. The BTAC is configured to store a BTAC entry. The branch predictor circuit is configured to store state information. The branch predictor circuit utilizes the state information to predict the direction of a branch instruction and to manage the BTAC entry based on the stored state information in response to actual resolution of the branch instruction.

Description

BACKGROUND
1. Field of the Invention
The present invention relates generally to the field of processors and in particular to a method of improving branch prediction by proactively managing the contents of a branch target address cache.
2. Background
Microprocessors perform computational tasks in a wide variety of applications. Improved processor performance is almost always desirable, to allow for faster operation and/or increased functionality through software changes. In many embedded applications, such as portable electronic devices, conserving power is also a goal in processor design and implementation.
Many modern processors employ a pipelined architecture, where sequential instructions, each having multiple execution steps, are overlapped in execution. For improved performance, the instructions should flow continuously through the pipeline. Any situation that causes instructions to stall in the pipeline can detrimentally influence performance. If instructions are flushed from the pipeline and subsequently re-fetched, both performance and power consumption suffer.
Most programs include conditional branch instructions, the actual branching behavior of which is not known until the instruction is evaluated deep in the pipeline. To avoid the stall that would result from waiting for actual evaluation of the branch instruction, modern processors may employ some form of branch prediction, whereby the branching behavior of conditional branch instructions is predicted early in the pipeline. Based on the predicted branch evaluation, the processor speculatively fetches (prefetches) and executes instructions from a predicted address—either the branch target address (if the branch is predicted to be taken) or the next sequential address after the branch instruction (if the branch is predicted not to be taken). Whether a conditional branch instruction is to be taken or not to be taken is referred to as determining the direction of the branch. Determining the direction of the branch may be made at prediction time and at actual branch resolution time. When the actual branch behavior is determined, if the branch was mispredicted, the speculatively fetched instructions must be flushed from the pipeline, and new instructions fetched from the correct next address. Prefeteching instructions in response to an erroneous branch prediction can adversely impact processor performance and power consumption. Consequently, improving the accuracy of branch prediction is an important processor design goal.
One known form of branch prediction includes partitioning branch prediction into two predictors: an initial branch target address cache (BTAC) and a branch history table (BHT). The BTAC, also known as a branch target buffer (BTB), is indexed by an instruction fetch address and contains the next fetched address, also referred to as the branch target, corresponding to the instruction fetch address. Entries are added to a conventional BTAC after a branch instruction has passed through the processor pipeline and its branch has been taken. If the conventional BTAC is full, entries are conventionally removed from the BTAC using standard cache replacement algorithms (such as round robin or least-recently used) when the next entry is being added.
BTACs, in general, are often embodied as a highly-associative cache design and accessed early in the fetch pipeline. If the fetch address matches a BTAC entry (a BTAC hit), the corresponding next fetch address or target address is fetched in the next cycle. This match and subsequent fetching of the target address is referred to as an implicit taken branch prediction. If there is no match (a BTAC miss), the next sequentially incremented address is fetched in the next cycle. This no match situation is also referred to an implicit not-taken prediction.
BTACs, in general, are utilized in conjunction with a more accurate individual branch direction predictor such as the branch history table (BHT) also known as a pattern history table (PHT). Conventional BHTs are accessed later in the pipeline than a conventional BTAC. As such, additional information may be potentially present in order to make a better prediction. A conventional BHT may contain a set of saturating predicted direction counters to produce a more accurate taken/not-taken decision for individual branch instructions. For example, each saturating predicted direction counter may comprise a 2-bit counter that assumes one of four states, each assigned a weighted prediction value, such as:
11—Strongly predicted taken
10—Weakly predicted taken
01—Weakly predicted not taken
00—Strongly predicted not taken
BHTs, in general, are conventionally indexed by bits stored in a branch history register (BHR). The output of a conventional BHT is a taken or not taken decision which results in either fetching the target address of the branch instruction or the next sequential address in the next cycle. The BHT is commonly updated with branch outcome information as it becomes known.
Utilizing a conventional BHT, a processor may override an earlier implicit prediction made by a BTAC. For example, a BTAC may hit (implicitly predicting a taken branch), but the BHT may override the BTAC implicit prediction with a not taken prediction. Conversely, following a BTAC miss, the BHT may override the BTAC miss with a taken prediction provided the target address is now known at this point in the processor pipeline.
Overriding BTAC predictions by a BHT results in wasted cycles resulting from flushing the processor pipeline. Overriding BTAC predictions by a BHT can happen repeatedly when a similar branch instruction is subsequently processed by the pipeline. For example, if the BTAC implicitly predicts taken by a match being found in the BTAC, instructions from the target address (taken branch) begin to be fetched in to the processor pipeline. If the BHT subsequently overrides the BTAC prediction by deciding that the branch should not be taken, all the instructions after the fetching of the target address have to be flushed from the pipeline. In this conventional branch prediction technique, this cycle potentially repeats itself for the same branch instruction subsequently fetched. This problem of repeating branch prediction conflicts on subsequent fetching of the same conditional branch instruction is referred to herein as the multiple flush cycle problem. In a conventional approach, the multiple flush cycle problem may continue to exist for a conditional branch instruction until the BTAC is updated. Therefore, it is recognized that apparatus and methods are needed to proactively manage the BTAC and reduce the probability of the occurrence of the multiple flush cycle problem.
SUMMARY
According to one or more embodiments, a branch target address cache (BTAC) and a branch predictor circuit are disclosed. The BTAC is configured to store a BTAC entry. The branch predictor circuit is configured to store state information. The branch predictor circuit utilizes the state information to predict the direction of a branch instruction and to manage the BTAC entry based on the stored state information in response to actual resolution of the branch instruction. By managing the BTAC entry based on state information used to predict the direction of a branch instruction, the likelihood of mispredictions and conflicts between BTAC lookup and a branch predictor circuit are advantageously reduced.
One embodiment relates to a multiple stage branch prediction system. The multiple stage branch prediction system includes a BTAC and a branch predictor circuit. The BTAC is configured to store a BTAC entry. The branch predictor circuit is configured to store state information. The branch predictor circuit utilizes the state information to predict the direction of a branch instruction and manages the BTAC entry based on the stored state information in response to actual resolution of the branch instruction.
Another embodiment relates to a method of managing a branch target access cache (BTAC). A branch direction of a conditional branch instruction which has been actually resolved is received. State information of a branch predictor circuit is evaluated in response to the received branch direction. An entry in the BTAC associated with the conditional branch instruction is managed according to the state information of the branch predictor circuit.
Another embodiment relates to a method for lowering the probability of a multiple flush cycle of a pipeline. In this method, a first direction for a conditional branch instruction is implicitly predicted. Also, a second direction for the conditional branch instruction is predicted based on state information. A BTAC entry associated with the conditional branch instruction is managed utilizing state information.
It is understood that other embodiments of the present invention will become readily apparent to those skilled in the art from the following detailed description, wherein various embodiments of the invention are shown and described by way of illustration. As will be realized, the invention is capable of other and different embodiments and its several details are capable of modification in various other respects, all without departing from the present invention. Accordingly, the drawings and detailed description are to be regarded as illustrative in nature and not as restrictive.
BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a functional block diagram of a processor.
FIG. 2 is a functional block diagram of the branch predictor system of FIG. 1.
FIG. 3 is a functional block diagram of a first exemplary embodiment of a BTAC management signal circuit.
FIG. 4 is a functional block diagram of a second exemplary embodiment of a BTAC management signal circuit.
FIG. 5 is a flow chart illustrating a method of managing a BTAC.
FIG. 6 is a flow chart illustrating a method for lowering the probability of the multiple flush cycle of a pipeline.
DETAILED DESCRIPTION
FIG. 1 depicts a functional block diagram of a processor 100. The processor 100 executes instructions in an instruction execution pipeline 112 according to control logic 114. In some embodiments, the pipeline 112 may be a superscalar design, with multiple parallel pipelines. The pipeline 112 includes various registers or latches 116A-D, organized in pipe stages, and one or more execution units such as arithmetic logic unit (ALU) 118. A General Purpose Register (GPR) file 120 provides registers comprising the top of the memory hierarchy.
Data is accessed from a data cache (D-cache) 140, with memory address translation and permissions managed by a main Translation Lookaside Buffer (TLB) 142. In various embodiments, the ITLB 124 may comprise a copy of part of the TLB 142. Alternatively, the ITLB 124 and TLB 142 may be integrated. Similarly, in various embodiments of the processor 100, the I-cache 122 and D-cache 140 may be integrated, or unified. Misses in the I-cache 122 and/or the D-cache 140 cause an access to main (off-chip) memory 144, under the control of a memory interface 146.
The processor 100 may include an Input/Output (I/O) interface 148, controlling access to various peripheral devices 150. Those of skill in the art will recognize that numerous variations of the processor 100 are possible. For example, the processor 100 may include a second-level (L2) cache for either or both the I and D caches 122, 140. In addition, one or more of the functional blocks depicted in the processor 100 may be omitted from a particular embodiment.
Processor 100 includes a multiple stage branch prediction system 143. The multiple stage branch prediction system 143 includes a BTAC 141 (the first stage) and a branch predictor circuit 126 (the second stage). The BTAC 141 is configured to store one or more entries where each entry contains a branch target address corresponding to a fetch address. Instruction prefetch unit 128 fetches instructions from an instruction cache (I-cache or I$) 122, with memory address translation and permissions managed by an Instruction-side Translation Lookaside Buffer (ITLB) 124. The multiple stage branch prediction system 143 determines whether a fetch address hits in the BTAC 141, predicts the direction of a branch instruction by utilizing stored prediction patterns in the branch predictor circuit 126, and updates the BTAC 141 based on the state of the stored prediction patterns in the branch predictor circuit 126. The multiple stage branch prediction system 143 as well as the operation of the instruction prefetch unit 128 and pipeline 112 will be described in more detail in connection with the discussion of FIG. 2.
FIG. 2 is a functional block diagram of the branch predictor system 143 of FIG. 1. The pipeline 112 and the instruction prefetch unit 128 each include one or more processing stages. Branch predictor circuit 126 may include a branch history register 203, branch history table (BHT) 207 and branch table update and prediction logic circuit 205. Exemplary embodiments of the BTAC management portion of the branch table update and prediction logic circuit 205 will be described in connection with FIGS. 3 and 4.
In operation, a fetch address is looked up in BTAC 141 over path 219 to determine if it corresponds to a taken branch instruction, which has been previously processed by the pipeline 112. The instruction prefetch unit 128 speculatively prefetches instructions from the instruction cache 122 over path 221, beginning at the branch target address returned from the BTAC 141 for branches implicitly predicted “taken”, or beginning at the next sequential address for branches implicitly predicted “not taken.” In either case, the prefetched instructions are loaded into instruction prefetch unit 128 along path 223.
As the conditional branch instruction is processed by the stages of the instruction prefetch unit 128 or pipeline 112, additional information about the conditional branch instruction is determined such as information carried in predecode bits retrieved from the I-cache 122 over path 223. The branch predictor circuit 126, utilizing stored prediction patterns and this additional information, is invoked over path 121 in order to predict with a higher level of confidence than the BTAC lookup the direction of the conditional branch instruction.
The branch table update and prediction logic circuit 205 utilizes the branch instruction address, the branch history register (BHR) 203 and the branch history table (BHT) 207 to predict the direction of the conditional branch instruction. The BHR 203 acts as shift register for a conditional branch instruction. For example, if a conditional branch instruction is actually taken, a “1” is shifted into BHR 203. If the conditional branch instruction is actually not taken, a “0” is shifted into BHR 203, resulting in BHR 203 storing the historical branch direction for a particular branch instruction. In one embodiment, BHR 203 includes a specific register for each branch instruction processed by pipeline 112 over a period of time. In another embodiment, BHR 203 may have global scope which contains historical branch direction for recently processed conditional branch instructions. The BHT 207 may include two bit counters for a particular branch instruction as described in the Background section above. It is recognized that various known techniques for predicting branch direction may utilize the BHR 203 and BHT 207. It is also recognized that these known predictive techniques utilize various implementations of BHR 203 and BHT 207. It is also recognized that this disclosure contemplates utilizing other predictive techniques which implement alternatives to a BHR or a BHT.
Based on the BHR 203 and BHT 207, the branch direction predictor circuit 126, in the example illustrated in FIG. 2, predicts a branch direction which conflicts with the BTAC 141 implicit prediction. As a result, all of the instructions above “Taken Path1”, the stage location of the conditional branch instruction, will be flushed from the instruction prefetch unit 128. Without a conflict, the instruction prefetch unit 128 would continue to prefetch instructions which began from the branch target address.
As the conditional branch instruction progresses through the stages of pipeline 112, the conditional branch instruction reaches a stage where the condition is actually resolved. If the actual resolution of the branch differs from the prediction of the branch predictor circuit 126, all the instructions above the conditional branch instruction are flushed from both pipeline 112 and instruction prefetch unit 128. At the actual branch resolution stage of the pipeline, the actual direction of the conditional branch is sent to the branch predictor circuit 126 over path 213.
The branch table update and prediction logic circuit 205 is configured to utilize the actual branch direction in addition to the branch instruction address, the state of an entry in the BHT 207 and, optionally, the contents of the BHR 203 to update the contents of the BHT 207. Additionally, the branch table update and prediction logic circuit 205 is configured to manage an entry in BTAC 141 depending on the actual branch direction and the state of the BHT 207, or any other state in the branch direction predictor, advantageously allowing the entry in BTAC 141 to be responsive to the branch predictor circuit 126 and any branch prediction technique implemented by other branch predictor circuits storing state information utilized for branch prediction.
FIG. 3 is a functional block diagram of a first exemplary embodiment of a BTAC management circuit 300. The BTAC management circuit 300 may be a suitable circuit included in the branch table update and prediction logic circuit 205 to manage the BTAC 141 after the BHT 207 has been updated. The input to the BTAC management circuit 300 is the most significant bit, after being updated as a result of actual resolution, of a two bit counter value corresponding to the conditional branch instruction. The output signal 305 of the BTAC management circuit 300 is the inverted signal of the input. The BTAC 141 interprets the output signal 305 to determine whether to manage an entry corresponding to the conditional branch instruction as described below.
For example, if the updated two bit counter corresponding to the conditional branch instruction has value of 00 (strongly predicted not taken), the entry for this conditional branch instruction in BTAC 141 will be managed according to various alternatives described below. Similarly, if the updated two bit counter has value of 01 (weakly predicted not taken), the entry for this conditional branch instruction in BTAC 141 will be managed. If the updated two bit counter either has the value 10 (weakly predicted taken) or value 11 (strongly predicted taken), the entry in BTAC 141 will not be modified.
FIG. 4 is a functional block diagram of a second exemplary embodiment of a BTAC management signal circuit 400. The BTAC management circuit 400 may be a suitable circuit for a portion of the BTAC management portion of the branch table update and prediction logic circuit 205 to manage the BTAC 141 before the BHT 207 has been updated. The BTAC management circuit 400 is a logic circuit including AND gates 405A-405B and an OR gate 415 utilized to generate a management signal 425 to manage an entry corresponding to a conditional branch instruction which was actually resolved. The BTAC management circuit 400 operates in response to the actual direction of the branch and the current state of the BHT 207 before update resulting from the actual direction. The BTAC management circuit 400 has inputs A′ (the actual branch direction inverted), B′ (the most significant bit of the two-bit counter inverted), and C′ (the least significant bit of the two-bit counter inverted). In this embodiment, the BTAC 141 would interpret the output signal 425 to manage an entry corresponding to the conditional branch instruction as described below. Although BTAC management circuits 300 and 400 have been described as being dependent on the implementation of BHT 207, they may also depend on a chosen implementation of a BHR. Furthermore, it is recognized that this disclosure contemplates other BTAC management circuits which are driven by various implementation of a BHT or implemented with various branch predictive implementations. Moreover, BTAC management circuits as shown in FIGS. 3 and 4 may be integrated with or separate from the branch table update and prediction logic circuit 205.
The type of management of the entry may include various alternatives. The types of management include removing the BTAC entry immediately, marking the BTAC entry for removal on the next added branch instruction, pinning or maintaining the BTAC entry for an extended period of time, and the like. It is recognized that management of the BTAC entries not associated with conditional branch instruction as an alternative to management of the BTAC entry associated with conditional branch instruction is contemplated by the present disclosure.
BTAC 141 employs a least recently used replacement policy where the entries are organized in an order which indicate the replacement order of entries in the BTAC 141. A known pseudo least recently used circuit may be suitable to maintain the replacement order of entries. As such, the output signal of the BTAC management circuit 300 may result in modifying the position of the entry corresponding to the conditional branch instruction in the BTAC 141. For example, the entry may be bumped up in the replacement order or bumped down in the replacement order. Alternatively, the entry may be maintained by adjusting the position in the BTAC 141 to indicate it is the most recently used in order to prolong its life in BTAC 141.
Alternatively, in another embodiment, BTAC 141 may employ a modified round robin policy. In a conventional round robin policy, a register points to an entry to be replaced the next time a conditional branch is added and sequentially steps to the next sequential entry after the entry is replaced, cycling through the entries in a fair manner. However, in the modified round robin policy, a pointer is employed to point to the entry corresponding to the conditional branch instruction which was actually resolved. For example, the entry corresponding to the conditional branch instruction may be marked for removal by adjusting the pointer to now point to this entry. In so doing, this entry is replaced the next time a conditional branch instruction and its corresponding target address are added to BTAC 141. Consequently, the next entry to be removed would be the entry recently determined to be removed. Although the replacement policies employed by BTAC 141 provided herein are exemplary, the inventive techniques are also applicable to other replacement policies typically used in BTACs.
FIG. 5 is a flow chart 500 illustrating a method of managing a BTAC. At block 510, a branch direction of a conditional branch instruction which has been actually resolved is received. For example, path 213 of FIG. 2 illustrates branch predictor circuit 126 as receiving the branch direction from pipeline 112. At block 520, the state of a branch predictor circuit is evaluated in response to receiving the actual branch direction. At block 530, an entry in a BTAC associated with the conditional branch instruction is managed according to the state of the branch predictor circuit.
Blocks 530A-530D are alternative exemplary embodiments of various types of management of an entry in the BTAC as shown in block 530. These exemplary embodiments may be employed singularly or in combination. At block 530A, the entry in the BTAC to be managed is removed, advantageously removing the last conditional branch instruction to be predicted “not taken” from the BTAC. At block 530B, the entry in the BTAC to be managed is maintained in the BTAC for an extended period of time, advantageously prolonging the life of the last conditional branch instruction to be predicted “taken” in the BTAC.
Block 530C shows the entry in the BTAC to be managed having its position in a replacement order adjusted for a BTAC employing a least recently used replacement policy. In one embodiment, the entry in the BTAC has its position in the replacement order modified in a manner to have the entry less likely to be replaced on the next BTAC entry to be added, advantageously prolonging the life of the last conditional branch instruction to be predicted “taken” in the BTAC. In another embodiment, the entry in the BTAC has its position in the replacement order modified in a manner to have the entry more likely to be replaced on the next BTAC entry to be added.
Block 530 D shows a next replacement register being adjusted for a BTAC employing a modified round robin replacement policy. In one embodiment, the contents of the next replacement register are modified to point to the entry to be managed in the BTAC. Thus, when the next conditional branch instruction is to be added to the BTAC, the pointed to entry is replaced with the added entry, advantageously removing the last conditional branch instruction to be predicted “not taken” from the BTAC. In another embodiment, the contents of the next replacement register are modified to point to the next entry in the BTAC after the entry to be managed. In this way, when the next conditional branch instruction is to be added to the BTAC, the next entry in the BTAC after the entry to be managed is replaced with the added entry, advantageously prolonging the life of the managed entry in the BTAC. It is recognized that other management techniques for managing a BTAC may be utilized by the present disclosure.
FIG. 6 is a flow chart illustrating a method 600 of lowering the probability of the multiple flush cycle of a pipeline. At block 610, a first direction for a conditional branch instruction is implicitly predicted. For example, if there is a hit in a BTAC for the conditional branch instruction, the corresponding branch target address in the BTAC is then prefetched. Thus, the branch direction is implicitly predicted “taken.” At block 620, a second direction for the conditional branch instruction is subsequently predicted based on state information such as state information stored in branch prediction circuit 126. Continuing with the previous example, a branch predictor circuit predicts that the conditional branch instruction should be “not taken,” thus, conflicting with the implicit prediction of the BTAC. At block 630, the BTAC entry associated with the conditional branch instruction is managed utilizing state information stored, for example, in branch prediction circuit 126. Different types of BTAC management are described above in connection with the discussion of FIG. 5. Alternatively, at block 630, the BTAC entry associated with the conditional branch instruction is managed due to the conflict between the branch predictor circuit and the BTAC lookup independent of any state stored in the branch predictor circuit.
The various illustrative logical blocks, modules, circuits, elements, and/or components described in connection with the embodiments disclosed herein may be implemented or performed with a general purpose processor, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field programmable gate array (FPGA) or other programmable logic component, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general-purpose processor may be a microprocessor, but in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computing components, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration.
The methods or algorithms described in connection with the embodiments disclosed herein may be embodied directly in hardware, in a software module executed by a processor, or in a combination of the two. A software module may reside in RAM memory, flash memory, ROM memory, EPROM memory, EEPROM memory, registers, hard disk, a removable disk, a CD-ROM, or any other form of storage medium known in the art. A storage medium may be coupled to the processor such that the processor can read information from, and write information to, the storage medium. In the alternative, the storage medium may be integral to the processor.
While the invention is disclosed in the context of embodiments, it will be recognized that a wide variety of implementations may be employed by persons of ordinary skill in the art consistent with the above discussion and the claims which follow below.

Claims (14)

What is claimed is:
1. A multiple stage branch prediction system comprising:
a branch target address cache (BTAC) configured to store a BTAC entry; and
a branch predictor comprising:
predicted direction counter, the predicted direction counter associated with a branch instruction;
a history register circuit, the history register circuit storing a historical branch direction of the branch instruction; and
a logic circuit configured to:
predict a first direction associated with the branch instruction, wherein the first direction is predicted based on the BTAC entry, wherein the first direction is used to speculatively prefetch a subsequent instruction into an instruction prefetch unit;
predict a second direction of the branch instruction, wherein the second direction is predicted based on the predicted direction counter, wherein in response to the second direction conflicting with the first direction, the subsequent instruction is flushed from the instruction prefetch unit and an other instruction is prefetched into the instruction prefetch unit, wherein the other instruction is selected to be prefetched based on the second direction;
modify a value of the predicted direction counter, wherein the modified value of the predicted direction counter is based on actual resolution of the branch instruction, the value in the predicted direction counter, but not information stored in the history register circuit; and
generate a management signal to manage the BTAC entry based on the modified value of the predicted direction counter.
2. The system of claim 1, wherein when a second BTAC entry is indicated as a most recently used BTAC entry, the logic circuit is configured to indicate the BTAC entry as the most recently used BTAC entry in response to the management signal.
3. The system of claim 1, wherein the subsequent instruction is flushed from the instruction prefetch unit prior to the branch instruction entering an instruction execution pipeline and the other instruction is prefetched prior to the branch instruction entering the instruction execution pipeline.
4. The system of claim 1, wherein the BTAC and the branch predictor are disposed in a processor.
5. The system of claim 1, wherein the history register circuit comprises a plurality of registers, each register storing a corresponding historical branch direction associated with a corresponding branch instruction processed by a pipeline within a time period.
6. A method comprising:
storing a historical branch direction of a branch instruction in a history register circuit;
using a predicted direction counter to predict a direction of the branch instruction;
modifying a value of the predicted direction counter, wherein the modified value of the predicted direction counter is based on actual resolution of the branch instruction, the value in the predicted direction counter, but not information stored in the history register circuit; and
generating a management signal to manage a branch target address cache (BTAC) entry based on the modified value of the predicted direction counter.
7. The method of claim 6, wherein a first predicted direction associated with the branch instruction is determined based on the BTAC entry, wherein the first predicted direction is used to speculatively prefetch a subsequent instruction into an instruction prefetch unit, and further comprising, in response to the direction predicted using the predicted direction counter conflicting with the first prediction direction, flushing the subsequent instruction from the instruction prefetch unit and prefetching another instruction into the instruction prefetch unit, wherein the other instruction is selected to be prefetched based on the direction predicted using the predicted direction counter.
8. The method of claim 7, wherein the subsequent instruction is flushed from the instruction prefetch unit prior to the branch instruction entering an instruction execution pipeline and the other instruction is prefetched prior to the branch instruction entering the instruction execution pipeline.
9. The method of claim 6, wherein using the predicted direction counter, modifying the predicted direction counter, and generating the management signal based on the modified value of the predicted direction counter are performed by a processor.
10. The method of claim 6, wherein the history register circuit comprises a plurality of registers, each register storing a corresponding historical branch direction associated with a corresponding branch instruction processed by a pipeline within a time period.
11. A multiple stage branch prediction system comprising:
means for storing a first entry to be indexed by an instruction fetch address and including a next fetch address;
means for storing a predicted direction counter associated with a branch instruction;
means for storing a historical branch direction of the branch instruction in a history register circuit;
means for utilizing the predicted direction counter to predict a direction of the branch instruction;
means for modifying a value of the predicted direction counter, wherein the modified value of the predicted direction counter is based on actual resolution of the branch instruction, the value in the predicted direction counter, but not information stored in the history register circuit; and
means for generating a management signal to manage the first entry based on the modified value of the predicted direction counter.
12. The system of claim 11, wherein the first entry is an entry of a branch target address cache (BTAC).
13. The system of claim 12, wherein when a third entry of the BTAC is indicated as a most recently used BTAC entry, a means for managing the BTAC is configured to indicate the first entry as the most recently used BTAC entry in response to the management signal to manage the first entry.
14. The system of claim 11, wherein a first predicted direction is associated with the branch instruction based on the first entry, wherein the first predicted direction is used to speculatively prefetch a subsequent instruction into an instruction prefetch unit, and wherein in response to the direction predicted using the predicted direction counter conflicting with the first predicted direction, the subsequent instruction is flushed from the instruction prefetch unit and another instruction is prefetched into the instruction prefetch unit, wherein the other instruction is selected to be prefetched based on the direction predicted using the predicted direction counter.
US11/427,349 2006-06-29 2006-06-29 System and method for selectively managing a branch target address cache of a multiple-stage predictor Active 2026-07-17 US8935517B2 (en)

Priority Applications (17)

Application Number Priority Date Filing Date Title
US11/427,349 US8935517B2 (en) 2006-06-29 2006-06-29 System and method for selectively managing a branch target address cache of a multiple-stage predictor
CN200780023873.2A CN101479700B (en) 2006-06-29 2007-06-28 Methods and apparatus for proactive branch target address cache management
MX2008016116A MX2008016116A (en) 2006-06-29 2007-06-28 Methods and apparatus for proactive branch target address cache management.
BRPI0713434-7A BRPI0713434A2 (en) 2006-06-29 2007-06-28 Methods and Equipment for Proactive Branch Target Address Cache Management
ES07840305T ES2386478T3 (en) 2006-06-29 2007-06-28 Procedure and apparatus for proactive buffer management of destination branch addresses
RU2009102809/08A RU2421783C2 (en) 2006-06-29 2007-06-28 Methods and devices for proactive control of branch addresses cache
EP11195677.7A EP2434393B1 (en) 2006-06-29 2007-06-28 Method and apparatus for proactive branch target address cache management
PCT/US2007/072317 WO2008003019A2 (en) 2006-06-29 2007-06-28 Methods and apparatus for proactive branch target address cache management
EP07840305A EP2035921B1 (en) 2006-06-29 2007-06-28 Methods and apparatus for proactive branch target address cache management
JP2009518553A JP5558814B2 (en) 2006-06-29 2007-06-28 Method and apparatus for proactive branch target address cache management
KR1020097001907A KR101074621B1 (en) 2006-06-29 2007-06-28 Methods and apparatus for proactive branch target address cache management
CA002654231A CA2654231A1 (en) 2006-06-29 2007-06-28 Methods and apparatus for proactive branch target address cache management
TW096123816A TWI386850B (en) 2006-06-29 2007-06-29 Methods and apparatus for proactive branch target address cache management
US13/281,913 US8782383B2 (en) 2006-06-29 2011-10-26 System and method for selectively managing a branch target address cache of a multiple-stage predictor
JP2013119018A JP2013229038A (en) 2006-06-29 2013-06-05 Methods and apparatus for proactive branch target address cache management
JP2015041619A JP2015144001A (en) 2006-06-29 2015-03-03 Methods and apparatus for proactive branch target address cache management
JP2017007265A JP2017107578A (en) 2006-06-29 2017-01-19 Methods and apparatus for proactive branch target address cache management

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/427,349 US8935517B2 (en) 2006-06-29 2006-06-29 System and method for selectively managing a branch target address cache of a multiple-stage predictor

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US13/281,913 Division US8782383B2 (en) 2006-06-29 2011-10-26 System and method for selectively managing a branch target address cache of a multiple-stage predictor

Publications (2)

Publication Number Publication Date
US20080005543A1 US20080005543A1 (en) 2008-01-03
US8935517B2 true US8935517B2 (en) 2015-01-13

Family

ID=38846531

Family Applications (2)

Application Number Title Priority Date Filing Date
US11/427,349 Active 2026-07-17 US8935517B2 (en) 2006-06-29 2006-06-29 System and method for selectively managing a branch target address cache of a multiple-stage predictor
US13/281,913 Expired - Fee Related US8782383B2 (en) 2006-06-29 2011-10-26 System and method for selectively managing a branch target address cache of a multiple-stage predictor

Family Applications After (1)

Application Number Title Priority Date Filing Date
US13/281,913 Expired - Fee Related US8782383B2 (en) 2006-06-29 2011-10-26 System and method for selectively managing a branch target address cache of a multiple-stage predictor

Country Status (12)

Country Link
US (2) US8935517B2 (en)
EP (2) EP2434393B1 (en)
JP (4) JP5558814B2 (en)
KR (1) KR101074621B1 (en)
CN (1) CN101479700B (en)
BR (1) BRPI0713434A2 (en)
CA (1) CA2654231A1 (en)
ES (1) ES2386478T3 (en)
MX (1) MX2008016116A (en)
RU (1) RU2421783C2 (en)
TW (1) TWI386850B (en)
WO (1) WO2008003019A2 (en)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3798998B2 (en) * 2002-06-28 2006-07-19 富士通株式会社 Branch prediction apparatus and branch prediction method
US8935517B2 (en) 2006-06-29 2015-01-13 Qualcomm Incorporated System and method for selectively managing a branch target address cache of a multiple-stage predictor
JP5145809B2 (en) * 2007-07-31 2013-02-20 日本電気株式会社 Branch prediction device, hybrid branch prediction device, processor, branch prediction method, and branch prediction control program
US20110236729A1 (en) 2008-12-05 2011-09-29 Roustaei Alex Hr Hydrogen cells or microcells with a hydrogen generator
FR2956869B1 (en) 2010-03-01 2014-05-16 Alex Hr Roustaei SYSTEM FOR PRODUCING HIGH CAPACITY FLEXIBLE FILM FOR PHOTOVOLTAIC AND OLED CELLS BY CYCLIC LAYER DEPOSITION
JP2011209774A (en) * 2010-03-26 2011-10-20 Fujitsu Ltd Branch prediction method and branch prediction circuit for executing the same
US8375565B2 (en) 2010-05-28 2013-02-19 Western Digital (Fremont), Llc Method for providing an electronic lapping guide corresponding to a near-field transducer of an energy assisted magnetic recording transducer
US8351307B1 (en) 2010-06-04 2013-01-08 Western Digital (Fremont), Llc Trailing edge optimized near field transducer having non-rectangular pin cross section
US8320219B1 (en) 2010-06-15 2012-11-27 Western Digital (Fremont), Llc Trailing edge optimized near field transducer
JP5656074B2 (en) * 2011-02-21 2015-01-21 日本電気株式会社 Branch prediction apparatus, processor, and branch prediction method
US9201654B2 (en) * 2011-06-28 2015-12-01 International Business Machines Corporation Processor and data processing method incorporating an instruction pipeline with conditional branch direction prediction for fast access to branch target instructions
US8749790B1 (en) 2011-12-08 2014-06-10 Western Digital (Fremont), Llc Structure and method to measure waveguide power absorption by surface plasmon element
US9811341B2 (en) * 2011-12-29 2017-11-07 Intel Corporation Managed instruction cache prefetching
US9430241B2 (en) 2012-06-15 2016-08-30 International Business Machines Corporation Semi-exclusive second-level branch target buffer
US9280351B2 (en) 2012-06-15 2016-03-08 International Business Machines Corporation Second-level branch target buffer bulk transfer filtering
US9298465B2 (en) 2012-06-15 2016-03-29 International Business Machines Corporation Asynchronous lookahead hierarchical branch prediction
US20140006752A1 (en) * 2012-06-27 2014-01-02 Qualcomm Incorporated Qualifying Software Branch-Target Hints with Hardware-Based Predictions
US10042776B2 (en) * 2012-11-20 2018-08-07 Arm Limited Prefetching based upon return addresses
US9441938B1 (en) 2013-10-08 2016-09-13 Western Digital (Fremont), Llc Test structures for measuring near field transducer disc length
JP6393590B2 (en) * 2013-11-22 2018-09-19 株式会社半導体エネルギー研究所 Semiconductor device
US9563430B2 (en) 2014-03-19 2017-02-07 International Business Machines Corporation Dynamic thread sharing in branch prediction structures
US10353819B2 (en) * 2016-06-24 2019-07-16 Qualcomm Incorporated Next line prefetchers employing initial high prefetch prediction confidence states for throttling next line prefetches in a processor-based system
US20170371669A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Branch target predictor
GB2553582B (en) 2016-09-13 2020-07-08 Advanced Risc Mach Ltd An apparatus and method for generating and processing a trace stream indicative of instruction execution by processing circuitry
US10613869B2 (en) * 2018-03-29 2020-04-07 Arm Limited Branch target address provision
US20210149676A1 (en) * 2019-11-14 2021-05-20 Higon Austin R&D Center Corporation Branch Prediction Method, Branch Prediction Unit and Processor Core

Citations (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5327536A (en) * 1990-05-22 1994-07-05 Nec Corporation Microprocessor having branch prediction function
EP0666538A2 (en) 1994-02-04 1995-08-09 Motorola, Inc. Data processor with branch target address cache and method of operation
JPH0962508A (en) 1995-08-29 1997-03-07 Hitachi Ltd Processor having branch registering instruction
US5740415A (en) * 1994-10-12 1998-04-14 Mitsubishi Denki Kabushiki Kaisha Instruction supplying apparatus with a branch target buffer having the contents so updated as to enhance branch prediction accuracy
US5890008A (en) * 1997-06-25 1999-03-30 Sun Microsystems, Inc. Method for dynamically reconfiguring a processor
US5964870A (en) * 1997-09-22 1999-10-12 Intel Corporation Method and apparatus for using function context to improve branch
US6263427B1 (en) * 1998-09-04 2001-07-17 Rise Technology Company Branch prediction mechanism
US20020188833A1 (en) 2001-05-04 2002-12-12 Ip First Llc Dual call/return stack branch prediction system
US20030041280A1 (en) * 1997-06-09 2003-02-27 Cacheflow, Inc. Network object cache engine
US6601161B2 (en) * 1998-12-30 2003-07-29 Intel Corporation Method and system for branch target prediction using path information
US20030212882A1 (en) * 2002-05-09 2003-11-13 International Business Machines Corporation BTB target prediction accuracy using a multiple target table (MTT)
RU2233470C2 (en) 1999-12-09 2004-07-27 Интел Корпорейшн Method and device for blocking synchronization signal in multithreaded processor
US20040172524A1 (en) * 2001-06-29 2004-09-02 Jan Hoogerbrugge Method, apparatus and compiler for predicting indirect branch target addresses
US20040186985A1 (en) * 2003-03-21 2004-09-23 Analog Devices, Inc. Method and apparatus for branch prediction based on branch targets
US20040193856A1 (en) * 2000-03-06 2004-09-30 Intel Corporation Presbyopic branch target prefetch method and apparatus
US20040210749A1 (en) * 2003-04-15 2004-10-21 Biles Stuart David Branch prediction in a data processing apparatus
TWI253588B (en) 2003-02-16 2006-04-21 Faraday Tech Corp Pipelined architecture with separate pre-fetch and instruction fetch stages
US20060236080A1 (en) * 2005-04-19 2006-10-19 Doing Richard W Reducing the fetch time of target instructions of a predicted taken branch instruction
US20120042155A1 (en) 2006-06-29 2012-02-16 Qualcomm Incorporated Methods and apparatus for proactive branch target address cache management

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4018A (en) * 1845-05-01 Closing and opening the- entrances to beehives
US2018A (en) * 1841-03-26 Joseph francis
JPH10105401A (en) * 1996-09-30 1998-04-24 Fujitsu Ltd Device of predicting branch instruction of processor
US6553488B2 (en) * 1998-09-08 2003-04-22 Intel Corporation Method and apparatus for branch prediction using first and second level branch prediction tables
US7000096B1 (en) * 2000-08-03 2006-02-14 International Business Machines Corporation Branch prediction circuits and methods and systems using the same
KR100528479B1 (en) * 2003-09-24 2005-11-15 삼성전자주식회사 Apparatus and method of branch prediction for low power consumption
DE602005027338D1 (en) * 2004-04-21 2011-05-19 Fujitsu Ltd BRANCHING PRECISION DEVICE, METHOD THEREFOR AND PROCESSOR

Patent Citations (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5327536A (en) * 1990-05-22 1994-07-05 Nec Corporation Microprocessor having branch prediction function
EP0666538A2 (en) 1994-02-04 1995-08-09 Motorola, Inc. Data processor with branch target address cache and method of operation
JPH07262006A (en) 1994-02-04 1995-10-13 Motorola Inc Data processor with branch target address cache
US5740415A (en) * 1994-10-12 1998-04-14 Mitsubishi Denki Kabushiki Kaisha Instruction supplying apparatus with a branch target buffer having the contents so updated as to enhance branch prediction accuracy
JPH0962508A (en) 1995-08-29 1997-03-07 Hitachi Ltd Processor having branch registering instruction
US20030041280A1 (en) * 1997-06-09 2003-02-27 Cacheflow, Inc. Network object cache engine
US5890008A (en) * 1997-06-25 1999-03-30 Sun Microsystems, Inc. Method for dynamically reconfiguring a processor
US5964870A (en) * 1997-09-22 1999-10-12 Intel Corporation Method and apparatus for using function context to improve branch
US6263427B1 (en) * 1998-09-04 2001-07-17 Rise Technology Company Branch prediction mechanism
US6601161B2 (en) * 1998-12-30 2003-07-29 Intel Corporation Method and system for branch target prediction using path information
RU2233470C2 (en) 1999-12-09 2004-07-27 Интел Корпорейшн Method and device for blocking synchronization signal in multithreaded processor
US20040193856A1 (en) * 2000-03-06 2004-09-30 Intel Corporation Presbyopic branch target prefetch method and apparatus
US20020188833A1 (en) 2001-05-04 2002-12-12 Ip First Llc Dual call/return stack branch prediction system
US20040172524A1 (en) * 2001-06-29 2004-09-02 Jan Hoogerbrugge Method, apparatus and compiler for predicting indirect branch target addresses
US20030212882A1 (en) * 2002-05-09 2003-11-13 International Business Machines Corporation BTB target prediction accuracy using a multiple target table (MTT)
US7082520B2 (en) * 2002-05-09 2006-07-25 International Business Machines Corporation Branch prediction utilizing both a branch target buffer and a multiple target table
TWI253588B (en) 2003-02-16 2006-04-21 Faraday Tech Corp Pipelined architecture with separate pre-fetch and instruction fetch stages
US20040186985A1 (en) * 2003-03-21 2004-09-23 Analog Devices, Inc. Method and apparatus for branch prediction based on branch targets
US7266676B2 (en) * 2003-03-21 2007-09-04 Analog Devices, Inc. Method and apparatus for branch prediction based on branch targets utilizing tag and data arrays
US20040210749A1 (en) * 2003-04-15 2004-10-21 Biles Stuart David Branch prediction in a data processing apparatus
US20060236080A1 (en) * 2005-04-19 2006-10-19 Doing Richard W Reducing the fetch time of target instructions of a predicted taken branch instruction
US20120042155A1 (en) 2006-06-29 2012-02-16 Qualcomm Incorporated Methods and apparatus for proactive branch target address cache management

Non-Patent Citations (10)

* Cited by examiner, † Cited by third party
Title
International Search Report-PCT/US07/072317, International Search Authority-European Patent Office Mar. 25, 2008.
Levitan D et al.,"The PowerPC 620(TM) microprocessor: a high performance superscalar RISC microprocessor", Compcon '95.'Technologies for the Information Superhighway', Digest of Papers. United States, IEEE, May 9, 1995, pp. 285-291.
Perleberg C.H., et al., "Branch target buffer design and optimizaton", IEEE Transactions on Computers, U.S.A. IEEE, Apr. 1993, vol. 42, Issue: 4, pp. 396-412.
Quick Technical Report on "Strengthen Branch Prediction Mechanism," Nikkei Electronics, Nikkei Business Publications, Inc., May 9, 1994, No. 607, p. 10.
Shen, John Paul et al., "Modern Processor Design: Fundamentals of Superscalar Processors", Oct. 9, 2002, McGraw-Hill, Beta edition, pp. 148-151. *
Songs S P et al: "The Power PC 604 RISC Microprocessor," IEEE Micro, IEEE Service Center, Los Alamitos, CA, US, vol. 14, No. 5, Oct. 1, 94, p. 8-17.
Taiwan Search Report-TW096123816-TIPO-Mar. 13, 2011.
Technical News "Enhancement of Branch Prediction Mechanism," Nikkei Electronics, Nikkei Business Publications, Inc., May 9, 1994, No. 607, p. 10.
Written Opinion-PCT/US07/072317, International Search Authority-European Patent Office Mar. 25, 2008.
Yeh et al.; "Two-Level Adaptive Training Branch Prediction"; 1991; ACM; pp. 51-61. *

Also Published As

Publication number Publication date
CN101479700B (en) 2015-06-03
CN101479700A (en) 2009-07-08
BRPI0713434A2 (en) 2012-03-13
MX2008016116A (en) 2009-01-20
JP5558814B2 (en) 2014-07-23
EP2035921A2 (en) 2009-03-18
JP2015144001A (en) 2015-08-06
JP2013229038A (en) 2013-11-07
JP2017107578A (en) 2017-06-15
RU2009102809A (en) 2010-08-10
KR20090031751A (en) 2009-03-27
ES2386478T3 (en) 2012-08-21
TW200816046A (en) 2008-04-01
TWI386850B (en) 2013-02-21
US20120042155A1 (en) 2012-02-16
RU2421783C2 (en) 2011-06-20
JP2009543223A (en) 2009-12-03
US8782383B2 (en) 2014-07-15
WO2008003019A2 (en) 2008-01-03
US20080005543A1 (en) 2008-01-03
CA2654231A1 (en) 2008-01-03
KR101074621B1 (en) 2011-10-17
WO2008003019A3 (en) 2008-05-02
EP2434393B1 (en) 2017-12-20
EP2035921B1 (en) 2012-06-06
EP2434393A1 (en) 2012-03-28

Similar Documents

Publication Publication Date Title
US8935517B2 (en) System and method for selectively managing a branch target address cache of a multiple-stage predictor
KR100930199B1 (en) Loop—suppresses update of branch history registers by exit branches
KR100944139B1 (en) Instruction prefetch mechanism
JP5231403B2 (en) Sliding window block based branch target address cache
JP2008532142A5 (en)
JP2011100466A5 (en)
EP2057536B1 (en) Methods and apparatus for reducing lookups in a branch target address cache
US6871275B1 (en) Microprocessor having a branch predictor using speculative branch registers
US6738897B1 (en) Incorporating local branch history when predicting multiple conditional branch outcomes

Legal Events

Date Code Title Description
AS Assignment

Owner name: QUALCOMM INCORPORATED, CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:RYCHLIK, BOHUSLAV;REEL/FRAME:017890/0440

Effective date: 20060628

STCF Information on status: patent grant

Free format text: PATENTED CASE

MAFP Maintenance fee payment

Free format text: PAYMENT OF MAINTENANCE FEE, 4TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1551)

Year of fee payment: 4

MAFP Maintenance fee payment

Free format text: PAYMENT OF MAINTENANCE FEE, 8TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1552); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

Year of fee payment: 8