Abstract:
Disclosed is a method and apparatus providing the ability to create a multi-level prediction algorithm where branch predictions beyond the first level of prediction are maintained at a secondary level because the prior level was unsuccessfully able to highly predict accurate the direction of the stated branch. A secondary level is smaller in size than the upper level through selected filtering thereby enabling high prediction accuracy of branches while minimizing the amount of hardware to perform stated predictions.

Description:
FIELD OF THE INVENTION  
       [0001]     This invention relates to computer processing systems, and particularly to directional branch prediction in a computer processing system.  
       DESCRIPTION OF BACKGROUND  
       [0002]     A basic pipeline microarchitecture of a microprocessor processes one instruction at a time. The basic dataflow for an instruction follows the steps of: instruction fetch, decode, address computation, data read, execute, and write back. Each stage within a pipeline or pipe occurs in order and hence a given stage can not progress unless the stage in front of it is progressing. In order to achieve highest performance for the given base, one instruction will enter the pipeline every cycle. Whenever the pipeline has to be delayed or cleared, this adds latency which in turn can be monitored by the performance a microprocessor carries out a task. While there are many complexities that can be created for performance gains, this sets the groundwork for branch prediction theory.  
         [0003]     There are many dependencies between instructions which prevent the optimal case of a new instruction entering the pipe every cycle. These dependencies add latency to the pipe. One category of latency contribution deals with branches. When a branch is decoded, is can either be taken or not taken. A branch is an instruction which can either fall through to the next sequential instruction, that is, not taken, or branch off to another instruction address, that is, taken, and carry our execution of a different sequential series of code. At decode time, the branch is detected, and must wait to be resolved in order to know the proper direction the instruction stream is to proceed. By waiting for potentially multiple pipeline stages for the branch to resolve the direction to proceed, latency is added into the pipeline. To overcome the latency of waiting for the branch to resolve, the direction of the branch can be predicted such that the pipe begins decoding either down the taken or not taken path. At branch resolution time, the guessed direction is compared to the actual direction the branch was to take. If the actual direction and the guessed direction are the same, then the latency of waiting for the branch to resolve has been removed from the pipeline in this scenario. If the actual and predicted direction miscompare, then decoding proceeded down the improper path and all instructions in this path, those behind that of the improperly guessed direction of the branch, must be flushed out of the pipe and the pipe must be restarted at the correct instruction address to begin decoding the actual path of the given branch. Because of controls involved with flushing the pipe and beginning over, there is a penalty associated with the improper guess and latency is added into the pipe over simply waiting for the branch to resolve before decoding further. By having a proportionally higher rate of correctly guessed paths, the ability to remove latency from the pipe by guessing the correct direction out weighs the latency added to the pipe for guessing the direction incorrectly.  
         [0004]     In order to improve the accuracy of the guesses associated with the guess of a branch, a branch history table (BHT) can be implemented which allows for direction guessing of a branch based on the past behavior of the direction the branch previously went. If the branch is always taken, as is the case of a subroutine return, then the branch will always be guessed as taken. IF/THEN/ELSE structures become more complex in their behavior. A branch may be always taken, sometimes taken and not taken, or always not taken. Based on the implementation of a dynamic branch predictor, this will determine how well the BHT, or some other mechanism, predicts the direction of the branch.  
         [0005]     A BHT is generally good at predicting dominantly taken or not taken branches. Its basis for prediction is based on the location of the branch and the past majority of directional occurrence for the said branch. Other schemes of branch prediction are based on paths leading up to the given branch. By basing the prediction value on the path that was taken to get to the given branch, the directionally guessed path is no longer based on the general occurrence for a given branch, but rather a path of taken and not taken branches. Such paths can be global paths where the path of the last X branches is used to determine the guess of the current branch. Likewise, for higher area cost, prediction schemes have been developed where the last X branches are kept track of for sets of branches. Going to the extreme, histories can be acquired such that the direction of the given branch is tracked based on the different paths of taken and not taken branches that lead to its given occurrence. The directional based schemes are pattern based and their histories can be said to be stored in a PHT, pattern history table. A BHT is good for predicting direction of branches which are dominantly taken or not taken and a PHT&#39;s strong point is predicting non-dominate branches. Because of these individual strengths, hybrid schemes have been developed where for every entry in the BHT, there is another array of equal size which keeps track of the BHT accuracy over the last few occurrences compared to that of the PHT. Every time the BHT is correct and the PHT is incorrect, the hybrid selector moves a counter towards the BHT. When the inverse occurs, the counter moves towards the PHT. When both are correct, or both are incorrect, the counter is stationary. Such a scheme combines the strengths of the individual predictors to create an even better predictor. It turns out that a very high percentage of the time, both predictors are predicting in the same direction. Because most of the times the predictors are predicting in the same direction, there is much overhead in creating such a hybrid scheme in respect to the performance advantages that are gained.  
         [0006]     Single branch prediction schemes have existed in many formats and they have been combined. The combinined predictors are in general referred to as hybrid predictors and may consist of two or more predictors. In general, these predictors are highly accurate; however, their accuracy improvements are small compared to the growth in area. Thus, a need exists to provide a way to generate hybrid predictors with high area savings.  
         [0007]     A further need exists for a hybrid predictor where the majority of the overhead of such a hybrid predictor is removed while the advantages of a PHT based scheme are maintained in majority. There is a further need for a simple path to pull in a third hybrid predictor while keeping the overall cost and complexity to such a scheme low and realistic to design in hardware.  
       SUMMARY OF THE INVENTION  
       [0008]     The shortcomings of the prior art are overcome and additional advantages are provided through the provision of a compression mechanism within a branch direction predictor, for example, a branch history table (BHT), such that an optimal number of entries can be stored in a table in respect to the directional prediction of non-dominant branches. In particular, a mechanism is defined which embeds a hybrid selection array into a branch history table thereby reducing the amount of area and array bits to hold a stated amount of entries. Furthermore, in addition to embedding the selection into the branch direction predictor, for example, the BHT, to complements the ability to do a reduced second predictor of stated hybrid scheme, such that area is further reduced. This reduction algorithm proves beneficial in reducing area over a standard hybrid predictor while improving performance over a single prediction scheme as dominant branches which can be predicted well via a BHT and are therefore no longer stored in the PHT or other hybrid addition prediction scheme.  
         [0009]     Previously, single branch prediction schemes existed in many formats and they were even combined. The combined predictors, hybrid predictors, may consist of two or more predictors. In general, these predictors were highly accurate; however, their accuracy improvements were small compared to the growth in area. The method, system, and program product defined herein provides a way to generate hybrid predictors with area savings potentially exceeding 60%. The filtered hybrid scheme described herein offers a better performance to power/area ratio than current non-filtered hybrid schemes.  
         [0010]     These advantages provide the benefits of reducing area and therefore power or allowing a larger number of branches, and/or patterns to be tracked for similar area. By allowing for additional branches to be tracked, high levels of performance remain achievable as program code increases in size and the number of branches to track increasingly grows in quantity.  
         [0011]     Disclosed herein are a method, a system, and a program product for branch prediction, including operating a computer having a pipeline processor and a first level branch direction predictor, for example, a branch history table, where a hybrid selector is formed in the branch direction predictor, such as the branch history table, non-dominant branches are filtered out, and a second branch prediction mechanism is used to predict branches which can not be predicted by a first predictor. The first predictor comprises the branch history table.  
         [0012]     In one embodiment a 2 bit, 4 state mechanism is used to predict history and select a prediction mechanism for a branch prediction. This typically includes selecting a secondary predictor from at least one state of the 4 states. The remaining states define the direction prediction of the stated branch.  
         [0013]     Alternatively, a 3 bit, 7 or 8 state mechanism is used to predict history and select a prediction mechanism for a branch prediction. In this embodiment a secondary predictor is selected from at least one of the states represented by 3 bits. The remaining states define the direction prediction of the stated branch.  
         [0014]     In the method, system, and program product the initial state for a branch in the branch history table is a function of the opcode of the given branch. Not taken branches are not installed into the Branch Target Buffer and the Branch History Table.  
         [0015]     In a still further embodiment of the invention the processor includes a Pattern History Table, and the method comprises basing indexing on past branches, where the set of past branches includes resolved but not branches which are never taken and not placed into the Branch Transfer Buffer/Branch History Table.  
         [0016]     In a preferred embodiment the method is recursive and creates multiple levels of hybrid prediction, and the Branch History Table is a first level predictor that selects the hybrid PHT predictor. A second level predictor may contain a state machine, and a third level predictor is included for branches which are poorly predicted by the first two predictors.  
         [0017]     The main predictor may be a state machine for transition to another predictor.  
         [0018]     System and computer program products corresponding to the above-summarized methods are also described and claimed herein.  
         [0019]     Additional features and advantages are realized through the techniques of the present invention. Other embodiments and aspects of the invention are described in detail herein and are considered a part of the claimed invention. For a better understanding of the invention with advantages and features, refer to the description and to the drawings. 
     
    
     THE FIGURES  
       [0020]     Various implementations and embodiments of the invention are described in the following detailed description taken in conjunction with the accompanying drawings in which:  
         [0021]      FIG. 1  illustrates one example of an array storing BTB and BHT contents  
         [0022]      FIG. 2  illustrates one example of a standard two-scheme hybrid predictor  
         [0023]      FIG. 3  illustrates one example of index creation for looking up an entry within a pattern history table (PHT).  
         [0024]      FIG. 4  illustrates one example of a 2 bit, 4 state, BHT filtering scheme  
         [0025]      FIG. 5  illustrates one example of a 3 bit, 7/8 state, BHT filtering scheme 
     
    
     DETAILED DESCRIPTION OF THE INVENTION  
       [0026]     Typically, branches based on direction can be classified into three categories: 1) predominately taken, 2) predominately not taken, and 3) branches with no dominate branch direction. Branches in the first two categories can be easily predicted using an addressed indexed two bit bimodal scheme. When tag bits are used to validate a table entry, it becomes unnecessary to have a branch target buffer, BTB, store not taken branches as those branches which are not found in the branch history table (BHT)/branch target buffer (BTB)  100 , shown in  FIG. 1 , can be treated as not taken. Keeping information about branches which are predominately not taken does not aid in improving the accuracy of a fixed size predictor and these branches will cause conflict and capacity misses for the branches in the first and third category; thereby reducing the accuracy for a given size BHT/BTB  100 . Branches in the third category, called non-dominate branches are difficult to predict. Many history based two level schemes, including Gshare, have been proposed to predict such branches. Hybrid methods have been developed to aid in covering all three of these categories. A BHT  210 , as shown in  FIG. 2 , which is indexed via an instruction address is good at covering the dominant branches while a Pattern History Table (PHT)  220  using Gshare for example is good at covering non-dominant branches. A third array  200 , indexed the same as the BHT, is used to select  230  which predictor is better at predicting a given branch. Given that in general, a significant majority of branches fall in the categories of dominantly taken and not taken, it becomes ideal to use some simple bimodal scheme for those stated branches and use a Gshare, or other more complex scheme, only for the non-dominant branches. This allows the use of a very small prediction array as compared to the standard Gshare scheme, which may require an array  220  of 10× the size of a filtered array  300 , as shown in  FIG. 3 . Also, the optimization mentioned above to put only taken branches in the BHT/BTB  100  suggest a modified Gshare scheme so as to use a modified Global History Register (MGHR)  320  such that the MGHR  320  will be updated with branches which are predominately taken or are non-dominate; thus, the MGHR  320  does not have information about branches which are predominately not taken as they are not in the BTB.  
         [0027]     As can be seen by the states stored in the BHT  130 , a reduction factor in respect to the hybrid selector takes place such that the BHT  130  can function with a default 2 bits, similar to a bimodal scheme; however, with a slightly modified definition, the 4 state machine now includes an embedded selector bit that can select which predictor to use. Through this usage, all usage of a select array is eliminated via the filtered hybrid scheme.  
         [0028]     The algorithm takes use of a BHT/BTB  100  and a modified Gshare scheme which includes a pattern history table (PHT)  300  and a modified global index (MGHR)  320 . Each entry in the BHT/BTB contains: 1) the address of previously taken branches (BA)  110 , 2) the address of the target address (TA)  120  with the branch identified in the BA field, and 3) a 2 or 3 state bits  130  for the identified branch (BA).  
         [0029]     The modified Gshare predictor consist of: 1) A ‘n’ bit modified global history register (MGHR)  320 , 2) a pattern history table (PHT)  300  containing 2 n  entries corresponding to the ‘n’ bit MGHR, and a register value  310  of the given instruction address that is to be used for indexing. In general, Gshare performs an xor  330  function on the instruction address  310  with that of the global history  320  to create an index into the PHT  300 .  
         [0030]     Defined for the BHT states is the option of a 4 state or 7/8 state design, shown in  FIG. 4 . In regard to the 2 bit, 4 state machine, the states are defined as: guess not taken (GNT)  430 , where in this state the BHT prediction is not taken. Guess weakly taken (GWT)  410 , where in this state the BHT prediction is taken. Guess Strongly Taken (GST)  420 , where in this state the BHT prediction is taken. Modified Gshare scheme (MGSH)  440 , where in this state the directional prediction is based off of the modified Gshare scheme prediction.  
         [0031]     When a new entry is installed, it is installed in either the strong  420  or weakly  410  taken state depending on the opcode. Conditional opcodes which have a bias towards not taken  400  are installed in the weakly taken state  410  while other branches are installed  401  in the strongly taken state  420 . For installing and entry in the BHT/BTB, a branch has to of have had a taken indication. After the entry is installed, it goes from one state to another depending on whether the branch is resolved taken or not taken. When an entry is in the GNT  430  state and then is resolved not taken  431 , it remains in the GNT  430  state; however, if the branch is resolved taken  450 , it goes into the MGSH state  440 . In the MGSH state  440 , direction is taken from the modified Gshare scheme. The entry remains in this state  440  irrespective of whether the branch resolves as taken  441  or not taken  441 . The only way it becomes invalidated, removed from this state, is when it is overwritten by some other entry based on a replacement scheme. When in the GWT  410  state and a branch is resolved not taken  460 , the new state becomes GNT  430 . Had the branch been resolved taken  480 , the new state becomes GST  420 . When in the GST state  420 , if the branch is resolved not taken  470 , the state transitions to GWT  410 . Had the branch been resolved taken  421 , the state remains GST  420 .  
         [0032]     The 3 bit scheme, shown in  FIG. 5 , provides a higher level of filtering and dictates 7 or 8 states. The optional state is the invalid state  570 . The invalid state  570  is a state of initialization. When a new entry is installed, it goes into the strong or weakly taken state depending on the opcode of the branch. Conditional branches which have a bias towards not taken are installed in the weakly taken state  510  while other branches are installed in the strongly taken state  500 . Likewise the invalid state  570  could also be transitioned to if for some reason an entry is to be removed from the table. Starting in the GST state  500 , if a branch is resolved taken, the future state remains the GST state  500 . If the branch is resolved not taken, then the new state becomes GWT  510 . When in the GWT  510  state, if a branch is resolved taken, a transition is made to the GST  500  state; however, if the branch is resolved not taken, a transition is made to the GWNT state  520 . In the GWNT state  520 , if a branch is resolved not taken, a transition is made to the GSNT state  530 ; however, if the branch is resolved taken, a transition is made to the MGSH state  560 . Once in the MGSH state  560 , this state remains the state for the given state machine until either a new branch is written into this entry within the BHT/BTB table  100  or the branch is invalidated for some reason in which case the state would then move to invalid  570  until a new branch is written into the given entry. In the GSNT state  530 , if a branch is resolved not taken, the updated state remains the GSNT state  530 . If the branch is resolved taken, the new state becomes the GWNT′ state  540 . In the GWNT′ state  540 , if the branch is resolved not taken, the state transitions back to the GSNT state  530 ; however, if the branch is taken, the updated state is GWT′  550 . Upon being in the GWT′ state  550 , if the branch is resolved taken, the updated state becomes GST  500 ; however, if the branch is resolved not taken, then once again the updated state becomes the MGSH state  560 .  
         [0033]     The modified global history register (MGHR)  320  is updated with branches which are predicted by the BHT  130  or PHT  300 . It is different from the concept of global history as branches which are always guessed not taken will never get written into the BHT  130  and consequently the history register is updated only for taken or non-dominant branches.  
         [0034]     PHT  300  branch direction guessing can use a single bit or any more elaborate multi-bit counting method such as that of a standard bimodal predictor to formulate a directional guess of taken or not taken. In respect to counting, every time a branch is resolved taken, the counter is increased. Every time the branch is not taken, the counter is decreased. Upon reaching states of all zeros or ones, the counter thresholds. The prediction is based on the most significant bit.  
         [0035]     The predictors described as the first and second level predictors are stated as examples that have a high efficiency based on accuracy. The exact methodologies of indexing the arrays for branch prediction is independent of the stated algorithm to keep track of direction based guessing for a given entry.  
         [0036]     Through recursive applications of the direction guessed based state machines additional levels of predictive arrays can be created to cover those branches that are not accurately covered by the first two levels. Furthermore, the concept of state based filtering can be applied on hybrid schemes in the same manner that a hybrid predictor is currently designed. For a given entry level, there would remain a selector array which tracks which predictor, ‘A’  210  or ‘B’  220  is performing at a higher level of accuracy.  
         [0037]     The capabilities of the present invention can be implemented in software, firmware, hardware or some combination thereof.  
         [0038]     As one example, one or more aspects of the present invention can be included in an article of manufacture (e.g., one or more computer program products) having, for instance, computer usable media. The media has embodied therein, for instance, computer readable program code means for providing and facilitating the capabilities of the present invention. The article of manufacture can be included as a part of a computer system or sold separately.  
         [0039]     Additionally, at least one program storage device readable by a machine, tangibly embodying at least one program of instructions executable by the machine to perform the capabilities of the present invention can be provided.  
         [0040]     The flow diagrams depicted herein are just examples. There may be many variations to these diagrams or the steps (or operations) described therein without departing from the spirit of the invention. For instance, the steps may be performed in a differing order, or steps may be added, deleted or modified. All of these variations are considered a part of the claimed invention.  
         [0041]     While the preferred embodiment to the invention has been described, it will be understood that those skilled in the art, both now and in the future, may make various improvements and enhancements which fall within the scope of the claims which follow. These claims should be construed to maintain the proper protection for the invention first described.