From cb844443353a311823f1e12058f788beda169e29 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Mon, 18 Nov 2024 23:07:41 +0530 Subject: [PATCH 01/17] BPU Design Documents --- docs/bpu_design_document/BPUDesignDoc.adoc | 306 ++++++++++++++++++ .../media/bpu_overview.png | Bin 0 -> 29735 bytes docs/bpu_design_document/media/bpu_uarch.png | Bin 0 -> 91131 bytes 3 files changed, 306 insertions(+) create mode 100644 docs/bpu_design_document/BPUDesignDoc.adoc create mode 100644 docs/bpu_design_document/media/bpu_overview.png create mode 100644 docs/bpu_design_document/media/bpu_uarch.png diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc new file mode 100644 index 00000000..2ba07708 --- /dev/null +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -0,0 +1,306 @@ +:doctitle: Design document of the Branch Prediction Unit + +:toc: + +[[Document_Information]] +== Document Information + +This document defines the micro-architectural design and +implementation details for the Branch Prediction Unit of +the Olympia simulator + +[[Revision_History]] +=== Revision History + +[width="100%",cols="11%,11%,16%,62%",options="header",] +|=== +|*Revision* |*Date* |*Author* |*Summary of Changes* +|0.2 | 2024.11.18 | Shobhit Sinha | BPU design documentation +|0.1 | 2024.11.12 | Jeff Nye | initial template +|=== + +[[Conventions_and_Terminology]] +=== Conventions and Terminology + +[width="100%",cols="17%,83%",options="header",] +|=== +|Label |Description +|BIM | A bi-modal table which stores the 2 bit counters of different branch +history patterns +|BTB| Branch target buffer +|RAS| Return address stack +|IRQ| Intermediate response queue to store the response obtained from +SimplePredictor until it is not allocated to FTQ +|FTQ| Fetch target queue to store information related to in-flight branches +which are used to update the BPU. +|=== + +[[Related_Documents]] +=== Related Documents + +[width="100%",cols="25%,75%",options="header",] +|=== +|*Title* |*Description* +| RISCV-BOOM Branch Predictor | https://docs.boom-core.org/en/latest/sections/branch-prediction/index.html +| XiangShan Branch Predictor| https://github.com/OpenXiangShan/XiangShan-doc/blob/main/docs/frontend/bp.md +|=== + + +[[Notes_Open_Issues]] +=== Notes/Open Issues + + + +* Note1 +* Note 2 + +[[OVERVIEW]] +== OVERVIEW + + +Branch Prediction Unit is the unit responsible for predicting the branch +outcomes and branch targets before branch instructions are actually +resolved in the pipeline in order to reduce latency between a branch and a +subsequent instruction. + +It receives input in the form of FetchPC from the Fetch unit in order to +predict the target address from which Fetch unit has to get next instruction. + + +[[Overview_Block_Diagram]] +=== Overview Block Diagram + +image:media/bpu_overview.png[image,width=576,height=366] + +Figure 1 - Overview of BPU in reference to Fetch unit + +[[Functional_Description]] +== Functional Description + +Branch Prediction Unit in Olympia consists mainly of two parts - +First one is a simple predictor which is intended to provide a very +fast prediction, although it may not be able to correctly predict +complex branches. The second part consists of a more complex +predictor which predicts even complex branches with better accuracy. + +[[Input_Ports]] +=== Input Ports + +** in_fetch_prediction_credits - To receive credits from Fetch unit to indicate availability + of slots +** in_fetch_prediction_req - To receive prediction requests from Fetch unit +** TODO: input port to receive de-allocated FTQ entry once that instruction packet is committed. + + +[[Output_Ports]] +=== Output Ports + +** out_fetch_prediction_res - To send prediction result to Fetch unit + +[[Counters]] +=== Counters + +** pred_req_num - Total number of prediction requests made to BPU +** num_mispred - Total number of mis-predictions +** mispred_perc - Percentage of mis-predictions + +[[Unit_Block_Diagram]] +=== Unit Block Diagram + +image:media/bpu_uarch.png[image,width=576,height=366] + +Figure 2 - Unit block diagram of BPU + +[[Block_Diagram_Description]] +=== Block Diagram Description + +BPU consists of a Simple-Predictor (which is accessed in the +first fetch cycle), a more Complex-Predictor (which is also accessed +in the first fetch cycle), an IRQ (a simple queue) which stores the +response obtained from the simple-predictor, and a FTQ (a simple +queue) which stores the information of all in-flight branch instructions +and is required in order to update the BPU on mis-prediction. + +[[Description_of_Simple_Predictor]] +== Description of SimplePredictor + +The SimplePredictor consists of a Bi-modal table (BIM), a Branch +Target Buffer (BTB) and a Return Address Stack (RAS). + +[[Operation]] +=== Operation + +For every prediction request made to SimplePredictor, first a Bi-modal +table indexed by the last N global history bits is used to determine if +the branch is Taken or Not-Taken. + +1. if branch is Taken +* if instruction type = branch, use BTB +* if instruction type = jump or call, use BTB +* if instruction type = ret, use RAS + +2. if branch is Not-Taken +* return PC + Instruction-Width + +Response of every prediction made by the SimplePredictor is stored in the +Intermediate Response Queue (IRQ). + +=== C++ Class Description + +Implemented as a subclass within the top level BPU class + +[[Parameterization]] +=== Parameterization + +1. ghr_size - Maximum number of history bits stored and utilised to +index into bi-modal table. +2. btb_queue_size - Maximum number of entries which can be allocated to +the BTB. +3. ras_stack_size - Maximum number of entries which can be pushed to the RAS. +4. ras_enable_overwrite - Boolean flag to set whether newer entries to +RAS on maximum capacity should overwrite or not. + +[[BIM]] +=== 1. Bi-modal table + +A bi-modal table which stores the 2 bit counters of different branch history patterns + +[[operation]] +==== Operation + +Pattern of last N history bits are used to index to the entry in the table which provides the direction +of the branch + +==== C++ Class Description + +Implemented as a subclass within the SimplePredictor class + +Utilises a hash table + +[[Branch_Target_Buffer]] +=== 2. Branch Target Buffer + +Tagged entry table in which a PC is used to find a matching target. + +[[operation]] +==== Operation + +PC is used to index into the table, which contains the target address of the branch instruction + +==== C++ Class Description + +Implemented as a subclass within the SimplePredictor class + +Utilizes a hash table to store target address for corresponding PC + + +[[Return_Address_Stack]] +=== 3. Return Address Stack + +Stack used to track function calls. + +[[operation]] +==== Operation + +** Push the PC on the stack whenever a "call" is made +** Return the PC whenever "ret" is called and pop the entry from RAS + + +==== C++ Class Description + +Implemented as a subclass within the SimplePredictor class + +Utilizes a stack + +[[Description_of_Complex_Predictor]] +== Description of ComplexPredictor + +The ComplexPredictor implements a TAGE-SC-L predictor in order to predict complex branches with better +accuracy than is possible with a simple combination of BIM, BTB and RAS. + +This part of the BPU only predicts the direction of the branch, and relies on +BTB or Decode stage to resolve target address. + +Prediction request to the ComplexPredictor is made simultaneously with the +prediction request made to the SimplePredictor. + +=== C++ Class Description + +Implemented as a subclass within the top level BPU class + + +[[Parameterization]] +=== Parameterization + +1. base_pred_table_size - Maximum number of possible entries in the base predictor +2. tage_pred_table_num - Number of prediction tables of different history lengths +3. tage_tag_width - Width of tag parameter of tagged component of TAGE +4. pred_bits +5. useful_bits + +=== 1. TAGE + +TAGE consists of a base predictor (a simple PC indexed 2-bit counter table), backed by +a number of tagged predictor components which uses geometrically increasing history lengths. + +Each entry in a tagged component consists of a "pred" which provides the prediction, a partial "tag", +and a useful counter "u". + +==== Operations + +When prediction is requested, the base predictor and tagged components are accessed simultaneously. +The base predictor provides a default prediction. The tagged components provide a prediction only on +a tag match. The overall prediction is provided by the hitting tagged predictor component that uses the +longest history. In case of no matching tagged predictor component, the prediction given by default +predictor is used. [1] + +==== C++ Class Description + +A subclass within the ComplexPredictor class + +Utilizes hash-table to store PC-indexed 2 bit branch history + +Utilizes a vector of vectors to store tagged predictor component tables + + +=== 2. SC +TODO: Statistical Corrector is an associative table used to monitor the mis-prediction from TAGE. + +=== 3. Loop Predictor +TODO: Loop predictor + + +[[Test_Bench_Description]] +== Test Bench Description + +[[Description_of_Test_1]] +=== Basic branch prediction accuracy test + +Verifies that the BPU correctly predicts simple highly biased branches + +[[Description_of_Test_2]] +=== Branch prediction warm up test + +On start-up, BPU takes several iterations to start predicting correctly. This test verifies +that on reset BPU is initialized properly. + +[[Description_of_Test_3]] +=== Branch mis-prediction recovery test + +On mis-prediction, test that BPU is updated and pipeline are flushed properly. + +[[Description_of_Test_4]] +=== Dynamic branch prediction test + +Tests that BPU properly predicts a mix of simple and complex branches. + + +[[Future_Work_or_Features]] +== Future Work or Features + + + +[[References_Citations]] +== References/Citations + +[1] Andre Seznec, The L-TAGE Branch Predictor, 2007 \ No newline at end of file diff --git a/docs/bpu_design_document/media/bpu_overview.png b/docs/bpu_design_document/media/bpu_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..9e068ab0a52a2c69c7126d813c565e41eef01bb0 GIT binary patch literal 29735 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 E0MZG(DF6Tf literal 0 HcmV?d00001 diff --git a/docs/bpu_design_document/media/bpu_uarch.png b/docs/bpu_design_document/media/bpu_uarch.png new file mode 100644 index 0000000000000000000000000000000000000000..1488de59ef440c4853341aaa68bcf2a304ab1fd4 GIT binary patch literal 91131 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 Y$ce{C>K)nE!2kBE>;0Cv_t=I10~XtAn*aa+ literal 0 HcmV?d00001 From b186afb35e36f2656367edfe090808b3b0695011 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Mon, 25 Nov 2024 22:09:17 +0530 Subject: [PATCH 02/17] Design update --- docs/bpu_design_document/BPUDesignDoc.adoc | 508 ++++++++++++++---- docs/bpu_design_document/media/TAGE.png | Bin 0 -> 42536 bytes .../media/bpu_process_flowchart.png | Bin 0 -> 112338 bytes docs/bpu_design_document/media/bpu_uarch.png | Bin 91131 -> 118878 bytes 4 files changed, 398 insertions(+), 110 deletions(-) create mode 100644 docs/bpu_design_document/media/TAGE.png create mode 100644 docs/bpu_design_document/media/bpu_process_flowchart.png diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 2ba07708..79f583a7 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -25,14 +25,13 @@ the Olympia simulator [width="100%",cols="17%,83%",options="header",] |=== |Label |Description -|BIM | A bi-modal table which stores the 2 bit counters of different branch -history patterns +|PHT | Pattern history table indexed by a hash of (part of) branch history and +current PC. Stores 2 bit counters to predict Taken/Not-Taken |BTB| Branch target buffer |RAS| Return address stack -|IRQ| Intermediate response queue to store the response obtained from -SimplePredictor until it is not allocated to FTQ -|FTQ| Fetch target queue to store information related to in-flight branches -which are used to update the BPU. +|FTQ| Fetch target queue stores information related to in-flight branches +which are used to update the BPU once instructions are finally committed. +|GHR| Global history register stores last several bits of branch history records. |=== [[Related_Documents]] @@ -63,8 +62,9 @@ outcomes and branch targets before branch instructions are actually resolved in the pipeline in order to reduce latency between a branch and a subsequent instruction. -It receives input in the form of FetchPC from the Fetch unit in order to -predict the target address from which Fetch unit has to get next instruction. +It receives prediction input in the form of PC and instruction type from the +Fetch unit and predicts the direction and target address from which Fetch unit +has to get the next instruction. [[Overview_Block_Diagram]] @@ -77,32 +77,55 @@ Figure 1 - Overview of BPU in reference to Fetch unit [[Functional_Description]] == Functional Description -Branch Prediction Unit in Olympia consists mainly of two parts - -First one is a simple predictor which is intended to provide a very -fast prediction, although it may not be able to correctly predict -complex branches. The second part consists of a more complex -predictor which predicts even complex branches with better accuracy. +Branch Prediction Unit in Olympia is a two-tiered branch predictor where the +first tier provides a simple but fast prediction. The second tier consists +of a more accurate predictor which can predict even complex branches. -[[Input_Ports]] -=== Input Ports +[[Input_Ports_BPU]] +=== Input Ports in BPU -** in_fetch_prediction_credits - To receive credits from Fetch unit to indicate availability +** `in_fetch_prediction_credits` - To receive credits from Fetch unit to indicate availability of slots -** in_fetch_prediction_req - To receive prediction requests from Fetch unit -** TODO: input port to receive de-allocated FTQ entry once that instruction packet is committed. +** `in_fetch_prediction_req` - To receive prediction requests from Fetch unit +** `TODO`: input port to receive de-allocated FTQ entry once that instruction packet is committed. -[[Output_Ports]] -=== Output Ports -** out_fetch_prediction_res - To send prediction result to Fetch unit +[[Output_Ports_BPU]] +=== Output Ports in BPU + +** `out_fetch_prediction_res` - To send prediction result to Fetch unit [[Counters]] === Counters -** pred_req_num - Total number of prediction requests made to BPU -** num_mispred - Total number of mis-predictions -** mispred_perc - Percentage of mis-predictions +** `pred_req_num` - Total number of prediction requests made to BPU +** `num_mispred` - Total number of mis-predictions +** `mispred_perc` - Percentage of mis-predictions + +[[Operation_of_BPU]] +=== Operation of BPU + +image:media/bpu_process_flowchart.png[image,width=578, height=366] + +** If the instruction type is a "call", the current PC is pushed to the +RAS, and is also sent to the BTB. If it is a hit, then the target is +sent out. Otherwise, an entry is made to the BTB. + +** If the instruction type is a "ret", then the PC is simply popped from +the RAS, and the PC is sent out. + +** If the instruction type is a branch then the PC is sent simultaneously +to the BTB, BasePredictor and the TAGE_SC_L-Predictor. + *** If it is a hit on BTB, and the BasePredictor predicts a taken + branch, then the output is sent to Fetch unit + *** If it is a hit on BTB, but + *** If it is not a hit on BTB, but the BasePredictor predicts a taken + branch, then an entry is allocated to the BTB. +** Pattern History Table (PHT) is indexed by the XOR hash of the last several + bits of global history and the PC. + + [[Unit_Block_Diagram]] === Unit Block Diagram @@ -114,183 +137,445 @@ Figure 2 - Unit block diagram of BPU [[Block_Diagram_Description]] === Block Diagram Description -BPU consists of a Simple-Predictor (which is accessed in the -first fetch cycle), a more Complex-Predictor (which is also accessed -in the first fetch cycle), an IRQ (a simple queue) which stores the -response obtained from the simple-predictor, and a FTQ (a simple +BPU consists of a BasePredictor (which is accessed in the +first fetch cycle), a TAGE_SC_L-Predictor (which is also accessed +in the first fetch cycle), and an FTQ (a simple queue) which stores the information of all in-flight branch instructions -and is required in order to update the BPU on mis-prediction. +and is required in order to update the BPU once instruction are finally +committed. -[[Description_of_Simple_Predictor]] -== Description of SimplePredictor +[[Description_of_PredictionInput]] +== Description of PredictionInput -The SimplePredictor consists of a Bi-modal table (BIM), a Branch -Target Buffer (BTB) and a Return Address Stack (RAS). +Olympia's Branch Predictor API intends the implementation of Branch Predictor to +define custom PredictionInput -[[Operation]] -=== Operation +[[Overview_of_PredictionInput]] +=== Overview +PredictionInput is received by the BPU from the Fetch unit whenever a request for +the prediction is made. Based on the data provided by this input, BPU makes the +prediction. -For every prediction request made to SimplePredictor, first a Bi-modal -table indexed by the last N global history bits is used to determine if -the branch is Taken or Not-Taken. +[[Structure_of_PredictionInput]] +=== Structure of PredictionInput -1. if branch is Taken -* if instruction type = branch, use BTB -* if instruction type = jump or call, use BTB -* if instruction type = ret, use RAS +** Program counter +** instruction type (branch, jump, or ret) -2. if branch is Not-Taken -* return PC + Instruction-Width +[[Class_Description]] +=== Class Description -Response of every prediction made by the SimplePredictor is stored in the -Intermediate Response Queue (IRQ). +** `uint64_t PC` +** -: +[[enum_to_describe_instruction_type]] +---- +enum instType { + InstructionType::Branch, + InstructionType::Jump, + InstructionType::Ret, + ..... +} +---- -=== C++ Class Description +[[Description_of_PredictionOutput]] +== Description of PredictionOutput + +Olympia's Branch Predictor API intends the implementation of Branch Predictor to +define custom PredictionOutput + +[[Overview_of_PredictionOutput]] +=== Overview +PredictionOutput is the format in which predictions made by the BPU is sent out +to the Fetch unit. + +[[Structure_of_PredictionOutput]] +=== Structure of PredictionOutput + +** bool pred +** uint64_t predPC + +[[Description_of_UpdateInput]] +== Description of UpdateInput + +Olympia's Branch Predictor API intends the implementation of Branch Predictor to +define custom UpdateInput + +[[Overview_of_UpdateInput]] +=== Overview + +Once the instructions are committed, UpdateInput is sent to the BPU in order to +update BPU's internal state in case of mis-prediction. + +The entry of FTQ, is the `UpdateInput` object. Once instructions are finally +committed, the entries are deallocated from FTQ and sent back to BPU. + +? - ftq entries are update at the time of commit and then sent back to reflect correctedPC, etc? + + +[[Structure_of_UpdateInput]] +=== Structure of UpdateInput + +** uint64_t PC +** bool branchTaken +** uint64_t correctedPC + + +[[Description_of_BPU]] +== Description of BPU +This section describes the overview and description for the top level class +which bolts the Branch Prediction Unit into the Olympia simulator. -Implemented as a subclass within the top level BPU class +[[Parameterization_of_BPU]] +=== Parameterization of BPU +1. `ghr_size` - Maximum number of branch history bits stored in Global +History Register + +=== C++ Class Description +* Inherits Olympia's Branch Prediction API +* Implements `getPrediction()` and `updatePrediction()` operations. +* Inherits `BasePredictor` and `TAGE_SC_L` class. + +=== Function list +*** `void recievePredictionRequest(PredictionInput predInput)` + ** receives PredictionInput from Fetch + ** store requests in temporary input buffer to be utilised by + BasePredictor and TAGE-SC-L + +*** `void recievePredictionUpdate()` + ** receives prediction update once instructions are committed + ** store deallocated FTQ entries in internal buffer in order to be + used by BasePredictor and TAGE-SC-L to update itself. + +*** `UpdateInput getPrediction()` + ** sends prediction to Fetch unit + ** makes entry in FTQ(?) + ** handle any potential prediction override between TAGE and BasePredictor + + +[[Description_of_Base_Predictor]] +== Description of BasePredictor + +The BasePredictor consists of a Pattern History Table (PHT) indexed by a GShare hash +of PC and some specific number of global branch history bits, a Branch Target +Buffer (BTB), and a Return Address Stack (RAS). + +[[Operation]] +=== Operation + +**Some points to note** + +** BTB only tells the target a branch can take if branch is taken, whether the +branch is actually (predicted) taken is a different question. + +** Direction of branch is predicted by PHT and TAGE-SC-L + +** Unconditional jumps require entry to be allocated to BTB if not already present, +and pushing the current PC to RAS. [[Parameterization]] === Parameterization -1. ghr_size - Maximum number of history bits stored and utilised to -index into bi-modal table. -2. btb_queue_size - Maximum number of entries which can be allocated to +1. `ghr_bits_for_hash` - Number of history bits from PHT utilized for hashing with +PC, to finally index into PHT. +2. `pht_size` - Maximum number of entries stored in Pattern History Table. +3. `btb_queue_size` - Maximum number of entries which can be allocated to the BTB. -3. ras_stack_size - Maximum number of entries which can be pushed to the RAS. -4. ras_enable_overwrite - Boolean flag to set whether newer entries to +4. `ras_stack_size` - Maximum number of entries which can be pushed to the RAS. +5. `ras_enable_overwrite` - Boolean flag to set whether newer entries to RAS on maximum capacity should overwrite or not. -[[BIM]] -=== 1. Bi-modal table -A bi-modal table which stores the 2 bit counters of different branch history patterns +=== C++ Class Description + +** Inherits `PHTEntry`, `BTBEntry`, and `RASEntry` class + +** Initializes PHT as an array of PHTEntry + +** Initializes BTB as a hashmap of PC and BTBEntry + +** Initializes RAS as an empty stack of type RASEntry. + +[[Pattern_History_Table]] +=== 1. Pattern History Table + +An array of 2 bit counters to predict direction of branches. It is indexed by a +GShare hash (XOR) of PC and some specific number of last few branch history bits. [[operation]] ==== Operation -Pattern of last N history bits are used to index to the entry in the table which provides the direction -of the branch +Whenever a PC is received by the BPU, the PC and the last several bits of global history +registers are hashed to index into the PHT. The counter at this particular index provides +the prediction that whether the branch will be taken or not. + +[[Parameterization_of_PHT]] +==== Parameterization -==== C++ Class Description +1. `pht_size` - Maximum number of entries stored in Pattern History Table. +2. `ghr_bits_for_hash` - Number of history bits from GHR utilized for hashing with + PC, to finally index into PHT. -Implemented as a subclass within the SimplePredictor class +==== C++ Class Description for PHTEntry -Utilises a hash table +consists of `uint64_t predCtr` [[Branch_Target_Buffer]] === 2. Branch Target Buffer Tagged entry table in which a PC is used to find a matching target. -[[operation]] +[[operation_of_BTB]] ==== Operation -PC is used to index into the table, which contains the target address of the branch instruction +Whenever a PC is received by the BPU, it is used to index into the BTB, +which contains the target address of the branch instruction. + +** If the prediction suggests that branch was not taken, but a branch was +actually taken, then add the entry into the BTB. + +** If the prediction suggests that branch was taken, but a branch was actually +not-taken, then remove the entry from the BTB. -==== C++ Class Description +** If there is no BTB entry corresponding to the taken branch or jump, a new +entry is allocated for it. -Implemented as a subclass within the SimplePredictor class +[[Parameterization_of_BTB]] +==== Parameterization +1. `btb_size` - Maximum number of entries which can be allocated to the BTB. -Utilizes a hash table to store target address for corresponding PC +[[BTB_Class_Description_of_BTBEntry]] +==== C++ Class Description of BTBEntry +** uint64_t targetPC + +[[BTB_Functions_List]] +==== Functions List +1. `bool addEntry(uint64_t PC, uint64_t targetPC)` - allocates a BTB entry into the +BTB table + +2. `bool removeEntry(uint64_t PC)` - deallocates a BTB entry corresponding to a +particular PC. + +3. `uint64_t getPredictedPC(uint64_t PC)` - returns the target PC corresponding to the +PC [[Return_Address_Stack]] === 3. Return Address Stack -Stack used to track function calls. +RAS is a small separate predictor used to predict returns. -[[operation]] +[[Operation_of_RAS]] ==== Operation ** Push the PC on the stack whenever a "call" is made ** Return the PC whenever "ret" is called and pop the entry from RAS -==== C++ Class Description +[[Parameterization_of_RAS]] +==== Parameterization +1. `ras_stack_size` - Maximum number of entries which can be pushed to the RAS. -Implemented as a subclass within the SimplePredictor class +2. `ras_enable_overwrite` - Boolean flag to set whether newer entries to RAS on + maximum capacity should overwrite or not. -Utilizes a stack -[[Description_of_Complex_Predictor]] -== Description of ComplexPredictor +==== C++ Class Description of RASEntry -The ComplexPredictor implements a TAGE-SC-L predictor in order to predict complex branches with better -accuracy than is possible with a simple combination of BIM, BTB and RAS. +* `uint64_t PC` -This part of the BPU only predicts the direction of the branch, and relies on -BTB or Decode stage to resolve target address. +[[RAS_Functions_List]] +==== Functions List -Prediction request to the ComplexPredictor is made simultaneously with the -prediction request made to the SimplePredictor. +1. `pushEntry()` - Whenever a JAL (call) instruction is executed, the PC is +pushed to the RAS stack. If the RAS is already full, then depending on the value +of `ras_enable_overwrite` parameter, overwrite the older entry. -=== C++ Class Description +2. `popEntry()` - Whenever a JALR (ret) instruction is being executed, the topmost +element of the RAS is popped and returned to the Fetch unit. -Implemented as a subclass within the top level BPU class +[[Description_of_TAGE-SC-L]] +== Description of TAGE_SC_L -[[Parameterization]] -=== Parameterization - -1. base_pred_table_size - Maximum number of possible entries in the base predictor -2. tage_pred_table_num - Number of prediction tables of different history lengths -3. tage_tag_width - Width of tag parameter of tagged component of TAGE -4. pred_bits -5. useful_bits +The second level predictor implements a TAGE-SC-L predictor in order to predict +complex branches with better accuracy than is possible with a simple combination of +PHT and RAS. === 1. TAGE -TAGE consists of a base predictor (a simple PC indexed 2-bit counter table), backed by +TAGE consists of a Bimodal table (a simple PC indexed 2-bit counter table), backed by a number of tagged predictor components which uses geometrically increasing history lengths. -Each entry in a tagged component consists of a "pred" which provides the prediction, a partial "tag", -and a useful counter "u". +Each entry in a tagged component consists of 3 fields - + + ** pred - represents the direction branch will take + ** u - represents if the prediction made by same component turned out to be correct + last time or not. + ** tag + +image:media/TAGE.png[image,width=500,height=300] ==== Operations -When prediction is requested, the base predictor and tagged components are accessed simultaneously. -The base predictor provides a default prediction. The tagged components provide a prediction only on -a tag match. The overall prediction is provided by the hitting tagged predictor component that uses the -longest history. In case of no matching tagged predictor component, the prediction given by default -predictor is used. [1] +When prediction is requested, the Bi-Modal table (T0) and tagged components (Ti; 1 < i < M) are +accessed simultaneously. The Bi-modal table (base predictor) provides the default prediction. +Whereas the tagged components provide a prediction only on a tag match. The overall prediction is +provided by the hitting tagged predictor component that uses the longest history length. In case of +no matching tagged predictor component, the prediction given by default predictor is used. [1] + +[[Parameterization_of_TAGE]] +==== Parameterization of TAGE +1. uint16_t Index +2. uint64_t Path +3. uint64_t History +4. tage_max_idx_bits - +5. tage_num_components - +6. tage_global_hist_buff_len - +7. tage_folded_hist_buff_len - +8. tage_path_hist_buff_len - +9. tage_min_hist_len +10. tage_hist_alpha - +11. tage_reset_useful_interval + +[[Parameterization_of_TAGE_BIM]] +==== Parameterization of TAGE-BIM +1. tage_bim_table_size - +2. tage_base_ctr_bits - + +[[Parameterization_of_Tagged_Component]] +==== Parameterization of Tagged Component +1. uint16_t Tag +2. tage_ctr_bits - +3. tage_useful_bits - -==== C++ Class Description -A subclass within the ComplexPredictor class +[[Class_Description_of_TAGE]] +==== C++ Class Description of TAGE -Utilizes hash-table to store PC-indexed 2 bit branch history +** Inherits two separate classes to represent bimodal table and tagged component table each. + +** Initializes an array of tagged components indexed by the hash of PC and history lengths + +==== 1.a. Bimodal Table +A table indexed by PC containing 2 bit counters to predict direct of branch + +C+++ Class Description of BimodalTableEntry + +`uint8_t predCountr;` + +==== 1.b. Tagged Component +A table indexed by the hash of PC and geometrically increasing history length + +===== 1.b.1 Tagged Component Entry +`pred` - represents the direction branch will take + +`u` - represents if the prediction made by same component turnmed out to be correct or not last time. + +`tag` + +C++ Class Description -Utilizes a vector of vectors to store tagged predictor component tables === 2. SC -TODO: Statistical Corrector is an associative table used to monitor the mis-prediction from TAGE. +Input - Prediction + (Address, History) pair + +To decide - whether to invert the prediction or not? + +Since in most cases the prediction provided by the TAGE predictor is correct, +the Statistical Corrector predictor agrees most of the time with the +TAGE predictor, therefore a relatively small Statistical Corrector +predictor performs close to an unlimited size Statistical Corrector +predictor [2]. + +[[Parameterization_of_Statistical_Corrector]] +==== Parameterization + +1. `num_of_logical_table` - Describes the number of logical tables indexed with same number +of shortest history lengths + +[[Class_Description_of_SC]] +==== Class Description of Statistical Corrector + + +[[Description_of_Loop_Predictor]] === 3. Loop Predictor -TODO: Loop predictor + +A loop predictor can simply identify regular loops with constant number of +iterations. The loop predictor will provide the global prediction when it +identifies the branch as a loop with a constant iteration number and when this +identification has reached a high confidence, i.e. when the loop has been +executed several times with the same number of iterations. + +It uses a Loop Predictor table which is essentially a k-way set associative table +whose entries is used to predict loops. + +[[Parameterization_of_loop_predictor_table]] +==== Parameterization of Loop Predictor Table + +1. `loop_pred_table_size` - Defines the maximum number of possible entries in the +loop predictor table + +2. `loop_pred_table_way` - Defines the Way size of the loop predictor table + +[[Class_Description_of_loop_predictor_entry]] +==== Class Description of LoopPredictorEntry +1. `uint16_t past_iter` - Stores the 14-bit count for the number of iterations seen in past + +2. `uint16_t current_iter` - stores the 14-bit count for the number of iterations seen currently + +3. `uint16_t tag` - Stores the 14-bit tag for the entry + +4. `uint8_t confidence` - 2-bit counter signifying confidence in prediction + +5. `uint8_t age` - 8-bit counter signifying age of entry + +6. `bool direction` - Stores the direction bit + +[[Functions_list_of_loop_predictor]] +==== Functions List of LoopPredictor + +1. `addEntry()` + +2. `removeEntry()` + +[[Fetch_Target_Queue]] +== Fetch Target Queue + +Fetch Target Queue stores information related to in-flight branches which are used to update +the BPU, once instructions are finally committed. + +Similar to ROB, but it is decoupled from it. + +It is a wrapper around a simple Queue. + +[[Class_Description]] +=== Class Description + [[Test_Bench_Description]] -== Test Bench Description +== Test Bench Descriptions [[Description_of_Test_1]] -=== Basic branch prediction accuracy test +=== 1. Basic branch prediction accuracy test Verifies that the BPU correctly predicts simple highly biased branches [[Description_of_Test_2]] -=== Branch prediction warm up test +=== 2. Branch prediction warm up test On start-up, BPU takes several iterations to start predicting correctly. This test verifies that on reset BPU is initialized properly. [[Description_of_Test_3]] -=== Branch mis-prediction recovery test +=== 3. Branch mis-prediction recovery test On mis-prediction, test that BPU is updated and pipeline are flushed properly. [[Description_of_Test_4]] -=== Dynamic branch prediction test +=== 4. Dynamic branch prediction test Tests that BPU properly predicts a mix of simple and complex branches. @@ -298,9 +583,12 @@ Tests that BPU properly predicts a mix of simple and complex branches. [[Future_Work_or_Features]] == Future Work or Features - +Devise the mechanism to override the prediction in case of mismatch between the prediction +made by BasePredictor and TAGE_SC_L-Predictor [[References_Citations]] == References/Citations -[1] Andre Seznec, The L-TAGE Branch Predictor, 2007 \ No newline at end of file +[1] André Seznec, The L-TAGE Branch Predictor, 2007 + +[2] André Seznec, A New Case for the TAGE Branch Predictor \ No newline at end of file diff --git a/docs/bpu_design_document/media/TAGE.png b/docs/bpu_design_document/media/TAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..24b20df80ee1352b8d5082103be5598f42625753 GIT binary patch literal 42536 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

e?Hj9eQuQBAQSVVKo` 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 gIO>Bxtd+CGYr{D^yFLbjecMK4_0poMgRZ+ literal 0 HcmV?d00001 diff --git a/docs/bpu_design_document/media/bpu_process_flowchart.png b/docs/bpu_design_document/media/bpu_process_flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..47e23ef09455148397304647372ba6a35091bfff GIT binary patch literal 112338 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 literal 0 HcmV?d00001 diff --git a/docs/bpu_design_document/media/bpu_uarch.png b/docs/bpu_design_document/media/bpu_uarch.png index 1488de59ef440c4853341aaa68bcf2a304ab1fd4..0111777a02910b5e1d6217af0c9d80b003d1de82 100644 GIT binary patch literal 118878 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 z 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 {YnHtsb{uk0rt?hXdQ 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 literal 91131 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 Y$ce{C>K)nE!2kBE>;0Cv_t=I10~XtAn*aa+ From 0008c7280bec25b20404beaf293bfcce2e114b31 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Tue, 26 Nov 2024 18:55:38 +0530 Subject: [PATCH 03/17] Document update --- docs/bpu_design_document/BPUDesignDoc.adoc | 192 ++++++++++----------- 1 file changed, 87 insertions(+), 105 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 79f583a7..a51de3d8 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -7,7 +7,7 @@ This document defines the micro-architectural design and implementation details for the Branch Prediction Unit of -the Olympia simulator +the Olympia simulator. [[Revision_History]] === Revision History @@ -26,8 +26,8 @@ the Olympia simulator |=== |Label |Description |PHT | Pattern history table indexed by a hash of (part of) branch history and -current PC. Stores 2 bit counters to predict Taken/Not-Taken -|BTB| Branch target buffer +current PC. Stores counters to predict Taken/Not-Taken +|BTB| Branch target buffer stores targetPC indexed by the current PC |RAS| Return address stack |FTQ| Fetch target queue stores information related to in-flight branches which are used to update the BPU once instructions are finally committed. @@ -44,19 +44,9 @@ which are used to update the BPU once instructions are finally committed. | XiangShan Branch Predictor| https://github.com/OpenXiangShan/XiangShan-doc/blob/main/docs/frontend/bp.md |=== - -[[Notes_Open_Issues]] -=== Notes/Open Issues - - - -* Note1 -* Note 2 - [[OVERVIEW]] == OVERVIEW - Branch Prediction Unit is the unit responsible for predicting the branch outcomes and branch targets before branch instructions are actually resolved in the pipeline in order to reduce latency between a branch and a @@ -79,7 +69,8 @@ Figure 1 - Overview of BPU in reference to Fetch unit Branch Prediction Unit in Olympia is a two-tiered branch predictor where the first tier provides a simple but fast prediction. The second tier consists -of a more accurate predictor which can predict even complex branches. +of a more accurate predictor which can predict even complex branches but takes an +additional cycle. [[Input_Ports_BPU]] === Input Ports in BPU @@ -88,7 +79,7 @@ of a more accurate predictor which can predict even complex branches. of slots ** `in_fetch_prediction_req` - To receive prediction requests from Fetch unit -** `TODO`: input port to receive de-allocated FTQ entry once that instruction packet is committed. +** `TODO-`: input port to receive de-allocated FTQ entry once that instruction packet is committed. [[Output_Ports_BPU]] @@ -103,34 +94,10 @@ of a more accurate predictor which can predict even complex branches. ** `num_mispred` - Total number of mis-predictions ** `mispred_perc` - Percentage of mis-predictions -[[Operation_of_BPU]] -=== Operation of BPU - -image:media/bpu_process_flowchart.png[image,width=578, height=366] - -** If the instruction type is a "call", the current PC is pushed to the -RAS, and is also sent to the BTB. If it is a hit, then the target is -sent out. Otherwise, an entry is made to the BTB. - -** If the instruction type is a "ret", then the PC is simply popped from -the RAS, and the PC is sent out. - -** If the instruction type is a branch then the PC is sent simultaneously -to the BTB, BasePredictor and the TAGE_SC_L-Predictor. - *** If it is a hit on BTB, and the BasePredictor predicts a taken - branch, then the output is sent to Fetch unit - *** If it is a hit on BTB, but - *** If it is not a hit on BTB, but the BasePredictor predicts a taken - branch, then an entry is allocated to the BTB. -** Pattern History Table (PHT) is indexed by the XOR hash of the last several - bits of global history and the PC. - - - [[Unit_Block_Diagram]] === Unit Block Diagram -image:media/bpu_uarch.png[image,width=576,height=366] +image:media/bpu_uarch.png[image,width=800,height=366] Figure 2 - Unit block diagram of BPU @@ -166,16 +133,7 @@ prediction. === Class Description ** `uint64_t PC` -** -: -[[enum_to_describe_instruction_type]] ----- -enum instType { - InstructionType::Branch, - InstructionType::Jump, - InstructionType::Ret, - ..... -} ----- +** `uint8_t instType` [[Description_of_PredictionOutput]] == Description of PredictionOutput @@ -191,8 +149,16 @@ to the Fetch unit. [[Structure_of_PredictionOutput]] === Structure of PredictionOutput -** bool pred -** uint64_t predPC +** Prediction of direction taken by branch + +** Prediction of target PC + + +[[Class_Description_of_PredictionOutput]] +=== Class Description of PredictionOutput + +** `bool predBranchTaken` +** `uint64_t predPC` [[Description_of_UpdateInput]] == Description of UpdateInput @@ -206,18 +172,24 @@ define custom UpdateInput Once the instructions are committed, UpdateInput is sent to the BPU in order to update BPU's internal state in case of mis-prediction. -The entry of FTQ, is the `UpdateInput` object. Once instructions are finally -committed, the entries are deallocated from FTQ and sent back to BPU. +[[Structure_of_UpdateInput]] +=== Structure of UpdateInput -? - ftq entries are update at the time of commit and then sent back to reflect correctedPC, etc? +** PC of branch instruction +** Branch actually taken or not-taken -[[Structure_of_UpdateInput]] -=== Structure of UpdateInput +** Corrected target address + + +[[Class_Description_of_UpdateInput]] +=== Class Description of UpdateInput + +** `uint64_t PC` -** uint64_t PC -** bool branchTaken -** uint64_t correctedPC +** `bool actualBranchTaken` + +** `uint64_t correctedTargetPC` [[Description_of_BPU]] @@ -228,28 +200,27 @@ which bolts the Branch Prediction Unit into the Olympia simulator. [[Parameterization_of_BPU]] === Parameterization of BPU 1. `ghr_size` - Maximum number of branch history bits stored in Global -History Register +History Register (GHR) === C++ Class Description * Inherits Olympia's Branch Prediction API -* Implements `getPrediction()` and `updatePrediction()` operations. * Inherits `BasePredictor` and `TAGE_SC_L` class. === Function list -*** `void recievePredictionRequest(PredictionInput predInput)` - ** receives PredictionInput from Fetch +*** `void recievePredictionRequest()` + ** called whenever PredictionInput is received on input port on BPU. ** store requests in temporary input buffer to be utilised by - BasePredictor and TAGE-SC-L + BasePredictor and TAGE-SC-L. *** `void recievePredictionUpdate()` - ** receives prediction update once instructions are committed + ** receives UpdateInput from input port in BPU once instructions are committed. ** store deallocated FTQ entries in internal buffer in order to be used by BasePredictor and TAGE-SC-L to update itself. -*** `UpdateInput getPrediction()` - ** sends prediction to Fetch unit - ** makes entry in FTQ(?) - ** handle any potential prediction override between TAGE and BasePredictor +*** `PreditionOutput sendPrediction()` + ** sends prediction to Fetch unit. + ** makes entry in FTQ. + ** Later on, handle any potential prediction override between TAGE and BasePredictor. [[Description_of_Base_Predictor]] @@ -262,25 +233,42 @@ Buffer (BTB), and a Return Address Stack (RAS). [[Operation]] === Operation -**Some points to note** +image:media/bpu_process_flowchart.png[image,width=700, height=366] + +** If the instruction type is a "call", the current PC is pushed to the +RAS, and is also sent to the BTB. If it is a hit, then the target is +sent out. Otherwise, an entry is made to the BTB. + +** If the instruction type is a "ret", then the PC is simply popped from +the RAS, and the PC is sent out. + +** If the instruction type is a branch then the PC is sent simultaneously +to the BTB, BasePredictor and the TAGE_SC_L-Predictor. +*** If it is a hit on BTB, and the BasePredictor predicts a taken +branch, then the output is sent to Fetch unit +*** If it is a hit on BTB, but +*** If it is not a hit on BTB, but the BasePredictor predicts a taken +branch, then an entry is allocated to the BTB. +** Pattern History Table (PHT) is indexed by the XOR hash of the last several +bits of global history and the PC. + +[[Points_to_note]] +=== Points to note ** BTB only tells the target a branch can take if branch is taken, whether the -branch is actually (predicted) taken is a different question. +branch is actually (predicted to be) taken is a different question. ** Direction of branch is predicted by PHT and TAGE-SC-L -** Unconditional jumps require entry to be allocated to BTB if not already present, -and pushing the current PC to RAS. - [[Parameterization]] === Parameterization -1. `ghr_bits_for_hash` - Number of history bits from PHT utilized for hashing with +1. `ghr_bits_for_hash` - Number of history bits from GHR used for hashing with PC, to finally index into PHT. 2. `pht_size` - Maximum number of entries stored in Pattern History Table. -3. `btb_queue_size` - Maximum number of entries which can be allocated to +3. `btb_size` - Maximum number of entries which can be allocated to the BTB. -4. `ras_stack_size` - Maximum number of entries which can be pushed to the RAS. +4. `ras_size` - Maximum number of entries which can be pushed to the RAS. 5. `ras_enable_overwrite` - Boolean flag to set whether newer entries to RAS on maximum capacity should overwrite or not. @@ -298,7 +286,7 @@ RAS on maximum capacity should overwrite or not. [[Pattern_History_Table]] === 1. Pattern History Table -An array of 2 bit counters to predict direction of branches. It is indexed by a +An array of n bit counters to predict direction of branches. It is indexed by a GShare hash (XOR) of PC and some specific number of last few branch history bits. [[operation]] @@ -314,10 +302,12 @@ the prediction that whether the branch will be taken or not. 1. `pht_size` - Maximum number of entries stored in Pattern History Table. 2. `ghr_bits_for_hash` - Number of history bits from GHR utilized for hashing with PC, to finally index into PHT. +3. `ctr_bits` - Number of bits used by counter used to make prediction. -==== C++ Class Description for PHTEntry +[[Class_Description_of_PHTEntry]] +==== Class Description for PHTEntry -consists of `uint64_t predCtr` +** `uint64_t predCtr` [[Branch_Target_Buffer]] === 2. Branch Target Buffer @@ -328,25 +318,12 @@ Tagged entry table in which a PC is used to find a matching target. ==== Operation Whenever a PC is received by the BPU, it is used to index into the BTB, -which contains the target address of the branch instruction. - -** If the prediction suggests that branch was not taken, but a branch was -actually taken, then add the entry into the BTB. +which contains the target address of the next instruction. -** If the prediction suggests that branch was taken, but a branch was actually -not-taken, then remove the entry from the BTB. +[[Class_Description_of_BTBEntry]] +==== Class Description of BTBEntry -** If there is no BTB entry corresponding to the taken branch or jump, a new -entry is allocated for it. - -[[Parameterization_of_BTB]] -==== Parameterization -1. `btb_size` - Maximum number of entries which can be allocated to the BTB. - -[[BTB_Class_Description_of_BTBEntry]] -==== C++ Class Description of BTBEntry - -** uint64_t targetPC +** `uint64_t targetPC` [[BTB_Functions_List]] ==== Functions List @@ -403,7 +380,7 @@ PHT and RAS. === 1. TAGE -TAGE consists of a Bimodal table (a simple PC indexed 2-bit counter table), backed by +TAGE consists of a Bimodal table (a simple PC indexed n-bit counter table), backed by a number of tagged predictor components which uses geometrically increasing history lengths. Each entry in a tagged component consists of 3 fields - @@ -413,7 +390,7 @@ Each entry in a tagged component consists of 3 fields - last time or not. ** tag -image:media/TAGE.png[image,width=500,height=300] +image:media/TAGE.png[image,width=700,height=300] ==== Operations @@ -439,8 +416,8 @@ no matching tagged predictor component, the prediction given by default predicto [[Parameterization_of_TAGE_BIM]] ==== Parameterization of TAGE-BIM -1. tage_bim_table_size - -2. tage_base_ctr_bits - +1. `tage_bim_table_size` - Size of the bimodal table of TAGE +2. `tage_base_ctr_bits` - Number of bits used to make prediction by bimodal table of TAGE. [[Parameterization_of_Tagged_Component]] ==== Parameterization of Tagged Component @@ -548,10 +525,15 @@ the BPU, once instructions are finally committed. Similar to ROB, but it is decoupled from it. -It is a wrapper around a simple Queue. +Implemented using a simple Queue. -[[Class_Description]] -=== Class Description +[[Class_Description_of_FTQ]] +=== Class Description of FTQ + +[[Functions_list_of_FTQ]] +=== Functions list +** `addEntry()` - +** `removeEntry()` - From 27e9ec9f17c2787e381b025d4dc27324e26b2196 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Wed, 27 Nov 2024 01:20:03 +0530 Subject: [PATCH 04/17] Update FTQ description --- docs/bpu_design_document/BPUDesignDoc.adoc | 55 ++++++++++++++-------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index a51de3d8..112b062e 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -203,6 +203,7 @@ which bolts the Branch Prediction Unit into the Olympia simulator. History Register (GHR) === C++ Class Description +* Inherits `sparta::Unit` * Inherits Olympia's Branch Prediction API * Inherits `BasePredictor` and `TAGE_SC_L` class. @@ -275,13 +276,13 @@ RAS on maximum capacity should overwrite or not. === C++ Class Description -** Inherits `PHTEntry`, `BTBEntry`, and `RASEntry` class +** Inherits `PHTEntry` and `BTBEntry` class -** Initializes PHT as an array of PHTEntry +** Initializes PHT as a hashmap of PC and `PHTEntry` -** Initializes BTB as a hashmap of PC and BTBEntry +** Initializes BTB as a hashmap of PC and `BTBEntry` -** Initializes RAS as an empty stack of type RASEntry. +** Initializes RAS as an empty stack of `uint64_t` [[Pattern_History_Table]] === 1. Pattern History Table @@ -325,6 +326,7 @@ which contains the target address of the next instruction. ** `uint64_t targetPC` + [[BTB_Functions_List]] ==== Functions List 1. `bool addEntry(uint64_t PC, uint64_t targetPC)` - allocates a BTB entry into the @@ -378,6 +380,7 @@ The second level predictor implements a TAGE-SC-L predictor in order to predict complex branches with better accuracy than is possible with a simple combination of PHT and RAS. +[[Description_of_TAGE]] === 1. TAGE TAGE consists of a Bimodal table (a simple PC indexed n-bit counter table), backed by @@ -392,7 +395,8 @@ Each entry in a tagged component consists of 3 fields - image:media/TAGE.png[image,width=700,height=300] -==== Operations +[[Operation_of_TAGE]] +==== Operation of TAGE When prediction is requested, the Bi-Modal table (T0) and tagged components (Ti; 1 < i < M) are accessed simultaneously. The Bi-modal table (base predictor) provides the default prediction. @@ -421,13 +425,13 @@ no matching tagged predictor component, the prediction given by default predicto [[Parameterization_of_Tagged_Component]] ==== Parameterization of Tagged Component -1. uint16_t Tag -2. tage_ctr_bits - -3. tage_useful_bits - +1. `uint16_t Tag` - +2. `tage_ctr_bits` - +3. `tage_useful_bits` - Number of bits which represents useful value [[Class_Description_of_TAGE]] -==== C++ Class Description of TAGE +==== Class Description of TAGE ** Inherits two separate classes to represent bimodal table and tagged component table each. @@ -436,29 +440,25 @@ no matching tagged predictor component, the prediction given by default predicto ==== 1.a. Bimodal Table A table indexed by PC containing 2 bit counters to predict direct of branch -C+++ Class Description of BimodalTableEntry +==== Class Description of TAGE_BIMEntry `uint8_t predCountr;` ==== 1.b. Tagged Component A table indexed by the hash of PC and geometrically increasing history length -===== 1.b.1 Tagged Component Entry +==== 1.b.1 Tagged Component Entry `pred` - represents the direction branch will take `u` - represents if the prediction made by same component turnmed out to be correct or not last time. `tag` -C++ Class Description - - - === 2. SC -Input - Prediction + (Address, History) pair +**Input** - Prediction + (Address, History) pair -To decide - whether to invert the prediction or not? +**To decide** - whether to invert the prediction or not? Since in most cases the prediction provided by the TAGE predictor is correct, the Statistical Corrector predictor agrees most of the time with the @@ -523,15 +523,30 @@ loop predictor table Fetch Target Queue stores information related to in-flight branches which are used to update the BPU, once instructions are finally committed. -Similar to ROB, but it is decoupled from it. +Similar to ROB, but it is decoupled from it. Implemented using a Queue. -Implemented using a simple Queue. +Entries are allocated to FTQ when predictions are sent to Fetch. +Upon retirement of instructions, the `correctedPC` and `actuallyTaken` values are written, +and then sent to BPU to update its internal state. [[Class_Description_of_FTQ]] === Class Description of FTQ +** Initialises a Queue of `FTQEntry` + +[[Class_Description_of_FTQEntry]] +==== Class Description of FTQEntry + +** `uint64_t targetPC` + +** `uint64_t correctedPC` + +** `bool pred` + +** `bool actuallyTaken` + [[Functions_list_of_FTQ]] -=== Functions list +==== Functions list ** `addEntry()` - ** `removeEntry()` - From b965ec4d84febbd18b95e0c629a9b47afcdfbd3a Mon Sep 17 00:00:00 2001 From: Shobhit Date: Mon, 2 Dec 2024 02:01:42 +0530 Subject: [PATCH 05/17] added corresponding ports and updated parameter names --- docs/bpu_design_document/BPUDesignDoc.adoc | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 112b062e..42820db4 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -81,12 +81,25 @@ additional cycle. ** `TODO-`: input port to receive de-allocated FTQ entry once that instruction packet is committed. +[[Corresponding_output_ports]] +==== Corresponding Output Ports + +** `out_bpu_prediction_credits` - in Fetch.cpp. To send credits to BPU to indicate availability of + slots. + +** `out_bpu_prediction_req` - in Fetch.cpp. To send PredictionInput to BPU. + [[Output_Ports_BPU]] === Output Ports in BPU ** `out_fetch_prediction_res` - To send prediction result to Fetch unit +[[Corresponding_input_ports]] +==== Corresponding Input Ports + +** `in_bpu_prediction_res` - in Fetch.cpp. To receive prediction result from BPU. + [[Counters]] === Counters @@ -157,7 +170,7 @@ to the Fetch unit. [[Class_Description_of_PredictionOutput]] === Class Description of PredictionOutput -** `bool predBranchTaken` +** `bool predDirection` ** `uint64_t predPC` [[Description_of_UpdateInput]] @@ -185,9 +198,9 @@ update BPU's internal state in case of mis-prediction. [[Class_Description_of_UpdateInput]] === Class Description of UpdateInput -** `uint64_t PC` +** `uint64_t instrPC` -** `bool actualBranchTaken` +** `bool correctedDirection` ** `uint64_t correctedTargetPC` From f54f802138bdf2aa4aa0ecd791753a51792e9961 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Mon, 2 Dec 2024 12:46:38 +0530 Subject: [PATCH 06/17] updated BasePredictor part --- docs/bpu_design_document/BPUDesignDoc.adoc | 108 ++++++++++++--------- 1 file changed, 63 insertions(+), 45 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 42820db4..68fbe0c4 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -214,11 +214,33 @@ which bolts the Branch Prediction Unit into the Olympia simulator. === Parameterization of BPU 1. `ghr_size` - Maximum number of branch history bits stored in Global History Register (GHR) +2. `ghr_bits_for_hash` - Number of history bits from GHR used for hashing with +PC, to finally index into PHT. +3. `pht_size` - Maximum number of entries stored in Pattern History Table. +4. `ctr_bits` - Number of bits used by counter in PHT to make prediction. +5. `btb_size` - Maximum number of entries which can be allocated to +the BTB. +6. `ras_size` - Maximum number of entries which can be pushed to the RAS. +7. `ras_enable_overwrite` - Boolean flag to set whether newer entries to +RAS on maximum capacity should overwrite or not. + +8. `tage_bim_table_size` - Size of the bimodal table of TAGE +9. `tage_base_ctr_bits` - Number of bits used to make prediction by bimodal table of TAGE. + +10. `num_of_logical_table` - Describes the number of logical tables in SC indexed with same number +of shortest history lengths + +11. `loop_pred_table_size` - Defines the maximum number of possible entries in the +loop predictor table +12. `loop_pred_table_way` - Defines the Way size of the loop predictor table -=== C++ Class Description +[[Class_Description_of_BPU]] +=== Class Description of BPU * Inherits `sparta::Unit` * Inherits Olympia's Branch Prediction API -* Inherits `BasePredictor` and `TAGE_SC_L` class. +* Includes `PredictionInput`, `PredictionOutput`, `UpdateInput` class. +* Includes `BasePredictor` and `TAGE_SC_L` class. +* Contains private member `ghr_` to represent GHR. === Function list *** `void recievePredictionRequest()` @@ -236,6 +258,11 @@ History Register (GHR) ** makes entry in FTQ. ** Later on, handle any potential prediction override between TAGE and BasePredictor. +*** `updateGHRTaken()` - shifts all history bits by 1 position to left, and set last bit as 1. + +*** `updateGHRNotTaken()` - shifts all history bits by 1 position to left, and set last bit as 0. + + [[Description_of_Base_Predictor]] == Description of BasePredictor @@ -274,33 +301,23 @@ branch is actually (predicted to be) taken is a different question. ** Direction of branch is predicted by PHT and TAGE-SC-L -[[Parameterization]] -=== Parameterization - -1. `ghr_bits_for_hash` - Number of history bits from GHR used for hashing with -PC, to finally index into PHT. -2. `pht_size` - Maximum number of entries stored in Pattern History Table. -3. `btb_size` - Maximum number of entries which can be allocated to -the BTB. -4. `ras_size` - Maximum number of entries which can be pushed to the RAS. -5. `ras_enable_overwrite` - Boolean flag to set whether newer entries to -RAS on maximum capacity should overwrite or not. - +[[class_description_of_BasePredictor]] +=== Class Description of BasePredictor -=== C++ Class Description +** constructor - `BasePredictor(uint32_t pht_size, uint8_t ctr_bits, +uint32_t btb_size, uint32_t ras_size)` -** Inherits `PHTEntry` and `BTBEntry` class +** Instantiate PatternHistoryTable class with appropriate params in constructor. -** Initializes PHT as a hashmap of PC and `PHTEntry` +** Instantiate BranchTargetBuffer class with appropriate params in constructor. -** Initializes BTB as a hashmap of PC and `BTBEntry` +** Instantiate ReturnAddressStack class with appropriate params in constructor. -** Initializes RAS as an empty stack of `uint64_t` [[Pattern_History_Table]] === 1. Pattern History Table -An array of n bit counters to predict direction of branches. It is indexed by a +An hashmap of n bit counters to predict direction of branches. It is indexed by a GShare hash (XOR) of PC and some specific number of last few branch history bits. [[operation]] @@ -310,18 +327,18 @@ Whenever a PC is received by the BPU, the PC and the last several bits of global registers are hashed to index into the PHT. The counter at this particular index provides the prediction that whether the branch will be taken or not. -[[Parameterization_of_PHT]] -==== Parameterization +[[class_description_of_PHT]] +==== Class description of PatternHistoryTable -1. `pht_size` - Maximum number of entries stored in Pattern History Table. -2. `ghr_bits_for_hash` - Number of history bits from GHR utilized for hashing with - PC, to finally index into PHT. -3. `ctr_bits` - Number of bits used by counter used to make prediction. +** constructor - `PatternHistoryTable(uint32_t pht_size, uint8_t ctr_bits)` -[[Class_Description_of_PHTEntry]] -==== Class Description for PHTEntry +** instantiate `std::map pattern_history_table_` -** `uint64_t predCtr` +[[Functions_list_of_PHT]] +==== Functions list +** `void incrementCounter(uint32_t idx)` - To increment counter within the set bound of ctr_bits. +** `void decrementCounter(uint32_t idx)` - To decrement counter. +** `uint8_t getPrediction(uint32_t idx)` - To get prediction. [[Branch_Target_Buffer]] === 2. Branch Target Buffer @@ -334,10 +351,12 @@ Tagged entry table in which a PC is used to find a matching target. Whenever a PC is received by the BPU, it is used to index into the BTB, which contains the target address of the next instruction. -[[Class_Description_of_BTBEntry]] -==== Class Description of BTBEntry +[[class_description_of_BTB]] +==== Class description of BranchTargetBuffer -** `uint64_t targetPC` +** constructor - `BranchTargetBuffer(uint32_t btb_size)` + +** Initializes `std::map branch_target_buffer_` [[BTB_Functions_List]] @@ -351,6 +370,11 @@ particular PC. 3. `uint64_t getPredictedPC(uint64_t PC)` - returns the target PC corresponding to the PC +4. `bool isHit(uint64_t PC)` - returns whether there is an entry for the PC in BTB or not. + + + + [[Return_Address_Stack]] === 3. Return Address Stack @@ -362,27 +386,21 @@ RAS is a small separate predictor used to predict returns. ** Push the PC on the stack whenever a "call" is made ** Return the PC whenever "ret" is called and pop the entry from RAS +[[Class_description_of_RAS]] +==== Class Description of ReturnAddressStack -[[Parameterization_of_RAS]] -==== Parameterization -1. `ras_stack_size` - Maximum number of entries which can be pushed to the RAS. - -2. `ras_enable_overwrite` - Boolean flag to set whether newer entries to RAS on - maximum capacity should overwrite or not. - +** constructor - `ReturnAddressStack(uint32_t ras_size)` -==== C++ Class Description of RASEntry - -* `uint64_t PC` +** Initializes `std::stack return_address_stack_` [[RAS_Functions_List]] -==== Functions List +==== Functions list -1. `pushEntry()` - Whenever a JAL (call) instruction is executed, the PC is +1. `void pushAddress()` - Whenever a JAL (call) instruction is executed, the PC is pushed to the RAS stack. If the RAS is already full, then depending on the value of `ras_enable_overwrite` parameter, overwrite the older entry. -2. `popEntry()` - Whenever a JALR (ret) instruction is being executed, the topmost +2. `uint64_t popAddress()` - Whenever a JALR (ret) instruction is being executed, the topmost element of the RAS is popped and returned to the Fetch unit. From 3d560fdc2610a781930df8cf10c82d8a11770246 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Mon, 2 Dec 2024 21:50:48 +0530 Subject: [PATCH 07/17] updated SC and TAGE section --- docs/bpu_design_document/BPUDesignDoc.adoc | 118 +++++++++--------- .../media/bpu_process_flowchart.png | Bin 112338 -> 120462 bytes docs/bpu_design_document/media/bpu_uarch.png | Bin 118878 -> 118881 bytes 3 files changed, 61 insertions(+), 57 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 68fbe0c4..d2b64556 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -225,14 +225,15 @@ the BTB. RAS on maximum capacity should overwrite or not. 8. `tage_bim_table_size` - Size of the bimodal table of TAGE -9. `tage_base_ctr_bits` - Number of bits used to make prediction by bimodal table of TAGE. +9. `tage_bim_ctr_bits` - Number of bits used to make prediction by bimodal table of TAGE. +10. `tage_tagged_table_num` - Number of tagged components in TAGE predictor -10. `num_of_logical_table` - Describes the number of logical tables in SC indexed with same number +11. `logical_table_num` - Describes the number of logical tables in SC indexed with same number of shortest history lengths -11. `loop_pred_table_size` - Defines the maximum number of possible entries in the +12. `loop_pred_table_size` - Defines the maximum number of possible entries in the loop predictor table -12. `loop_pred_table_way` - Defines the Way size of the loop predictor table +13. `loop_pred_table_way` - Defines the Way size of the loop predictor table [[Class_Description_of_BPU]] === Class Description of BPU @@ -274,9 +275,9 @@ Buffer (BTB), and a Return Address Stack (RAS). [[Operation]] === Operation -image:media/bpu_process_flowchart.png[image,width=700, height=366] +image:media/bpu_process_flowchart.png[image,width=800, height=366] -** If the instruction type is a "call", the current PC is pushed to the +* If the instruction type is a "call", the current PC is pushed to the RAS, and is also sent to the BTB. If it is a hit, then the target is sent out. Otherwise, an entry is made to the BTB. @@ -373,8 +374,6 @@ PC 4. `bool isHit(uint64_t PC)` - returns whether there is an entry for the PC in BTB or not. - - [[Return_Address_Stack]] === 3. Return Address Stack @@ -404,7 +403,7 @@ of `ras_enable_overwrite` parameter, overwrite the older entry. element of the RAS is popped and returned to the Fetch unit. -[[Description_of_TAGE-SC-L]] +[[Description_of_TAGE_SC_L]] == Description of TAGE_SC_L The second level predictor implements a TAGE-SC-L predictor in order to predict @@ -449,43 +448,46 @@ no matching tagged predictor component, the prediction given by default predicto 10. tage_hist_alpha - 11. tage_reset_useful_interval -[[Parameterization_of_TAGE_BIM]] -==== Parameterization of TAGE-BIM -1. `tage_bim_table_size` - Size of the bimodal table of TAGE -2. `tage_base_ctr_bits` - Number of bits used to make prediction by bimodal table of TAGE. +[[Bimodal_table_of_TAGE]] +==== Bimodal Table of TAGE -[[Parameterization_of_Tagged_Component]] -==== Parameterization of Tagged Component -1. `uint16_t Tag` - -2. `tage_ctr_bits` - -3. `tage_useful_bits` - Number of bits which represents useful value +Bimodal table of the TAGE predictor provides the base prediction for any prediction request. +[[class_description_of_TAGE_BIM]] +===== Class description of TAGE_BIM -[[Class_Description_of_TAGE]] -==== Class Description of TAGE +** constructor - `TageBIM(uint32_t tage_bim_table_size, uint8_t tage_base_ctr_bits)` + +** Initializes the `std::map Tage_Bimodal_` + +[[Tagged_Component_of_TAGE]] +==== Tagged Component of TAGE + +Tagged components of TAGE predictor provides prediction for different history lengths. + +[[class_description_of_TAGE_Tagged_Component]] +===== Class description of Tagged Component of TAGE -** Inherits two separate classes to represent bimodal table and tagged component table each. -** Initializes an array of tagged components indexed by the hash of PC and history lengths +1. `uint16_t Tag` +2. `uint8_t tage_ctr_bits` - represents the direction branch will take +3. `uint8_t tage_useful_bits` - Number of bits which represents useful value -==== 1.a. Bimodal Table -A table indexed by PC containing 2 bit counters to predict direct of branch -==== Class Description of TAGE_BIMEntry +[[Class_Description_of_TAGE]] +==== Class Description of TAGE -`uint8_t predCountr;` +** Includes `TageBIM` and `TageTaggedComponent` class. -==== 1.b. Tagged Component -A table indexed by the hash of PC and geometrically increasing history length +** Initializes an array of `TageTaggedComponent` indexed by the hash of PC and different history +lengths -==== 1.b.1 Tagged Component Entry -`pred` - represents the direction branch will take +** constructor - `Tage(uint16_t tage_bim_size, uint8_t tage_bim_ctr_bits, +uint16_t tage_tagged_table_num, uint8_t tagged_ctr_bits, uint8_t tage_u_bits, uint8_t tage_hist_alpha)` -`u` - represents if the prediction made by same component turnmed out to be correct or not last time. -`tag` -=== 2. SC +=== 2. Statistical Corrector **Input** - Prediction + (Address, History) pair @@ -497,15 +499,15 @@ TAGE predictor, therefore a relatively small Statistical Corrector predictor performs close to an unlimited size Statistical Corrector predictor [2]. -[[Parameterization_of_Statistical_Corrector]] -==== Parameterization - -1. `num_of_logical_table` - Describes the number of logical tables indexed with same number -of shortest history lengths - [[Class_Description_of_SC]] ==== Class Description of Statistical Corrector +** constructor - `TageStatisticalCorrector(uint16_t logical_table_num)` + +[[Functions_list_of_SC]] +==== Functions list + +** `bool revertPred(uint16_t centeredPredSum, uint16_t centeredU)` - [2] [[Description_of_Loop_Predictor]] === 3. Loop Predictor @@ -517,18 +519,19 @@ identification has reached a high confidence, i.e. when the loop has been executed several times with the same number of iterations. It uses a Loop Predictor table which is essentially a k-way set associative table -whose entries is used to predict loops. +whose entries are used to predict loops. -[[Parameterization_of_loop_predictor_table]] -==== Parameterization of Loop Predictor Table +[[Class_description_of_LoopPredictor]] +==== Class description of LoopPredictor -1. `loop_pred_table_size` - Defines the maximum number of possible entries in the -loop predictor table - -2. `loop_pred_table_way` - Defines the Way size of the loop predictor table +** constructor - `LoopPredictor(uint32_t loop_pred_table_size, uint16_t loop_pred_table_way)` [[Class_Description_of_loop_predictor_entry]] ==== Class Description of LoopPredictorEntry + +** Constructor - `LoopPredictorEntry(uint16_t past_iter, uint16_t current_iter, uint16_t tag, +uint8_t confidence, uint8_t age, bool direction)` + 1. `uint16_t past_iter` - Stores the 14-bit count for the number of iterations seen in past 2. `uint16_t current_iter` - stores the 14-bit count for the number of iterations seen currently @@ -541,6 +544,7 @@ loop predictor table 6. `bool direction` - Stores the direction bit + [[Functions_list_of_loop_predictor]] ==== Functions List of LoopPredictor @@ -557,29 +561,29 @@ the BPU, once instructions are finally committed. Similar to ROB, but it is decoupled from it. Implemented using a Queue. Entries are allocated to FTQ when predictions are sent to Fetch. -Upon retirement of instructions, the `correctedPC` and `actuallyTaken` values are written, +Upon retirement of instructions, the `correctedPC` and `correctedDirection` values are written, and then sent to BPU to update its internal state. -[[Class_Description_of_FTQ]] -=== Class Description of FTQ - -** Initialises a Queue of `FTQEntry` - [[Class_Description_of_FTQEntry]] -==== Class Description of FTQEntry +=== Class Description of FTQEntry ** `uint64_t targetPC` ** `uint64_t correctedPC` -** `bool pred` +** `bool predDirection` + +** `bool correctedDirection` + +[[Class_Description_of_FTQ]] +=== Class Description of FTQ -** `bool actuallyTaken` +** Initialises `std::vector fetch_target_queue_` [[Functions_list_of_FTQ]] ==== Functions list -** `addEntry()` - -** `removeEntry()` - +** `addEntry(FTQEntry ftq_entry)` - adds an entry into the FTQ. +** `removeEntry(FTQEntry ftq_entry)` - removes ftq_entry from the FTQ. diff --git a/docs/bpu_design_document/media/bpu_process_flowchart.png b/docs/bpu_design_document/media/bpu_process_flowchart.png index 47e23ef09455148397304647372ba6a35091bfff..deb9ff47aa3c69c3c774ff76db3124d8ac0563a3 100644 GIT binary patch literal 120462 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 z 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 D7L)(g literal 112338 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 diff --git a/docs/bpu_design_document/media/bpu_uarch.png b/docs/bpu_design_document/media/bpu_uarch.png index 0111777a02910b5e1d6217af0c9d80b003d1de82..20bc524e12b7a4ff2b604f3320632857aec24b62 100644 GIT binary patch delta 20326 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 JvD}?U{|EN|Pgno| delta 20225 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 XFzrF48v`j0_)l40{aT6atq1=L5*37` From 6c04a98f1abbbb802b50f8dd7ba9cc639a2b2842 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Tue, 3 Dec 2024 23:21:41 +0530 Subject: [PATCH 08/17] Added paramters of TAGE --- docs/bpu_design_document/BPUDesignDoc.adoc | 42 +++++++++++++--------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index d2b64556..203480aa 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -421,7 +421,7 @@ Each entry in a tagged component consists of 3 fields - ** pred - represents the direction branch will take ** u - represents if the prediction made by same component turned out to be correct last time or not. - ** tag + ** tag - used for verifying that the entry corresponds to the current branch instruction. image:media/TAGE.png[image,width=700,height=300] @@ -434,19 +434,24 @@ Whereas the tagged components provide a prediction only on a tag match. The over provided by the hitting tagged predictor component that uses the longest history length. In case of no matching tagged predictor component, the prediction given by default predictor is used. [1] -[[Parameterization_of_TAGE]] -==== Parameterization of TAGE -1. uint16_t Index -2. uint64_t Path -3. uint64_t History -4. tage_max_idx_bits - -5. tage_num_components - -6. tage_global_hist_buff_len - -7. tage_folded_hist_buff_len - -8. tage_path_hist_buff_len - -9. tage_min_hist_len -10. tage_hist_alpha - -11. tage_reset_useful_interval +[[Parameters_of_TAGE]] +==== Parameters of TAGE +// start from here +1. `uint32_t tage_bim_table_size` - Size of bimodal table used in TAGE. +2. `uint16_t tage_max_index_bits` - Maximum number of bits used to index the predictor tables of TAGE. +3. `uint16_t tage_num_components` - Number of tagged components used in TAGE. +4. `uint8_t tage_bim_counter_bits` - Number of counter bits used in bimodal table of TAGE to make prediction. +5. `uint8_t tage_counter_bits` - Number of counter bits used in tagged components of TAGE to make prediction. +6. `uint8_t tage_useful_bits` - Number of bits used in the 'useful' component of tagged entry. + +7. `uint32_t tage_global_hist_buff_len` - Length of the global history buffer used by TAGE. +8. `uint32_t tage_folded_hist_buff_len` - Length of the history buffer used for folded history entries. + +9. `uint32_t tage_path_hist_buff_len` - Length of the path history buffer + +10. `uint32_t tage_min_hist_len` - Minimum length of history used in TAGE. +11. `uint8_t tage_hist_alpha` - Common ratio of geometric progression with which history length increases. +12. `uint32_t tage_reset_useful_interval` - Interval after which useful bits are reset. [[Bimodal_table_of_TAGE]] ==== Bimodal Table of TAGE @@ -469,7 +474,7 @@ Tagged components of TAGE predictor provides prediction for different history le ===== Class description of Tagged Component of TAGE -1. `uint16_t Tag` +1. `uint16_t Tag` - used for verifying that the entry corresponds to the current branch instruction. 2. `uint8_t tage_ctr_bits` - represents the direction branch will take 3. `uint8_t tage_useful_bits` - Number of bits which represents useful value @@ -483,7 +488,12 @@ Tagged components of TAGE predictor provides prediction for different history le lengths ** constructor - `Tage(uint16_t tage_bim_size, uint8_t tage_bim_ctr_bits, -uint16_t tage_tagged_table_num, uint8_t tagged_ctr_bits, uint8_t tage_u_bits, uint8_t tage_hist_alpha)` +uint16_t tage_tagged_table_num, uint8_t tagged_ctr_bits, uint8_t tage_u_bits, uint32_t min_hist_len, uint8_t tage_hist_alpha, uint32_t tage_max_idx_bits, uint32_t global_hist_buff_len, uint32_t global_hist_folded_buff_len, uint32_t useful_reset_interval)` + +[[Functions_list_of_TAGE]] +==== Functions list + +** `uint8_t predict(uint64_t ip)` - return the prediction from TAGE From e37435b706f4b1bc9a408af2353438cd3a27a2b2 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Tue, 10 Dec 2024 10:17:55 +0530 Subject: [PATCH 09/17] Added sections for data members, functions for each class --- docs/bpu_design_document/BPUDesignDoc.adoc | 499 +++++++++++++++------ 1 file changed, 369 insertions(+), 130 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 203480aa..656d48c6 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -49,8 +49,7 @@ which are used to update the BPU once instructions are finally committed. Branch Prediction Unit is the unit responsible for predicting the branch outcomes and branch targets before branch instructions are actually -resolved in the pipeline in order to reduce latency between a branch and a -subsequent instruction. +resolved in the pipeline. This prediction allows the processor to prefetch and execute subsequent instructions without waiting to resolve the branch condition, minimizing stalls and maintaining high throughput in the pipeline. It receives prediction input in the form of PC and instruction type from the Fetch unit and predicts the direction and target address from which Fetch unit @@ -67,8 +66,8 @@ Figure 1 - Overview of BPU in reference to Fetch unit [[Functional_Description]] == Functional Description -Branch Prediction Unit in Olympia is a two-tiered branch predictor where the -first tier provides a simple but fast prediction. The second tier consists +The proposed branch prediction unit is a two-tiered branch predictor where the +first tier provides a simple but fast prediction, whereas the second tier consists of a more accurate predictor which can predict even complex branches but takes an additional cycle. @@ -87,7 +86,7 @@ additional cycle. ** `out_bpu_prediction_credits` - in Fetch.cpp. To send credits to BPU to indicate availability of slots. -** `out_bpu_prediction_req` - in Fetch.cpp. To send PredictionInput to BPU. +** `out_bpu_prediction_req` - in Fetch.cpp. To send PredictionRequest to BPU. [[Output_Ports_BPU]] @@ -106,6 +105,13 @@ additional cycle. ** `pred_req_num` - Total number of prediction requests made to BPU ** `num_mispred` - Total number of mis-predictions ** `mispred_perc` - Percentage of mis-predictions +** `pht_req_num` - +** `pht_mispred` - +** `btb_req_num` - +** `ras_utilization` - +** `` - +** `` - +** `` - [[Unit_Block_Diagram]] === Unit Block Diagram @@ -124,20 +130,19 @@ queue) which stores the information of all in-flight branch instructions and is required in order to update the BPU once instruction are finally committed. -[[Description_of_PredictionInput]] -== Description of PredictionInput +[[Description_of_PredictionRequest]] +== Description of PredictionRequest -Olympia's Branch Predictor API intends the implementation of Branch Predictor to -define custom PredictionInput +Olympia's Branch Prediction API expects the implementation of Branch Predictor to specify its implementation of a prediction input. -[[Overview_of_PredictionInput]] +[[Overview_of_PredictionRequest]] === Overview -PredictionInput is received by the BPU from the Fetch unit whenever a request for +PredictionRequest is received by the BPU from the Fetch unit whenever a request for the prediction is made. Based on the data provided by this input, BPU makes the prediction. -[[Structure_of_PredictionInput]] -=== Structure of PredictionInput +[[Structure_of_PredictionRequest]] +=== Structure of PredictionRequest ** Program counter ** instruction type (branch, jump, or ret) @@ -145,14 +150,19 @@ prediction. [[Class_Description]] === Class Description -** `uint64_t PC` -** `uint8_t instType` +==== Constructor - +`PredictionRequest(uin64_t PC, uint8_t instType) : PC_(PC), instType_(instType) {}` + +=== Data members + +==== Private members +** `uint64_t PC_` +** `uint8_t instType_` [[Description_of_PredictionOutput]] == Description of PredictionOutput -Olympia's Branch Predictor API intends the implementation of Branch Predictor to -define custom PredictionOutput +Olympia's Branch Prediction API expects the implementation of Branch Predictor to specify its implementation of a prediction output. [[Overview_of_PredictionOutput]] === Overview @@ -170,14 +180,20 @@ to the Fetch unit. [[Class_Description_of_PredictionOutput]] === Class Description of PredictionOutput -** `bool predDirection` -** `uint64_t predPC` +==== Constructor - +`PredictionOutput(bool predDirection, uint64_t predPC) : predDirection_(predDirection), predPC_(predPC) {}` + +=== Data members + +==== Private members + +** `bool predDirection_` +** `uint64_t predPC_` [[Description_of_UpdateInput]] == Description of UpdateInput -Olympia's Branch Predictor API intends the implementation of Branch Predictor to -define custom UpdateInput +Olympia's Branch Prediction API expects the implementation of Branch Predictor to specify its implementation of an update input. [[Overview_of_UpdateInput]] === Overview @@ -198,15 +214,25 @@ update BPU's internal state in case of mis-prediction. [[Class_Description_of_UpdateInput]] === Class Description of UpdateInput -** `uint64_t instrPC` +==== Constructor - +`UpdateInput(uin64_t instrPC, bool correctedDirection, uint64_t correctedTargetPC) : instrPC_(instrPC), +correctedDirection_(correctedDirection), correctedTargetPC_(correctedTargetPC) {}` + +=== Data members + +==== Private members -** `bool correctedDirection` +** `uint64_t instrPC_` -** `uint64_t correctedTargetPC` +** `bool correctedDirection_` +** `uint64_t correctedTargetPC_` -[[Description_of_BPU]] -== Description of BPU + +[[BPU]] +== BPU + +=== Overview This section describes the overview and description for the top level class which bolts the Branch Prediction Unit into the Olympia simulator. @@ -235,39 +261,64 @@ of shortest history lengths loop predictor table 13. `loop_pred_table_way` - Defines the Way size of the loop predictor table +[[Class_heirarchy_of_BPU]] +=== Class heirarchy + +* BPU inherits `sparta::Unit` +* BPU inherits from BranchPredictorIF<> + [[Class_Description_of_BPU]] -=== Class Description of BPU -* Inherits `sparta::Unit` -* Inherits Olympia's Branch Prediction API -* Includes `PredictionInput`, `PredictionOutput`, `UpdateInput` class. +=== Class Description + +* Includes `PredictionRequest`, `PredictionOutput`, `UpdateInput` class. * Includes `BasePredictor` and `TAGE_SC_L` class. -* Contains private member `ghr_` to represent GHR. + +[[Data_members_of_BPU]] +=== Data members + +==== Private members +* `ghr_` - Represents the GHR. + +==== Public members + +* Olympia's Branch Predictpor API expects that an implementation of branch predictor must also specify the implementations of `getPrediction(const PredictionRequest &)` and `updatePredictor(const UpdateInput &)` operations === Function list -*** `void recievePredictionRequest()` - ** called whenever PredictionInput is received on input port on BPU. - ** store requests in temporary input buffer to be utilised by - BasePredictor and TAGE-SC-L. - -*** `void recievePredictionUpdate()` - ** receives UpdateInput from input port in BPU once instructions are committed. - ** store deallocated FTQ entries in internal buffer in order to be - used by BasePredictor and TAGE-SC-L to update itself. - -*** `PreditionOutput sendPrediction()` - ** sends prediction to Fetch unit. - ** makes entry in FTQ. + +==== Public functions +1. `PredictionOutput getPrediction(const PredictionRequest &)` + ** Returns the PredictionOutput based on the PredictionRequest received. + +2. `void updatePredictor(const UpdateInput &)` + ** Updates the internal state of the BasePredictor as well as the TAGE-SC-L predictor. + +==== Private functions +1. `void recievePredictionRequest()` + ** Called whenever PredictionRequest is received on input port of BPU. + ** Store requests in temporary input buffer to be utilised by BasePredictor and TAGE-SC-L. + +2. `void recievePredictionUpdate()` + ** Receives UpdateInput from input port in BPU once instructions are committed. + ** Store deallocated FTQ entries in internal buffer in order to be used by BasePredictor and TAGE-SC-L to update itself. + +3. `PredictionOutput sendPrediction()` + ** Sends prediction to Fetch unit. + ** Makes entry in FTQ. ** Later on, handle any potential prediction override between TAGE and BasePredictor. -*** `updateGHRTaken()` - shifts all history bits by 1 position to left, and set last bit as 1. +4. `updateGHRTaken()` + ** shifts all history bits by 1 position to left, and set last bit as 1. -*** `updateGHRNotTaken()` - shifts all history bits by 1 position to left, and set last bit as 0. +5. `updateGHRNotTaken()` + ** Shifts all history bits by 1 position to left, and set last bit as 0. -[[Description_of_Base_Predictor]] -== Description of BasePredictor +[[Description_of_BasePredictor]] +== BasePredictor +[[Overview_of_the_BasePredictor]] +=== Overview The BasePredictor consists of a Pattern History Table (PHT) indexed by a GShare hash of PC and some specific number of global branch history bits, a Branch Target Buffer (BTB), and a Return Address Stack (RAS). @@ -303,65 +354,110 @@ branch is actually (predicted to be) taken is a different question. ** Direction of branch is predicted by PHT and TAGE-SC-L [[class_description_of_BasePredictor]] -=== Class Description of BasePredictor +=== Class Description -** constructor - `BasePredictor(uint32_t pht_size, uint8_t ctr_bits, -uint32_t btb_size, uint32_t ras_size)` +==== Constructor: +`BasePredictor(uint32_t pht_size, uint8_t ctr_bits, +uint32_t btb_size, uint32_t ras_size) : pattern_history_table(pht_size, ctr_bits), branch_target_buffer(btb_size), return_address_stack(ras_size) {}` +==== Operation ** Instantiate PatternHistoryTable class with appropriate params in constructor. ** Instantiate BranchTargetBuffer class with appropriate params in constructor. ** Instantiate ReturnAddressStack class with appropriate params in constructor. +=== Data members + +==== Public data members + +==== Private data members + +1. `PatternHistoryTable pattern_history_table_`- +2. `BranchTargetBuffer branch_target_buffer_` +3. `ReturnAddressStack return_address_stack_` + +=== Functions list + +==== Public functions + + +==== Private functions [[Pattern_History_Table]] -=== 1. Pattern History Table +== Pattern History Table -An hashmap of n bit counters to predict direction of branches. It is indexed by a +A hashmap of n bit counters to predict direction of branches. It is indexed by a GShare hash (XOR) of PC and some specific number of last few branch history bits. [[operation]] -==== Operation +=== Operation Whenever a PC is received by the BPU, the PC and the last several bits of global history registers are hashed to index into the PHT. The counter at this particular index provides the prediction that whether the branch will be taken or not. [[class_description_of_PHT]] -==== Class description of PatternHistoryTable +=== Class description of PatternHistoryTable + +==== Constructor +`PatternHistoryTable(uint32_t pht_size, uint8_t ctr_bits) : pht_size_(pht_size), ctr_bits_(ctr_bits) {}` + +[[Data_members_of_PHT]] +=== Data members -** constructor - `PatternHistoryTable(uint32_t pht_size, uint8_t ctr_bits)` +==== Public data members +None -** instantiate `std::map pattern_history_table_` +==== Private data members + +1. `const uint32_t pht_size_` +2. `const uint8_t ctr_bits_` +3. `const uint8_t ctr_bits_val_` +4. `std::map pattern_history_table_` [[Functions_list_of_PHT]] -==== Functions list -** `void incrementCounter(uint32_t idx)` - To increment counter within the set bound of ctr_bits. -** `void decrementCounter(uint32_t idx)` - To decrement counter. -** `uint8_t getPrediction(uint32_t idx)` - To get prediction. +=== Functions list + +==== Public functions +1. `void incrementCounter(uint32_t idx)` - To increment counter within the set bound of ctr_bits. +2. `void decrementCounter(uint32_t idx)` - To decrement counter. +3. `uint8_t getPrediction(uint32_t idx)` - To get prediction. + +==== Private functions +None [[Branch_Target_Buffer]] -=== 2. Branch Target Buffer +== Branch Target Buffer Tagged entry table in which a PC is used to find a matching target. [[operation_of_BTB]] -==== Operation +=== Operation Whenever a PC is received by the BPU, it is used to index into the BTB, which contains the target address of the next instruction. [[class_description_of_BTB]] -==== Class description of BranchTargetBuffer +=== Class description of BranchTargetBuffer + +==== Constructor +`BranchTargetBuffer(uint32_t btb_size) : btb_size_(btb_size) {}` -** constructor - `BranchTargetBuffer(uint32_t btb_size)` +[[Data_members_of_BTB]] +=== Data members -** Initializes `std::map branch_target_buffer_` +==== Public data members +None +==== Private data members +1. `const uint32_t btb_size_` +2. `std::map branch_target_buffer_` [[BTB_Functions_List]] -==== Functions List +=== Functions List + +==== Public functions 1. `bool addEntry(uint64_t PC, uint64_t targetPC)` - allocates a BTB entry into the BTB table @@ -373,28 +469,40 @@ PC 4. `bool isHit(uint64_t PC)` - returns whether there is an entry for the PC in BTB or not. +==== Private functions +None [[Return_Address_Stack]] -=== 3. Return Address Stack +== Return Address Stack RAS is a small separate predictor used to predict returns. [[Operation_of_RAS]] -==== Operation +=== Operation ** Push the PC on the stack whenever a "call" is made ** Return the PC whenever "ret" is called and pop the entry from RAS [[Class_description_of_RAS]] -==== Class Description of ReturnAddressStack +=== Class Description + +==== Constructor +`ReturnAddressStack(uint32_t ras_size) : ras_size_(ras_size) {}` + +[[Data_members_of_RAS]] +=== Data members -** constructor - `ReturnAddressStack(uint32_t ras_size)` +==== Public data members +None -** Initializes `std::stack return_address_stack_` +==== Private data members +1. `const uint32_t ras_size_` +2. `std::stack return_address_stack_` [[RAS_Functions_List]] -==== Functions list +=== Functions list +==== Public functions 1. `void pushAddress()` - Whenever a JAL (call) instruction is executed, the PC is pushed to the RAS stack. If the RAS is already full, then depending on the value of `ras_enable_overwrite` parameter, overwrite the older entry. @@ -402,31 +510,59 @@ of `ras_enable_overwrite` parameter, overwrite the older entry. 2. `uint64_t popAddress()` - Whenever a JALR (ret) instruction is being executed, the topmost element of the RAS is popped and returned to the Fetch unit. +==== Private functions +None [[Description_of_TAGE_SC_L]] -== Description of TAGE_SC_L +== TAGE_SC_L +=== Overview The second level predictor implements a TAGE-SC-L predictor in order to predict complex branches with better accuracy than is possible with a simple combination of PHT and RAS. +=== Class heirarchy + +** Instantiate `TAGE`, `StatisticalCorrector`, and `LoopPredictor` class + +=== Class description +==== Constructor +`TAGE_SC_L()` + +=== Data members + +==== Public members + +==== Private members + +=== Functions list + +==== Public functions + +1. `uint8_t getPrediction()` - + +==== Private functions + [[Description_of_TAGE]] -=== 1. TAGE +== TAGE +=== Overview TAGE consists of a Bimodal table (a simple PC indexed n-bit counter table), backed by a number of tagged predictor components which uses geometrically increasing history lengths. Each entry in a tagged component consists of 3 fields - - ** pred - represents the direction branch will take - ** u - represents if the prediction made by same component turned out to be correct + ** `pred` - represents the direction branch will take + ** `useful` - represents if the prediction made by same component turned out to be correct last time or not. - ** tag - used for verifying that the entry corresponds to the current branch instruction. + ** `tag` - used for verifying that the entry corresponds to the current branch instruction. image:media/TAGE.png[image,width=700,height=300] +Source: Andre Seznec, Pierre Michaud, A case for (partially) TAgged GEometric history length branch prediction + [[Operation_of_TAGE]] -==== Operation of TAGE +=== Operation of TAGE When prediction is requested, the Bi-Modal table (T0) and tagged components (Ti; 1 < i < M) are accessed simultaneously. The Bi-modal table (base predictor) provides the default prediction. @@ -435,69 +571,124 @@ provided by the hitting tagged predictor component that uses the longest history no matching tagged predictor component, the prediction given by default predictor is used. [1] [[Parameters_of_TAGE]] -==== Parameters of TAGE +=== Parameters of TAGE // start from here -1. `uint32_t tage_bim_table_size` - Size of bimodal table used in TAGE. -2. `uint16_t tage_max_index_bits` - Maximum number of bits used to index the predictor tables of TAGE. -3. `uint16_t tage_num_components` - Number of tagged components used in TAGE. -4. `uint8_t tage_bim_counter_bits` - Number of counter bits used in bimodal table of TAGE to make prediction. -5. `uint8_t tage_counter_bits` - Number of counter bits used in tagged components of TAGE to make prediction. -6. `uint8_t tage_useful_bits` - Number of bits used in the 'useful' component of tagged entry. -7. `uint32_t tage_global_hist_buff_len` - Length of the global history buffer used by TAGE. -8. `uint32_t tage_folded_hist_buff_len` - Length of the history buffer used for folded history entries. +=== Class heirarchy + +** Includes `TageBIM` and `TageTaggedComponent` class. + + +[[Class_Description_of_TAGE]] +=== Class Description of TAGE + +==== Constructor +`Tage(uint16_t tage_bim_size, uint8_t tage_bim_ctr_bits, +uint16_t tage_tagged_table_num, uint8_t tagged_ctr_bits, uint8_t tage_u_bits, uint32_t min_hist_len, +uint8_t tage_hist_alpha, uint32_t tage_max_idx_bits, uint32_t global_hist_buff_len, uint32_t global_hist_folded_buff_len, +uint32_t useful_reset_interval)` + +** Initializes an array of `TageTaggedComponent` indexed by the hash of PC and different history +lengths + +=== Data members + +==== Public data members + +==== Private data members +1. `uint32_t tage_bim_table_size_` - Size of bimodal table used in TAGE. +2. `uint16_t tage_max_index_bits_` - Maximum number of bits used to index the predictor tables of TAGE. +3. `uint16_t tage_num_components_` - Number of tagged components used in TAGE. +4. `uint8_t tage_bim_counter_bits_` - Number of counter bits used in bimodal table of TAGE to make prediction. +5. `uint8_t tage_counter_bits_` - Number of counter bits used in tagged components of TAGE to make prediction. +6. `uint8_t tage_useful_bits_` - Number of bits used in the 'useful' component of tagged entry. -9. `uint32_t tage_path_hist_buff_len` - Length of the path history buffer +7. `uint32_t tage_global_hist_buff_len_` - Length of the global history buffer used by TAGE. +8. `uint32_t tage_folded_hist_buff_len_` - Length of the history buffer used for folded history entries. + +9. `uint32_t tage_path_hist_buff_len_` - Length of the path history buffer + +10. `uint32_t tage_min_hist_len_` - Minimum length of history used in TAGE. +11. `uint8_t tage_hist_alpha_` - Common ratio of geometric progression with which history length increases. +12. `uint32_t tage_reset_useful_interval_` - Interval after which useful bits are reset. + + +[[Functions_list_of_TAGE]] +=== Functions list + +==== Public functions +** `uint8_t predict(uint64_t ip)` - Returns the prediction from TAGE + +==== Private functions -10. `uint32_t tage_min_hist_len` - Minimum length of history used in TAGE. -11. `uint8_t tage_hist_alpha` - Common ratio of geometric progression with which history length increases. -12. `uint32_t tage_reset_useful_interval` - Interval after which useful bits are reset. [[Bimodal_table_of_TAGE]] -==== Bimodal Table of TAGE +== Bimodal Table of TAGE Bimodal table of the TAGE predictor provides the base prediction for any prediction request. [[class_description_of_TAGE_BIM]] -===== Class description of TAGE_BIM +=== Class description + +`class TageBIM` + +==== Constructor +`TageBIM(uint32_t tage_bim_table_size, uint8_t tage_base_ctr_bits) : tage_bim_table_size_(tage_bim_table_size), +tage_base_ctr_bits_(tage_base_ctr_bits) {}` + +=== Data members + +==== Private data members +1. `uint32_t tage_bim_table_size_` +2. `uint8_t tage_base_ctr_bits_` +3. `std::map Tage_Bimodal_` + +==== Public data members + +=== Functions list -** constructor - `TageBIM(uint32_t tage_bim_table_size, uint8_t tage_base_ctr_bits)` +==== Public functions +1. `void incrementCtr()` +2. `void decrementCtr()` +3. `uint8_t getPrediction(uint32_t ip)` - Returns the prediction counter of index ip -** Initializes the `std::map Tage_Bimodal_` +==== Private functions [[Tagged_Component_of_TAGE]] -==== Tagged Component of TAGE +== Tagged Component of TAGE Tagged components of TAGE predictor provides prediction for different history lengths. [[class_description_of_TAGE_Tagged_Component]] -===== Class description of Tagged Component of TAGE +=== Class description +`class TageTaggedComponent` +==== Constructor - -1. `uint16_t Tag` - used for verifying that the entry corresponds to the current branch instruction. -2. `uint8_t tage_ctr_bits` - represents the direction branch will take -3. `uint8_t tage_useful_bits` - Number of bits which represents useful value +`TageTaggedComponent(uint16_t Tag, uint8_t tage_ctr_bits, uint8_t tage_useful_bits) : Tag_(Tag), +tage_ctr_bits_(tage_ctr_bits), tage_useful_bits_(tage_useful_bits) {}` +=== Data members -[[Class_Description_of_TAGE]] -==== Class Description of TAGE +==== Private data members +1. `uint16_t Tag_` - used for verifying that the entry corresponds to the current branch instruction. +2. `uint8_t tage_ctr_bits_` - represents the direction branch will take +3. `uint8_t tage_useful_bits_` - Number of bits which represents useful value -** Includes `TageBIM` and `TageTaggedComponent` class. +==== Public data members -** Initializes an array of `TageTaggedComponent` indexed by the hash of PC and different history -lengths - -** constructor - `Tage(uint16_t tage_bim_size, uint8_t tage_bim_ctr_bits, -uint16_t tage_tagged_table_num, uint8_t tagged_ctr_bits, uint8_t tage_u_bits, uint32_t min_hist_len, uint8_t tage_hist_alpha, uint32_t tage_max_idx_bits, uint32_t global_hist_buff_len, uint32_t global_hist_folded_buff_len, uint32_t useful_reset_interval)` - -[[Functions_list_of_TAGE]] -==== Functions list +=== Functions list -** `uint8_t predict(uint64_t ip)` - return the prediction from TAGE +==== Public functions +1. `void incrementCtr()` - Increment the counter bit within the set bounds +2. `void decrementCtr()` - Decrement the counter bit within the set bounds +3. `void incrementUsefulBit()`- Increment the useful bit within the set bounds +4. `void decrementUsefulBit()` - Decremet the useful bit within the set bounds +==== Private functions -=== 2. Statistical Corrector +== Statistical Corrector **Input** - Prediction + (Address, History) pair @@ -510,17 +701,29 @@ predictor performs close to an unlimited size Statistical Corrector predictor [2]. [[Class_Description_of_SC]] -==== Class Description of Statistical Corrector +=== Class Description -** constructor - `TageStatisticalCorrector(uint16_t logical_table_num)` +==== Constructor +`TageStatisticalCorrector(uint16_t logical_table_num) : logical_table_num_(logical_table_num) {}` + +=== Data members + +==== Public members + +==== Private members +1. `uint16_t logical_table_num_` - [[Functions_list_of_SC]] -==== Functions list +=== Functions list +==== Public functions ** `bool revertPred(uint16_t centeredPredSum, uint16_t centeredU)` - [2] +==== Private functions + + [[Description_of_Loop_Predictor]] -=== 3. Loop Predictor +== Loop Predictor A loop predictor can simply identify regular loops with constant number of iterations. The loop predictor will provide the global prediction when it @@ -532,12 +735,12 @@ It uses a Loop Predictor table which is essentially a k-way set associative tabl whose entries are used to predict loops. [[Class_description_of_LoopPredictor]] -==== Class description of LoopPredictor +=== Class description of LoopPredictor ** constructor - `LoopPredictor(uint32_t loop_pred_table_size, uint16_t loop_pred_table_way)` [[Class_Description_of_loop_predictor_entry]] -==== Class Description of LoopPredictorEntry +=== Class Description of LoopPredictorEntry ** Constructor - `LoopPredictorEntry(uint16_t past_iter, uint16_t current_iter, uint16_t tag, uint8_t confidence, uint8_t age, bool direction)` @@ -556,11 +759,14 @@ uint8_t confidence, uint8_t age, bool direction)` [[Functions_list_of_loop_predictor]] -==== Functions List of LoopPredictor +=== Functions list of LoopPredictor + +==== Public functions +1. `addEntry()` - -1. `addEntry()` +2. `removeEntry()` - -2. `removeEntry()` +==== Private functions [[Fetch_Target_Queue]] == Fetch Target Queue @@ -577,25 +783,58 @@ and then sent to BPU to update its internal state. [[Class_Description_of_FTQEntry]] === Class Description of FTQEntry -** `uint64_t targetPC` +==== Constructor - +`FTQEntry(uint64_t targetPC, uint64_t correctedPC, bool predDirection, bool correctedDirection) : +targetPC_(targetPC), correctedPC_(correctedPC), predDirection_(predDirection), correctedDirection_(correctedDirection) {}` -** `uint64_t correctedPC` +=== Data members -** `bool predDirection` +==== Public members -** `bool correctedDirection` +==== Private members +** `uint64_t targetPC_` + +** `uint64_t correctedPC_` + +** `bool predDirection_` + +** `bool correctedDirection_` + +=== Functions list + +==== Public functions + +1. `uint64_t getTargetPC()` +2. `uint64_t getCorrectedPC()` +3. `bool getPredDirection()` +4. `bool getCorrectedDirection()` +5. `void setCorrectedPC()` - sets the `correctedPC_` variable +6. `void setCorrectedDirection()` - sets the `correctedDirection_` varibale + + +==== Private functions [[Class_Description_of_FTQ]] === Class Description of FTQ -** Initialises `std::vector fetch_target_queue_` +==== Constructor +`FTQ()` + +=== Data members + +==== Public members + +==== Private members +1. `std::vector fetch_target_queue_` - [[Functions_list_of_FTQ]] -==== Functions list +=== Functions list + +==== Public functions ** `addEntry(FTQEntry ftq_entry)` - adds an entry into the FTQ. ** `removeEntry(FTQEntry ftq_entry)` - removes ftq_entry from the FTQ. - +==== Private functions [[Test_Bench_Description]] == Test Bench Descriptions From 2265cbce38804835b9ac81cea05a44473475e639 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Thu, 12 Dec 2024 18:58:50 +0530 Subject: [PATCH 10/17] Added ports, counters, data members, and functions list --- docs/bpu_design_document/BPUDesignDoc.adoc | 69 +++++++++++++++------- 1 file changed, 48 insertions(+), 21 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 656d48c6..3ddc778c 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -15,6 +15,7 @@ the Olympia simulator. [width="100%",cols="11%,11%,16%,62%",options="header",] |=== |*Revision* |*Date* |*Author* |*Summary of Changes* +|0.3 | 2024.12.12 | Shobhit Sinha | Added extra ports, counters, functions list and data members to design document |0.2 | 2024.11.18 | Shobhit Sinha | BPU design documentation |0.1 | 2024.11.12 | Jeff Nye | initial template |=== @@ -74,30 +75,33 @@ additional cycle. [[Input_Ports_BPU]] === Input Ports in BPU -** `in_fetch_prediction_credits` - To receive credits from Fetch unit to indicate availability - of slots -** `in_fetch_prediction_req` - To receive prediction requests from Fetch unit +** `in_fetch_predictionOutput_credits` - To receive credits from Fetch unit to indicate availability of slots to send PredictionOutput to Fetch + +** `in_fetch_predictionRequest` - To receive prediction requests from Fetch unit ** `TODO-`: input port to receive de-allocated FTQ entry once that instruction packet is committed. [[Corresponding_output_ports]] ==== Corresponding Output Ports -** `out_bpu_prediction_credits` - in Fetch.cpp. To send credits to BPU to indicate availability of - slots. +** `out_bpu_predictionOutput_credits` - in Fetch.cpp. To send credits to BPU to indicate availability of slots to receive PredictionOutput. -** `out_bpu_prediction_req` - in Fetch.cpp. To send PredictionRequest to BPU. +** `out_bpu_predictionRequest` - in Fetch.cpp. To send PredictionRequest to BPU. [[Output_Ports_BPU]] === Output Ports in BPU -** `out_fetch_prediction_res` - To send prediction result to Fetch unit +** `out_fetch_predictionRequest_credits` - To send credits to Fetch unit to indicate availabilty of slots in BPU to receive PredictionRequest. + +** `out_fetch_predictionOutput` - To send PredictionOutput to Fetch unit. [[Corresponding_input_ports]] ==== Corresponding Input Ports -** `in_bpu_prediction_res` - in Fetch.cpp. To receive prediction result from BPU. +** `in_bpu_predictionRequest_credits` - in Fetch.cpp. To receive credits from BPU to indicate availabilty in BPU to send PredictionRequest. + +** `in_bpu_predictionOutput` - in Fetch.cpp. To receive PredictionOutput from BPU. [[Counters]] === Counters @@ -105,13 +109,18 @@ additional cycle. ** `pred_req_num` - Total number of prediction requests made to BPU ** `num_mispred` - Total number of mis-predictions ** `mispred_perc` - Percentage of mis-predictions -** `pht_req_num` - -** `pht_mispred` - -** `btb_req_num` - -** `ras_utilization` - -** `` - -** `` - -** `` - +** `branch_req_num` - Total number of prediction requests made which are conditional branch instructions. +** `call_req_num` - Total number of prediction requests made which are call/jump type. +** `return_req_num` - Total number of prediction requests made which are return type. +** `pht_req_num` - Total number of requests made to PHT. +** `pht_hit_num` - Total number of times when requested index is hit on PHT. +** `pht_miss_rate` - Total number of times when requested index is miss on PHT. +** `pht_mispred_perc` - Percentage of times when PHT mispredicted. +** `btb_req_num` - Total number of requests made to BTB. +** `btb_hit_rate` - Total number of times when requested index is hit on BTB. +** `btb_miss_rate` - Total number of times when requested index is miss on BTB. +** `ras_high_mark` - Highest size of RAS during an execution cycle. +** `ras_low_mark` - Lowest size of RAS during an execution cycle. [[Unit_Block_Diagram]] === Unit Block Diagram @@ -265,7 +274,7 @@ loop predictor table === Class heirarchy * BPU inherits `sparta::Unit` -* BPU inherits from BranchPredictorIF<> +* BPU inherits BranchPredictorIF.hpp [[Class_Description_of_BPU]] === Class Description @@ -306,10 +315,19 @@ loop predictor table ** Makes entry in FTQ. ** Later on, handle any potential prediction override between TAGE and BasePredictor. -4. `updateGHRTaken()` +4. `void sendCreditsToFetch()` + ** Send credits to Fetch unit to indicate availabilty of slots to receive prediction input. + +5. `void receiveCreditsFromFetch()` + ** To receive credits from Fetch unit to inidcate availabilty of slots to receive prediction output. + +6. `void makePrediction()` + ** To send incoming prediction request to BasePredictor and TAGE-SC-L to get prediction. + +7. `void updateGHRTaken()` ** shifts all history bits by 1 position to left, and set last bit as 1. -5. `updateGHRNotTaken()` +8. `void updateGHRNotTaken()` ** Shifts all history bits by 1 position to left, and set last bit as 0. @@ -398,7 +416,9 @@ registers are hashed to index into the PHT. The counter at this particular index the prediction that whether the branch will be taken or not. [[class_description_of_PHT]] -=== Class description of PatternHistoryTable +=== Class description + +`class PatternHistoryTable` ==== Constructor `PatternHistoryTable(uint32_t pht_size, uint8_t ctr_bits) : pht_size_(pht_size), ctr_bits_(ctr_bits) {}` @@ -439,7 +459,9 @@ Whenever a PC is received by the BPU, it is used to index into the BTB, which contains the target address of the next instruction. [[class_description_of_BTB]] -=== Class description of BranchTargetBuffer +=== Class description + +`class BranchTargetBuffer` ==== Constructor `BranchTargetBuffer(uint32_t btb_size) : btb_size_(btb_size) {}` @@ -526,8 +548,11 @@ PHT and RAS. ** Instantiate `TAGE`, `StatisticalCorrector`, and `LoopPredictor` class === Class description + +`class Tage_SC_L` + ==== Constructor -`TAGE_SC_L()` +`Tage_SC_L()` === Data members @@ -582,6 +607,8 @@ no matching tagged predictor component, the prediction given by default predicto [[Class_Description_of_TAGE]] === Class Description of TAGE +`class Tage` + ==== Constructor `Tage(uint16_t tage_bim_size, uint8_t tage_bim_ctr_bits, uint16_t tage_tagged_table_num, uint8_t tagged_ctr_bits, uint8_t tage_u_bits, uint32_t min_hist_len, From d56147bb89b46cf7da7a0a83eb6935de20d1ac79 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Mon, 16 Dec 2024 18:01:51 +0530 Subject: [PATCH 11/17] Updated BPU overview diagram with BPU interaction diagram --- docs/bpu_design_document/BPUDesignDoc.adoc | 9 +++++---- .../media/bpu_interaction.png | Bin 0 -> 56925 bytes docs/bpu_design_document/media/bpu_overview.png | Bin 29735 -> 0 bytes 3 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 docs/bpu_design_document/media/bpu_interaction.png delete mode 100644 docs/bpu_design_document/media/bpu_overview.png diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 3ddc778c..d265fcc6 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -15,6 +15,7 @@ the Olympia simulator. [width="100%",cols="11%,11%,16%,62%",options="header",] |=== |*Revision* |*Date* |*Author* |*Summary of Changes* +|0.4 | 2024.12.16 | Shobhit Sinha | Replaced BPU overview diagram with BPU interaction diagram |0.3 | 2024.12.12 | Shobhit Sinha | Added extra ports, counters, functions list and data members to design document |0.2 | 2024.11.18 | Shobhit Sinha | BPU design documentation |0.1 | 2024.11.12 | Jeff Nye | initial template @@ -57,12 +58,12 @@ Fetch unit and predicts the direction and target address from which Fetch unit has to get the next instruction. -[[Overview_Block_Diagram]] -=== Overview Block Diagram +[[BPU_Interaction_Block_Diagram]] +=== Interaction of BPU -image:media/bpu_overview.png[image,width=576,height=366] +image:media/bpu_interaction.png[image,width=576,height=366] -Figure 1 - Overview of BPU in reference to Fetch unit +Figure 1 - Overview of interaction of BPU with Fetch [[Functional_Description]] == Functional Description diff --git a/docs/bpu_design_document/media/bpu_interaction.png b/docs/bpu_design_document/media/bpu_interaction.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f5f485cf9f84a5a4258ab6cde156b7686df5b6 GIT binary patch literal 56925 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 literal 0 HcmV?d00001 diff --git a/docs/bpu_design_document/media/bpu_overview.png b/docs/bpu_design_document/media/bpu_overview.png deleted file mode 100644 index 9e068ab0a52a2c69c7126d813c565e41eef01bb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29735 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 E0MZG(DF6Tf From 900f46239e75e85604f2b80550af09060609ada4 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Sun, 2 Mar 2025 15:18:56 +0530 Subject: [PATCH 12/17] Added details of FTQ structure --- docs/bpu_design_document/BPUDesignDoc.adoc | 72 +++++++++++++++++---- docs/bpu_design_document/media/FTQ.png | Bin 0 -> 16549 bytes 2 files changed, 59 insertions(+), 13 deletions(-) create mode 100644 docs/bpu_design_document/media/FTQ.png diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index d265fcc6..76868efe 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -15,6 +15,7 @@ the Olympia simulator. [width="100%",cols="11%,11%,16%,62%",options="header",] |=== |*Revision* |*Date* |*Author* |*Summary of Changes* +|0.5 | 2025.03.02 | Shobhit Sinha | Added details of FTQ structure to enable prediction overriding in case of mismatch between first and second level prediction. |0.4 | 2024.12.16 | Shobhit Sinha | Replaced BPU overview diagram with BPU interaction diagram |0.3 | 2024.12.12 | Shobhit Sinha | Added extra ports, counters, functions list and data members to design document |0.2 | 2024.11.18 | Shobhit Sinha | BPU design documentation @@ -93,7 +94,7 @@ additional cycle. [[Output_Ports_BPU]] === Output Ports in BPU -** `out_fetch_predictionRequest_credits` - To send credits to Fetch unit to indicate availabilty of slots in BPU to receive PredictionRequest. +** `out_fetch_predictionRequest_credits` - To send credits to Fetch unit to indicate availability of slots in BPU to receive PredictionRequest. ** `out_fetch_predictionOutput` - To send PredictionOutput to Fetch unit. @@ -424,6 +425,9 @@ the prediction that whether the branch will be taken or not. ==== Constructor `PatternHistoryTable(uint32_t pht_size, uint8_t ctr_bits) : pht_size_(pht_size), ctr_bits_(ctr_bits) {}` +* Initializes all the index of PHT with 0 values + + [[Data_members_of_PHT]] === Data members @@ -435,7 +439,7 @@ None 1. `const uint32_t pht_size_` 2. `const uint8_t ctr_bits_` 3. `const uint8_t ctr_bits_val_` -4. `std::map pattern_history_table_` +4. `std::map pht_` [[Functions_list_of_PHT]] === Functions list @@ -475,7 +479,7 @@ None ==== Private data members 1. `const uint32_t btb_size_` -2. `std::map branch_target_buffer_` +2. `std::map btb_` [[BTB_Functions_List]] === Functions List @@ -487,10 +491,10 @@ BTB table 2. `bool removeEntry(uint64_t PC)` - deallocates a BTB entry corresponding to a particular PC. -3. `uint64_t getPredictedPC(uint64_t PC)` - returns the target PC corresponding to the -PC +3. `bool isHit(uint64_t PC)` - returns whether there is an entry for the PC in BTB or not. -4. `bool isHit(uint64_t PC)` - returns whether there is an entry for the PC in BTB or not. +4. `uint64_t getPredictedPC(uint64_t PC)` - returns the target PC corresponding to the +PC ==== Private functions None @@ -520,19 +524,21 @@ None ==== Private data members 1. `const uint32_t ras_size_` -2. `std::stack return_address_stack_` +2. `std::stack ras_` [[RAS_Functions_List]] === Functions list ==== Public functions -1. `void pushAddress()` - Whenever a JAL (call) instruction is executed, the PC is +1. `void pushAddress(uint64_t PC)` - Whenever a JAL (call) instruction is executed, the PC is pushed to the RAS stack. If the RAS is already full, then depending on the value of `ras_enable_overwrite` parameter, overwrite the older entry. 2. `uint64_t popAddress()` - Whenever a JALR (ret) instruction is being executed, the topmost element of the RAS is popped and returned to the Fetch unit. +3. `uint32_t getSize()` - To get the current size of RAS. + ==== Private functions None @@ -802,11 +808,49 @@ uint8_t confidence, uint8_t age, bool direction)` Fetch Target Queue stores information related to in-flight branches which are used to update the BPU, once instructions are finally committed. -Similar to ROB, but it is decoupled from it. Implemented using a Queue. +* Similar to ROB, but it is decoupled from it. + +* Entries are allocated to FTQ when predictions are made. + +* Upon retirement of the instruction, the corresponding FTQ entry is de-allocated +and `UpdateInput` containing `correctedDirection` and `correctedTargetPC` is sent to BPU to +update BPU's internal state. + +=== FTQ enable multi-level branch predictor hierarchy +The FTQ stores predicted addresses from the branch predictor, later to be consumed by the +instruction cache. + +Entries stored in the FTQ can be consumed by the instruction cache while the branch predictor +accesses higher levels of its hierarchy. [3] -Entries are allocated to FTQ when predictions are sent to Fetch. -Upon retirement of instructions, the `correctedPC` and `correctedDirection` values are written, -and then sent to BPU to update its internal state. +=== Overriding mechanism +* BasePredictor makes the prediction for every incoming branch instruction it receives and pushes +the prediction to FTQ as soon it is made. + +* This prediction stored in FTQ is utilized to fetch next instruction from instruction cache +while the branch predictor accesses higher level(TAGE-SC-L) of its hierarchy. + +* Once the prediction by TAGE-SC-L is made, it is compared against the prediction made by +BasePredictor, which is already stored in FTQ. + +* In case the prediction made by TAGE-SC-L mismatches the prediction made by BasePredictor, +then instructions are flushed and newly created prediction is inserted to FTQ. + +* Otherwise, instruction execution continues as it is. + +[[Unit_Diagram_of_FTQ]] +=== Unit Diagram of FTQ +image:media/FTQ.png[image,width=800,height=366] + +Figure: Unit block diagram of FTQ + +* Port 1 -> `in_bpu_first_prediction_` - Receives prediction made by BasePredictor of BPU +* Port 2 -> `in_bpu_second_prediction_` - Receives prediction made by TAGE-SC-L of BPU +* Port 3 -> `out_ftq_prediction_` - Send PredictionOutput to FTQ +* Port 4 -> `out_bpu_update_` - Send UpdateInput to BPU to carry out any BPU state update +* Port 5 -> `in_rob_signal_` - Receives signal from ROB during commit +* Port 6 -> `TODO` - to enable flushing instructions in case of mismatch between first level and second +level prediction. [[Class_Description_of_FTQEntry]] === Class Description of FTQEntry @@ -900,4 +944,6 @@ made by BasePredictor and TAGE_SC_L-Predictor [1] André Seznec, The L-TAGE Branch Predictor, 2007 -[2] André Seznec, A New Case for the TAGE Branch Predictor \ No newline at end of file +[2] André Seznec, A New Case for the TAGE Branch Predictor + +[3] Optimizations Enabled by a Decoupled Front-End Architecture \ No newline at end of file diff --git a/docs/bpu_design_document/media/FTQ.png b/docs/bpu_design_document/media/FTQ.png new file mode 100644 index 0000000000000000000000000000000000000000..46f23e5f14a7db715c9ba830c8a01b4b4343b7ed GIT binary patch literal 16549 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

  • i5Mgt)QH30Y@Xrb=2d}>|fXa%ko;C|Y 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 YVZNX=7{U+#`vHWpzPVnNjw|WE0e7oOnE(I) literal 0 HcmV?d00001 From 1ecd00ffe33619951b924d26a4d9330b534e73fc Mon Sep 17 00:00:00 2001 From: Shobhit Date: Thu, 13 Mar 2025 03:18:14 +0530 Subject: [PATCH 13/17] Updated FTQ ports and bpu_uarch diagram --- docs/bpu_design_document/BPUDesignDoc.adoc | 112 +++++++++++++------ docs/bpu_design_document/media/FTQ.png | Bin 16549 -> 29967 bytes docs/bpu_design_document/media/bpu_uarch.png | Bin 118881 -> 56940 bytes 3 files changed, 79 insertions(+), 33 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 76868efe..88462ecd 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -134,12 +134,11 @@ Figure 2 - Unit block diagram of BPU [[Block_Diagram_Description]] === Block Diagram Description -BPU consists of a BasePredictor (which is accessed in the -first fetch cycle), a TAGE_SC_L-Predictor (which is also accessed -in the first fetch cycle), and an FTQ (a simple +BPU consists of a BasePredictor, a TAGE_SC_L-Predictor, and an FTQ (a queue) which stores the information of all in-flight branch instructions -and is required in order to update the BPU once instruction are finally -committed. +and is required in order to update the state of BPU once instruction are finally +committed, it also enables multi-tier prediction by buffering the initial prediction +while BPU accesses its higher level of hierarchy. [[Description_of_PredictionRequest]] == Description of PredictionRequest @@ -606,7 +605,7 @@ no matching tagged predictor component, the prediction given by default predicto === Parameters of TAGE // start from here -=== Class heirarchy +=== Class hierarchy ** Includes `TageBIM` and `TageTaggedComponent` class. @@ -620,7 +619,7 @@ no matching tagged predictor component, the prediction given by default predicto `Tage(uint16_t tage_bim_size, uint8_t tage_bim_ctr_bits, uint16_t tage_tagged_table_num, uint8_t tagged_ctr_bits, uint8_t tage_u_bits, uint32_t min_hist_len, uint8_t tage_hist_alpha, uint32_t tage_max_idx_bits, uint32_t global_hist_buff_len, uint32_t global_hist_folded_buff_len, -uint32_t useful_reset_interval)` +uint32_t useful_reset_interval) {}` ** Initializes an array of `TageTaggedComponent` indexed by the hash of PC and different history lengths @@ -631,11 +630,11 @@ lengths ==== Private data members 1. `uint32_t tage_bim_table_size_` - Size of bimodal table used in TAGE. -2. `uint16_t tage_max_index_bits_` - Maximum number of bits used to index the predictor tables of TAGE. -3. `uint16_t tage_num_components_` - Number of tagged components used in TAGE. -4. `uint8_t tage_bim_counter_bits_` - Number of counter bits used in bimodal table of TAGE to make prediction. +2. `uint8_t tage_bim_counter_bits_` - Number of counter bits used in bimodal table of TAGE to make prediction. +3. `uint16_t tage_max_index_bits_` - Maximum number of bits used to index the predictor tables of TAGE. +4. `uint16_t tage_num_components_` - Number of tagged components used in TAGE. 5. `uint8_t tage_counter_bits_` - Number of counter bits used in tagged components of TAGE to make prediction. -6. `uint8_t tage_useful_bits_` - Number of bits used in the 'useful' component of tagged entry. +6. `uint8_t tage_useful_bits_` - Number of bits used in the 'useful' component of tagged entry. 7. `uint32_t tage_global_hist_buff_len_` - Length of the global history buffer used by TAGE. 8. `uint32_t tage_folded_hist_buff_len_` - Length of the history buffer used for folded history entries. @@ -646,12 +645,16 @@ lengths 11. `uint8_t tage_hist_alpha_` - Common ratio of geometric progression with which history length increases. 12. `uint32_t tage_reset_useful_interval_` - Interval after which useful bits are reset. +13. `TageBIM tage_bim_` - Bi-modal table of the TAGE predictor. +14. `std::vector tage_tagged_components_` - Array of tagged components of TAGE predictor. [[Functions_list_of_TAGE]] === Functions list ==== Public functions -** `uint8_t predict(uint64_t ip)` - Returns the prediction from TAGE +* `uint8_t predict(uint64_t ip)` - Returns the prediction from TAGE +* `bool addTaggedEntry()` +* `bool removedTaggedEntry()` ==== Private functions @@ -670,44 +673,51 @@ Bimodal table of the TAGE predictor provides the base prediction for any predict `TageBIM(uint32_t tage_bim_table_size, uint8_t tage_base_ctr_bits) : tage_bim_table_size_(tage_bim_table_size), tage_base_ctr_bits_(tage_base_ctr_bits) {}` +* Initializes counter at all indexes of BIM with 0 + === Data members ==== Private data members -1. `uint32_t tage_bim_table_size_` -2. `uint8_t tage_base_ctr_bits_` -3. `std::map Tage_Bimodal_` +1. `uint32_t tage_bim_table_size_` - Represents maximum size of the BIM table of TAGE +2. `uint8_t tage_bim_ctr_bits_` - Represents the number of bits used in counter of BIM table +3. `std::vector Tage_Bimodal_` - Represents the container used for BIM in the +implementation ==== Public data members +None === Functions list ==== Public functions -1. `void incrementCtr()` -2. `void decrementCtr()` -3. `uint8_t getPrediction(uint32_t ip)` - Returns the prediction counter of index ip +1. `void incrementCtr(uint32_t ip)` - Increments counter at index ip of BIM table within set bounds of `tage_bim_ctr_bits_`. +2. `void decrementCtr(uint32_t ip)` - Decrements counter at index ip of BIM table within set bounds of `tage_bim_ctr_bits_`. +3. `uint8_t getPrediction(uint32_t ip)` - Returns the prediction counter given BIM at index ip. ==== Private functions +None -[[Tagged_Component_of_TAGE]] -== Tagged Component of TAGE +[[Tagged_Component_Entry_of_TAGE]] +== Tagged Component Entry of TAGE Tagged components of TAGE predictor provides prediction for different history lengths. [[class_description_of_TAGE_Tagged_Component]] === Class description -`class TageTaggedComponent` +`class TageTaggedComponentEntry` ==== Constructor - -`TageTaggedComponent(uint16_t Tag, uint8_t tage_ctr_bits, uint8_t tage_useful_bits) : Tag_(Tag), +`TageTaggedComponentEntry(uint16_t Tag, uint8_t tage_ctr_bits, uint8_t tage_useful_bits) : Tag_(Tag), tage_ctr_bits_(tage_ctr_bits), tage_useful_bits_(tage_useful_bits) {}` === Data members ==== Private data members -1. `uint16_t Tag_` - used for verifying that the entry corresponds to the current branch instruction. -2. `uint8_t tage_ctr_bits_` - represents the direction branch will take -3. `uint8_t tage_useful_bits_` - Number of bits which represents useful value +1. `uint16_t Tag_` - Used for verifying that the entry corresponds to the current branch instruction. +2. `uint8_t tage_ctr_bits_` - Number of bits to be used for Tage component entry counter(ctr) +3. `uint8_t tage_useful_bits_` - Number of bits to be used for Tage component entry useful value(u) +4. `uint8_t ctr_` - Represent counter(ctr) value of tage tagged component entry. +5. `uint8_t useful_` - Represent useful(u) value of tage tagged component entry. ==== Public data members @@ -715,12 +725,48 @@ tage_ctr_bits_(tage_ctr_bits), tage_useful_bits_(tage_useful_bits) {}` ==== Public functions -1. `void incrementCtr()` - Increment the counter bit within the set bounds -2. `void decrementCtr()` - Decrement the counter bit within the set bounds -3. `void incrementUsefulBit()`- Increment the useful bit within the set bounds -4. `void decrementUsefulBit()` - Decremet the useful bit within the set bounds +1. `void incrementCtr()` - Increment the counter bit within the bounds of tage_ctr_bits +2. `void decrementCtr()` - Decrement the counter bit within the bounds of tage_ctr_bits +3. `void incrementUseful()`- Increment the useful bit within the bounds of tage_useful_bits +4. `void decrementUseful()` - Decrement the useful bit within the bounds of tage_useful_bits ==== Private functions +None + +[[Tagged_Component_of_TAGE]] +== Tagged Component of TAGE + +Represents one tagged component of TAGE predictor filled with `TageTaggedComponentEntry` + +=== Class Hierarchy + +Includes `TageTaggedComponentEntry` class + +=== Class Description + +`class TageTaggedComponent` + +==== Constructor + +`TageTaggedComponent(uint16_t num_tagged_entry) : num_tagged_entry_(num_tagged_entry) {}` + +=== Data Members + +==== Public Data Members + +==== Private Data Members +1. `num_tagged_entry_` - Defines the maximum number of allowed entry in the current tagged component. +2. `std::vector tage_tagged_component_` - Defines the internal container used to +store elements of a tagged component. + +=== Functions list + +==== Public functions +1. `addEntry()` +2. `removeEntry()` + +==== Private functions + == Statistical Corrector @@ -846,11 +892,11 @@ Figure: Unit block diagram of FTQ * Port 1 -> `in_bpu_first_prediction_` - Receives prediction made by BasePredictor of BPU * Port 2 -> `in_bpu_second_prediction_` - Receives prediction made by TAGE-SC-L of BPU -* Port 3 -> `out_ftq_prediction_` - Send PredictionOutput to FTQ -* Port 4 -> `out_bpu_update_` - Send UpdateInput to BPU to carry out any BPU state update -* Port 5 -> `in_rob_signal_` - Receives signal from ROB during commit -* Port 6 -> `TODO` - to enable flushing instructions in case of mismatch between first level and second +* Port 3 -> `TODO` - to enable flushing instructions in case of mismatch between first level and second level prediction. +* Port 4 -> `out_ftq_prediction_` - Send PredictionOutput to FTQ +* Port 5 -> `in_rob_signal_` - Receives signal from ROB during commit +* Port 6 -> `out_bpu_update_` - Send UpdateInput to BPU to carry out any BPU state update [[Class_Description_of_FTQEntry]] === Class Description of FTQEntry diff --git a/docs/bpu_design_document/media/FTQ.png b/docs/bpu_design_document/media/FTQ.png index 46f23e5f14a7db715c9ba830c8a01b4b4343b7ed..bee7ba99bea4011a0cae72b97edc612b84346ffd 100644 GIT binary patch literal 29967 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
  • i5Mgt)QH30Y@Xrb=2d}>|fXa%ko;C|Y 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 YVZNX=7{U+#`vHWpzPVnNjw|WE0e7oOnE(I) diff --git a/docs/bpu_design_document/media/bpu_uarch.png b/docs/bpu_design_document/media/bpu_uarch.png index 20bc524e12b7a4ff2b604f3320632857aec24b62..8738ae9e7739d9fa5fde4b7160b2bfdbff0ba79d 100644 GIT binary patch literal 56940 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≷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 b@xP^by?x5L!?Q>n@NfIpom-L(4+Z=mf>=9~ literal 118881 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 From 37cc04cf31f388364e8a822058c47ee0e4774ad8 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Fri, 14 Mar 2025 06:39:36 +0530 Subject: [PATCH 14/17] Added interaction mechanism detail between BPU, FTQ and Fetch --- docs/bpu_design_document/BPUDesignDoc.adoc | 104 ++++++++++++------ .../media/BPUInteraction.png | Bin 0 -> 49862 bytes .../media/bpu_interaction.png | Bin 56925 -> 0 bytes 3 files changed, 69 insertions(+), 35 deletions(-) create mode 100644 docs/bpu_design_document/media/BPUInteraction.png delete mode 100644 docs/bpu_design_document/media/bpu_interaction.png diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 88462ecd..ebc255b3 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -15,9 +15,12 @@ the Olympia simulator. [width="100%",cols="11%,11%,16%,62%",options="header",] |=== |*Revision* |*Date* |*Author* |*Summary of Changes* -|0.5 | 2025.03.02 | Shobhit Sinha | Added details of FTQ structure to enable prediction overriding in case of mismatch between first and second level prediction. +|0.6 | 2025.03.14 | Shobhit Sinha | Defined interaction mechanism between BPU, FTQ and Fetch/ICache +|0.5 | 2025.03.02 | Shobhit Sinha | Added details of FTQ structure to enable prediction overriding in +case of mismatch between first and second level prediction |0.4 | 2024.12.16 | Shobhit Sinha | Replaced BPU overview diagram with BPU interaction diagram -|0.3 | 2024.12.12 | Shobhit Sinha | Added extra ports, counters, functions list and data members to design document +|0.3 | 2024.12.12 | Shobhit Sinha | Added extra ports, counters, functions list and data members to +design document |0.2 | 2024.11.18 | Shobhit Sinha | BPU design documentation |0.1 | 2024.11.12 | Jeff Nye | initial template |=== @@ -58,14 +61,6 @@ It receives prediction input in the form of PC and instruction type from the Fetch unit and predicts the direction and target address from which Fetch unit has to get the next instruction. - -[[BPU_Interaction_Block_Diagram]] -=== Interaction of BPU - -image:media/bpu_interaction.png[image,width=576,height=366] - -Figure 1 - Overview of interaction of BPU with Fetch - [[Functional_Description]] == Functional Description @@ -129,7 +124,7 @@ additional cycle. image:media/bpu_uarch.png[image,width=800,height=366] -Figure 2 - Unit block diagram of BPU +Figure 1 - Unit block diagram of BPU [[Block_Diagram_Description]] === Block Diagram Description @@ -549,7 +544,7 @@ The second level predictor implements a TAGE-SC-L predictor in order to predict complex branches with better accuracy than is possible with a simple combination of PHT and RAS. -=== Class heirarchy +=== Class Hierarchy ** Instantiate `TAGE`, `StatisticalCorrector`, and `LoopPredictor` class @@ -892,17 +887,55 @@ Figure: Unit block diagram of FTQ * Port 1 -> `in_bpu_first_prediction_` - Receives prediction made by BasePredictor of BPU * Port 2 -> `in_bpu_second_prediction_` - Receives prediction made by TAGE-SC-L of BPU -* Port 3 -> `TODO` - to enable flushing instructions in case of mismatch between first level and second +* Port 3 -> `out_first_misprediction_flush_` - to enable flushing instructions in case of mismatch between first level and second level prediction. -* Port 4 -> `out_ftq_prediction_` - Send PredictionOutput to FTQ +* Port 4 -> `out_fetch_prediction_` - Send PredictionOutput to Fetch/ICache * Port 5 -> `in_rob_signal_` - Receives signal from ROB during commit -* Port 6 -> `out_bpu_update_` - Send UpdateInput to BPU to carry out any BPU state update +* Port 6 -> `out_bpu_update_input_` - Send UpdateInput to BPU to carry out any BPU state update + +[[Class_Description_of_FTQ]] +=== Class Description of FTQ + +==== Constructor +`FTQ(uint32_t ftq_capacity) : ftq_capacity_(ftq_capacity) {}` + +=== Data members + +==== Public members + +==== Private members +1. `std::queue fetch_target_queue_` - Underlying container of FTQ +2. `const uint32_t ftq_capacity_` - Max capacity of FTQ. + +[[Functions_list_of_FTQ]] +=== Functions list + +==== Public functions +** `void sendCreditsToBPU_(uint32_t credits)` - Send credits to BPU to indicate availability of capacity +in FTQ. +** `void sendInitialCreditsToBPU_()` - Wrapper function to send initial credits to BPU. +** `void receiveFirstPrediction_()` - Receives prediction from BasePredictor and pushes it into FTQ. +** `void receiveSecondPrediction_()` - Receives prediction from TAGE_SC_L, checks if there's a mismatch +and updates ftq appropriately. +** `void receiveCreditsFromFetch_()` - Receive credits from Fetch/ICache to indicate availability to send +prediction. +** `void sendPredictionToFetch_()` - Continuously send predictions to Fetch/ICache. +** `void firstMispredictionFlush_()` - Flushes instruction if first tier prediction does not match +second tier prediction. +** `void receiveROBSignal_()` - Receives branch resolution signal from ROB at the time of commit. +** `void deallocateEntry_()` - De-allocate FTQ entry once branch instruction is committed. + +==== Private functions +NA + +[[FTQEntry]] +== FTQEntry [[Class_Description_of_FTQEntry]] === Class Description of FTQEntry -==== Constructor - -`FTQEntry(uint64_t targetPC, uint64_t correctedPC, bool predDirection, bool correctedDirection) : +==== Constructor - +`FTQEntry(uint64_t targetPC, uint64_t correctedPC, bool predDirection, bool correctedDirection) : targetPC_(targetPC), correctedPC_(correctedPC), predDirection_(predDirection), correctedDirection_(correctedDirection) {}` === Data members @@ -918,6 +951,8 @@ targetPC_(targetPC), correctedPC_(correctedPC), predDirection_(predDirection), c ** `bool correctedDirection_` +** `uint8_t status_` - Indicates if the prediction has been sent from FTQ to Fetch/ICache or not. + === Functions list ==== Public functions @@ -929,30 +964,29 @@ targetPC_(targetPC), correctedPC_(correctedPC), predDirection_(predDirection), c 5. `void setCorrectedPC()` - sets the `correctedPC_` variable 6. `void setCorrectedDirection()` - sets the `correctedDirection_` varibale - ==== Private functions +NA -[[Class_Description_of_FTQ]] -=== Class Description of FTQ - -==== Constructor -`FTQ()` - -=== Data members - -==== Public members +[[Interaction_of_BPU_Block_Diagram]] +== Interaction of BPU -==== Private members -1. `std::vector fetch_target_queue_` - +image:media/BPUInteraction.png[image,width=576,height=366] -[[Functions_list_of_FTQ]] -=== Functions list +Figure 3 - Overview of interaction of BPU with Fetch -==== Public functions -** `addEntry(FTQEntry ftq_entry)` - adds an entry into the FTQ. -** `removeEntry(FTQEntry ftq_entry)` - removes ftq_entry from the FTQ. +[[Interaction_between_BPU_and_FTQ]] +=== Interaction between BPU and FTQ +* First level prediction can only be pushed to FTQ if there is space available. +* Second level prediction is sent to FTQ through `sparta::DataOutPort` without any such constraint, +since second level prediction only verifies (or replaces, in case mis-prediction) the prediction already +stored in the FTQ. +* Credits are transferred from FTQ to BPU to keep track of available FTQ capacity. + ** Credits are sent to BPU everytime FTQEntry is de-allocated from FTQ at commit. -==== Private functions +[[Interaction_between_FTQ_and_Fetch_or_ICache]] +=== Interaction between FTQ and Fetch/ICache +* Fetch/ICache send credits to BPU to indicate availability to receive prediction. +* If FTQ has unsent predictions in the queue, and credits are available then it send credits to Fetch/ICache. [[Test_Bench_Description]] == Test Bench Descriptions diff --git a/docs/bpu_design_document/media/BPUInteraction.png b/docs/bpu_design_document/media/BPUInteraction.png new file mode 100644 index 0000000000000000000000000000000000000000..ff92278618b1ee5dc61f03e47d3d9caa5f9dceea GIT binary patch literal 49862 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 From 8274db482874f4408aca6dd1476ebb80bfd72d7a Mon Sep 17 00:00:00 2001 From: Shobhit Date: Mon, 17 Mar 2025 02:53:21 +0530 Subject: [PATCH 15/17] Defined mechanism and functions for internal working of TAGE --- docs/bpu_design_document/BPUDesignDoc.adoc | 145 +++++++++++++-------- 1 file changed, 91 insertions(+), 54 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index ebc255b3..858cd945 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -578,7 +578,7 @@ a number of tagged predictor components which uses geometrically increasing hist Each entry in a tagged component consists of 3 fields - - ** `pred` - represents the direction branch will take + ** `ctr` - represents the direction branch will take ** `useful` - represents if the prediction made by same component turned out to be correct last time or not. ** `tag` - used for verifying that the entry corresponds to the current branch instruction. @@ -590,11 +590,42 @@ Source: Andre Seznec, Pierre Michaud, A case for (partially) TAgged GEometric hi [[Operation_of_TAGE]] === Operation of TAGE -When prediction is requested, the Bi-Modal table (T0) and tagged components (Ti; 1 < i < M) are -accessed simultaneously. The Bi-modal table (base predictor) provides the default prediction. -Whereas the tagged components provide a prediction only on a tag match. The overall prediction is -provided by the hitting tagged predictor component that uses the longest history length. In case of -no matching tagged predictor component, the prediction given by default predictor is used. [1] +==== How is prediction made? + +* When prediction is requested, the Bi-Modal table (T0) is accessed using PC and the tagged components +(Ti; 1 < i < M) are accessed using a hash of PC and geometrically increasing numbers of branch history bits. + +* The Bi-modal table (base predictor) provides the default prediction. + +* Whereas the tagged components provide a prediction only on a tag match. + +* The overall prediction is provided by the hitting tagged predictor component that uses the longest history length. +In case of no matching tagged predictor component, the prediction given by default predictor is used. [1] + +==== Internal state update + +* Global resetting of useful component - After a certain number of branch instructions, useful bits of all the entries +are reset. + +* When prediction is correct + +** The counter bits of provider component is updated appropriately. + +** The useful bits of provider component is incremented whenever prediction is correct and altpred is incorrect (TODO : +verify condition). + +** No new entry is allocated anywhere. + +* When prediction is incorrect + +** The counter bits of provider component is updated appropriately. + +** As a second step, if the provider component (Ti) is not the component using the longest history (i.e i < M), we try +to allocate a new entries to components (Tk) using a longest history (i.e i < k < M). + +*** TODO : Deciding the number of newer entries to allocate on mis-prediction. + +*** In order to allocate newer entries, useful bits are read and the component whose useful bits are null is chosen. [[Parameters_of_TAGE]] === Parameters of TAGE @@ -632,27 +663,31 @@ lengths 6. `uint8_t tage_useful_bits_` - Number of bits used in the 'useful' component of tagged entry. 7. `uint32_t tage_global_hist_buff_len_` - Length of the global history buffer used by TAGE. -8. `uint32_t tage_folded_hist_buff_len_` - Length of the history buffer used for folded history entries. +8. `std::vector tage_gloabl_history_` - GHR used by TAGE. +9. `uint32_t tage_folded_hist_buff_len_` - Length of the history buffer used for folded history entries. -9. `uint32_t tage_path_hist_buff_len_` - Length of the path history buffer +10. `uint32_t tage_path_hist_buff_len_` - Length of the path history buffer -10. `uint32_t tage_min_hist_len_` - Minimum length of history used in TAGE. -11. `uint8_t tage_hist_alpha_` - Common ratio of geometric progression with which history length increases. -12. `uint32_t tage_reset_useful_interval_` - Interval after which useful bits are reset. - -13. `TageBIM tage_bim_` - Bi-modal table of the TAGE predictor. -14. `std::vector tage_tagged_components_` - Array of tagged components of TAGE predictor. +11. `uint32_t tage_min_hist_len_` - Minimum length of history used in TAGE. +12. `uint8_t tage_hist_alpha_` - Common ratio of geometric progression with which history length increases. +13. `uint32_t tage_reset_useful_interval_` - Interval after which useful bits are reset. +14. `uint32_t branch_counter` - To keep track of number of branches predicted. Used for resetting useful bits +periodically. +15. `TageBIM tage_bim_` - Bi-modal table of the TAGE predictor. +16. `std::vector tage_tagged_components_` - Array of tagged components of TAGE predictor. [[Functions_list_of_TAGE]] === Functions list ==== Public functions -* `uint8_t predict(uint64_t ip)` - Returns the prediction from TAGE -* `bool addTaggedEntry()` -* `bool removedTaggedEntry()` +1. `uint8_t predict(uint64_t PC)` - Returns the prediction from TAGE for a given PC. +2. `void update()` - Updates the internal state of TAGE based on the `UpdateInput` received by the BPU. ==== Private functions - +1. `uint32_t tage_hasher(uint64_t PC, std::vector & tage_global_history, uint32_t hist_length_bits)` - Returns the index value +obtained by combining PC and history bits. +2. `void resetAllUseful()` - Resets `useful` component of all the tagged component entries of TAGE. +3. `bool allocateEntries()` [[Bimodal_table_of_TAGE]] == Bimodal Table of TAGE @@ -673,7 +708,7 @@ tage_base_ctr_bits_(tage_base_ctr_bits) {}` === Data members ==== Private data members -1. `uint32_t tage_bim_table_size_` - Represents maximum size of the BIM table of TAGE +1. `uint32_t tage_bim_max_size_` - Represents maximum size of the BIM table of TAGE 2. `uint8_t tage_bim_ctr_bits_` - Represents the number of bits used in counter of BIM table 3. `std::vector Tage_Bimodal_` - Represents the container used for BIM in the implementation @@ -694,7 +729,7 @@ None [[Tagged_Component_Entry_of_TAGE]] == Tagged Component Entry of TAGE -Tagged components of TAGE predictor provides prediction for different history lengths. +Represents the blueprint of the entry of the tagged components of TAGE predictor. [[class_description_of_TAGE_Tagged_Component]] === Class description @@ -702,19 +737,23 @@ Tagged components of TAGE predictor provides prediction for different history le ==== Constructor - -`TageTaggedComponentEntry(uint16_t Tag, uint8_t tage_ctr_bits, uint8_t tage_useful_bits) : Tag_(Tag), -tage_ctr_bits_(tage_ctr_bits), tage_useful_bits_(tage_useful_bits) {}` +`TageTaggedComponentEntry(uint16_t tag, uint8_t tage_ctr_bits, uint8_t tage_useful_bits, uint8_t ctr_initial, +uint8_t useful_initial) : tag(tag), tage_ctr_bits_(tage_ctr_bits), tage_useful_bits_(tage_useful_bits), +ctr_(ctr_initial), useful_(useful_initial) {}` + +* ctr_ is initialized with ctr_initial. +* useful_ is initialized with useful_initial. === Data members ==== Private data members -1. `uint16_t Tag_` - Used for verifying that the entry corresponds to the current branch instruction. -2. `uint8_t tage_ctr_bits_` - Number of bits to be used for Tage component entry counter(ctr) -3. `uint8_t tage_useful_bits_` - Number of bits to be used for Tage component entry useful value(u) -4. `uint8_t ctr_` - Represent counter(ctr) value of tage tagged component entry. -5. `uint8_t useful_` - Represent useful(u) value of tage tagged component entry. +1. `uint8_t tage_ctr_bits_` - Number of bits to be used for Tage component entry counter(ctr) +2. `uint8_t tage_useful_bits_` - Number of bits to be used for Tage component entry useful value(u) +3. `uint8_t ctr_` - Represent counter(ctr) value of tage tagged component entry. +4. `uint8_t useful_` - Represent useful(u) value of tage tagged component entry. ==== Public data members +1. `uint16_t tag` - Used for verifying that the entry corresponds to the current branch instruction. === Functions list @@ -724,6 +763,7 @@ tage_ctr_bits_(tage_ctr_bits), tage_useful_bits_(tage_useful_bits) {}` 2. `void decrementCtr()` - Decrement the counter bit within the bounds of tage_ctr_bits 3. `void incrementUseful()`- Increment the useful bit within the bounds of tage_useful_bits 4. `void decrementUseful()` - Decrement the useful bit within the bounds of tage_useful_bits +5. `void resetUseful()` - Sets useful bit of current entry as null(or zero). ==== Private functions None @@ -743,26 +783,31 @@ Includes `TageTaggedComponentEntry` class ==== Constructor -`TageTaggedComponent(uint16_t num_tagged_entry) : num_tagged_entry_(num_tagged_entry) {}` +`TageTaggedComponent(uint16_t num_tagged_entry, uint8_t ctr_initial, uint8_t useful_initial) : +num_tagged_entry_(num_tagged_entry), ctr_initial_(ctr_initial), useful_initial_(useful_initial) +{}` === Data Members ==== Public Data Members ==== Private Data Members -1. `num_tagged_entry_` - Defines the maximum number of allowed entry in the current tagged component. -2. `std::vector tage_tagged_component_` - Defines the internal container used to +1. `uint16_t max_capacity_` - Defines the maximum number of allowed entry in the current tagged component. +2. `uint8_t ctr_initial_` - Defines the value with which `ctr` of all entries in the current component will +be initialized. +3. `uint8_t useful_initial_` - Defines the value with which `useful_` of all entries in the current component will +be initialized. +4. `std::vector tage_tagged_component_` - Defines the internal container used to store elements of a tagged component. === Functions list ==== Public functions -1. `addEntry()` -2. `removeEntry()` +1. `addEntry(uint8_t tag, uint16_t ctr, uint16_t useful)` - Function to allocate a new entry to the current table of TAGE. +2. `removeEntry(uint16_t ip)` - Function to de-allocate an entry from the current table of TAGE. ==== Private functions - == Statistical Corrector **Input** - Prediction + (Address, History) pair @@ -821,16 +866,11 @@ whose entries are used to predict loops. uint8_t confidence, uint8_t age, bool direction)` 1. `uint16_t past_iter` - Stores the 14-bit count for the number of iterations seen in past - 2. `uint16_t current_iter` - stores the 14-bit count for the number of iterations seen currently - 3. `uint16_t tag` - Stores the 14-bit tag for the entry - -4. `uint8_t confidence` - 2-bit counter signifying confidence in prediction - -5. `uint8_t age` - 8-bit counter signifying age of entry - -6. `bool direction` - Stores the direction bit +4. `uint8_t confidence` - 2-bit counter signifying confidence in prediction +5. `uint8_t age` - 8-bit counter signifying age of entry +6. `bool direction` - Stores the direction bit [[Functions_list_of_loop_predictor]] @@ -935,23 +975,20 @@ NA === Class Description of FTQEntry ==== Constructor - -`FTQEntry(uint64_t targetPC, uint64_t correctedPC, bool predDirection, bool correctedDirection) : -targetPC_(targetPC), correctedPC_(correctedPC), predDirection_(predDirection), correctedDirection_(correctedDirection) {}` +`FTQEntry(uint64_t targetPC, uint64_t correctedPC, bool predDirection, bool correctedDirection) {}` === Data members ==== Public members ==== Private members -** `uint64_t targetPC_` - -** `uint64_t correctedPC_` - -** `bool predDirection_` - -** `bool correctedDirection_` - -** `uint8_t status_` - Indicates if the prediction has been sent from FTQ to Fetch/ICache or not. +** `uint64_t instrPC_` - PC of instruction corresponding to current FTQ entry. +** `uint64_t predTargetPC_` - Predicted target PC +** `uint64_t correctedTargetPC_` - Actual target PC +** `bool predDirection_` - Predicted direction of branch (Taken/Not-Taken) +** `bool correctedDirection_` - Actual direction taken by branch instruction. +** `uint8_t status_` - Indicates if the prediction corresponding to this entry has been sent from FTQ to Fetch/ICache +or not. === Functions list @@ -961,8 +998,8 @@ targetPC_(targetPC), correctedPC_(correctedPC), predDirection_(predDirection), c 2. `uint64_t getCorrectedPC()` 3. `bool getPredDirection()` 4. `bool getCorrectedDirection()` -5. `void setCorrectedPC()` - sets the `correctedPC_` variable -6. `void setCorrectedDirection()` - sets the `correctedDirection_` varibale +5. `void setCorrectedPC(uint64_t correctedPC)` - sets the `correctedPC_` variable +6. `void setCorrectedDirection(bool correctedDirection)` - sets the `correctedDirection_` varibale ==== Private functions NA From eed488442d4bc1eb1a29c1a009ce4160fee77295 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Mon, 17 Mar 2025 03:50:41 +0530 Subject: [PATCH 16/17] Update BPU ports and functions to facilitate interaction with FTQ and Fetch --- docs/bpu_design_document/BPUDesignDoc.adoc | 109 +++++++++------------ 1 file changed, 48 insertions(+), 61 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 858cd945..7d51afc4 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -64,41 +64,9 @@ has to get the next instruction. [[Functional_Description]] == Functional Description -The proposed branch prediction unit is a two-tiered branch predictor where the -first tier provides a simple but fast prediction, whereas the second tier consists -of a more accurate predictor which can predict even complex branches but takes an -additional cycle. - -[[Input_Ports_BPU]] -=== Input Ports in BPU - -** `in_fetch_predictionOutput_credits` - To receive credits from Fetch unit to indicate availability of slots to send PredictionOutput to Fetch - -** `in_fetch_predictionRequest` - To receive prediction requests from Fetch unit - -** `TODO-`: input port to receive de-allocated FTQ entry once that instruction packet is committed. - -[[Corresponding_output_ports]] -==== Corresponding Output Ports - -** `out_bpu_predictionOutput_credits` - in Fetch.cpp. To send credits to BPU to indicate availability of slots to receive PredictionOutput. - -** `out_bpu_predictionRequest` - in Fetch.cpp. To send PredictionRequest to BPU. - - -[[Output_Ports_BPU]] -=== Output Ports in BPU - -** `out_fetch_predictionRequest_credits` - To send credits to Fetch unit to indicate availability of slots in BPU to receive PredictionRequest. - -** `out_fetch_predictionOutput` - To send PredictionOutput to Fetch unit. - -[[Corresponding_input_ports]] -==== Corresponding Input Ports - -** `in_bpu_predictionRequest_credits` - in Fetch.cpp. To receive credits from BPU to indicate availabilty in BPU to send PredictionRequest. - -** `in_bpu_predictionOutput` - in Fetch.cpp. To receive PredictionOutput from BPU. +The proposed Branch Prediction Unit (BPU) is a two-tiered branch predictor where the +first tier(BasePredictor) provides a simple but fast prediction, whereas the second tier(TAGE_SC_L) +can give more accurate prediction but takes an additional cycle. [[Counters]] === Counters @@ -241,6 +209,26 @@ correctedDirection_(correctedDirection), correctedTargetPC_(correctedTargetPC) { This section describes the overview and description for the top level class which bolts the Branch Prediction Unit into the Olympia simulator. +[[Input_Ports_BPU]] +=== Input Ports in BPU + +** `in_fetch_prediction_request` - To receive `PredictionRequest` from Fetch unit. + +** `in_ftq_credits_` - To receive credits from FTQ to indicate its availability to receive predictions. + +** `in_ftq_update_input_` - To receive UpdateInput from FTQ once the instruction is committed. After resolution of +branch, UpdateInput is used to update the internal state of BPU. + +[[Output_Ports_BPU]] +=== Output Ports in BPU + +** `out_fetch_prediction_request_credits` - To send credits to Fetch unit to indicate availability of slots in BPU to +receive `PredictionRequest`. + +** `out_ftq_first_prediction_` - To send prediction made by first level (BasePredictor) of the BPU to FTQ. + +** `out_ftq_second_prediction_` - To send prediction made by second level (TAGE_SC_L) of the BPU to FTQ. + [[Parameterization_of_BPU]] === Parameterization of BPU 1. `ghr_size` - Maximum number of branch history bits stored in Global @@ -267,7 +255,7 @@ loop predictor table 13. `loop_pred_table_way` - Defines the Way size of the loop predictor table [[Class_heirarchy_of_BPU]] -=== Class heirarchy +=== Class Hierarchy * BPU inherits `sparta::Unit` * BPU inherits BranchPredictorIF.hpp @@ -282,52 +270,51 @@ loop predictor table === Data members ==== Private members -* `ghr_` - Represents the GHR. +* `uint64_t ghr_` - Represents the GHR. ==== Public members -* Olympia's Branch Predictpor API expects that an implementation of branch predictor must also specify the implementations of `getPrediction(const PredictionRequest &)` and `updatePredictor(const UpdateInput &)` operations +Olympia's Branch Predictor API expects that an implementation of branch predictor must also specify the +implementations of `getPrediction(const PredictionRequest &)` and `updatePredictor(const UpdateInput &)` operations. === Function list ==== Public functions -1. `PredictionOutput getPrediction(const PredictionRequest &)` - ** Returns the PredictionOutput based on the PredictionRequest received. +1. `PredictionOutput getPrediction(const PredictionRequest &)` - Returns the PredictionOutput based on the +PredictionRequest received. -2. `void updatePredictor(const UpdateInput &)` - ** Updates the internal state of the BasePredictor as well as the TAGE-SC-L predictor. +2. `void updatePredictor(const UpdateInput &)` - Updates the internal state of the BasePredictor as well as the +TAGE-SC-L predictor. ==== Private functions -1. `void recievePredictionRequest()` - ** Called whenever PredictionRequest is received on input port of BPU. +1. `void recievePredictionRequest()` + ** Called whenever PredictionRequest is received on input port of BPU. ** Store requests in temporary input buffer to be utilised by BasePredictor and TAGE-SC-L. -2. `void recievePredictionUpdate()` - ** Receives UpdateInput from input port in BPU once instructions are committed. - ** Store deallocated FTQ entries in internal buffer in order to be used by BasePredictor and TAGE-SC-L to update itself. +2. `void makePrediction()` + ** To send incoming prediction request to `BasePredictor` and `TAGE-SC-L` to get prediction. + +3. `void receiveCreditsFromFTQ()` + ** To receive credits from Fetch unit to indicate availability of slots to receive prediction. -3. `PredictionOutput sendPrediction()` - ** Sends prediction to Fetch unit. - ** Makes entry in FTQ. - ** Later on, handle any potential prediction override between TAGE and BasePredictor. +4. `void sendFirstPrediction()` + ** Sends prediction made by BasePredictor to FTQ. -4. `void sendCreditsToFetch()` - ** Send credits to Fetch unit to indicate availabilty of slots to receive prediction input. +5. `void sendSecondPrediction()` + ** Sends prediction made by TAGE-SC-L to FTQ. -5. `void receiveCreditsFromFetch()` - ** To receive credits from Fetch unit to inidcate availabilty of slots to receive prediction output. +6. `void recieveUpdateInput()` + ** Receives UpdateInput from `in_ftq_update_input_`. -6. `void makePrediction()` - ** To send incoming prediction request to BasePredictor and TAGE-SC-L to get prediction. +7. `void sendCreditsToFetch()` + ** Send credits to Fetch unit to indicate availability of slots to receive `PredictionRequest`. -7. `void updateGHRTaken()` +8. `void updateGHRTaken()` ** shifts all history bits by 1 position to left, and set last bit as 1. -8. `void updateGHRNotTaken()` +9. `void updateGHRNotTaken()` ** Shifts all history bits by 1 position to left, and set last bit as 0. - - [[Description_of_BasePredictor]] == BasePredictor From c1505403e7be41f33d3b30481da3a987f346b924 Mon Sep 17 00:00:00 2001 From: Shobhit Date: Mon, 17 Mar 2025 04:14:31 +0530 Subject: [PATCH 17/17] Updated formating --- docs/bpu_design_document/BPUDesignDoc.adoc | 147 +++++++++++---------- 1 file changed, 76 insertions(+), 71 deletions(-) diff --git a/docs/bpu_design_document/BPUDesignDoc.adoc b/docs/bpu_design_document/BPUDesignDoc.adoc index 7d51afc4..f5c379e0 100644 --- a/docs/bpu_design_document/BPUDesignDoc.adoc +++ b/docs/bpu_design_document/BPUDesignDoc.adoc @@ -53,66 +53,27 @@ which are used to update the BPU once instructions are finally committed. [[OVERVIEW]] == OVERVIEW -Branch Prediction Unit is the unit responsible for predicting the branch -outcomes and branch targets before branch instructions are actually -resolved in the pipeline. This prediction allows the processor to prefetch and execute subsequent instructions without waiting to resolve the branch condition, minimizing stalls and maintaining high throughput in the pipeline. +Branch Prediction Unit is the unit responsible for predicting the branch outcomes and branch targets before branch +instructions are actually resolved in the pipeline. This prediction allows the processor to prefetch and execute +subsequent instructions without waiting to resolve the branch condition, minimizing stalls and maintaining high +throughput in the pipeline. -It receives prediction input in the form of PC and instruction type from the -Fetch unit and predicts the direction and target address from which Fetch unit -has to get the next instruction. +The proposed design receives input in the form of `PredictionRequest` from the Fetch unit and predicts in the form +of `PredictionRequest` (includes direction and target address) from which Fetch unit fetches the next instruction. +Information to update the internal state of BPU is received in the form of `UpdateInput` when the instructions are +committed. -[[Functional_Description]] -== Functional Description - -The proposed Branch Prediction Unit (BPU) is a two-tiered branch predictor where the -first tier(BasePredictor) provides a simple but fast prediction, whereas the second tier(TAGE_SC_L) -can give more accurate prediction but takes an additional cycle. +Olympia's Branch Prediction API expects the implementation of Branch Predictor to specify its implementation of a +prediction input, prediction output, and the update input. -[[Counters]] -=== Counters - -** `pred_req_num` - Total number of prediction requests made to BPU -** `num_mispred` - Total number of mis-predictions -** `mispred_perc` - Percentage of mis-predictions -** `branch_req_num` - Total number of prediction requests made which are conditional branch instructions. -** `call_req_num` - Total number of prediction requests made which are call/jump type. -** `return_req_num` - Total number of prediction requests made which are return type. -** `pht_req_num` - Total number of requests made to PHT. -** `pht_hit_num` - Total number of times when requested index is hit on PHT. -** `pht_miss_rate` - Total number of times when requested index is miss on PHT. -** `pht_mispred_perc` - Percentage of times when PHT mispredicted. -** `btb_req_num` - Total number of requests made to BTB. -** `btb_hit_rate` - Total number of times when requested index is hit on BTB. -** `btb_miss_rate` - Total number of times when requested index is miss on BTB. -** `ras_high_mark` - Highest size of RAS during an execution cycle. -** `ras_low_mark` - Lowest size of RAS during an execution cycle. - -[[Unit_Block_Diagram]] -=== Unit Block Diagram - -image:media/bpu_uarch.png[image,width=800,height=366] - -Figure 1 - Unit block diagram of BPU - -[[Block_Diagram_Description]] -=== Block Diagram Description - -BPU consists of a BasePredictor, a TAGE_SC_L-Predictor, and an FTQ (a -queue) which stores the information of all in-flight branch instructions -and is required in order to update the state of BPU once instruction are finally -committed, it also enables multi-tier prediction by buffering the initial prediction -while BPU accesses its higher level of hierarchy. - -[[Description_of_PredictionRequest]] -== Description of PredictionRequest - -Olympia's Branch Prediction API expects the implementation of Branch Predictor to specify its implementation of a prediction input. +[[PredictionRequest]] +== PredictionRequest [[Overview_of_PredictionRequest]] === Overview -PredictionRequest is received by the BPU from the Fetch unit whenever a request for -the prediction is made. Based on the data provided by this input, BPU makes the -prediction. + +`PredictionRequest` is received by the BPU from the Fetch unit whenever a request for the prediction is made. Based on +the data provided by this input, BPU makes the prediction. [[Structure_of_PredictionRequest]] === Structure of PredictionRequest @@ -123,7 +84,9 @@ prediction. [[Class_Description]] === Class Description -==== Constructor - +`class PredictionRequest` + +==== Constructor `PredictionRequest(uin64_t PC, uint8_t instType) : PC_(PC), instType_(instType) {}` === Data members @@ -132,15 +95,12 @@ prediction. ** `uint64_t PC_` ** `uint8_t instType_` -[[Description_of_PredictionOutput]] -== Description of PredictionOutput - -Olympia's Branch Prediction API expects the implementation of Branch Predictor to specify its implementation of a prediction output. +[[PredictionOutput]] +== PredictionOutput [[Overview_of_PredictionOutput]] === Overview -PredictionOutput is the format in which predictions made by the BPU is sent out -to the Fetch unit. +PredictionOutput is the format in which predictions made by the BPU is sent out to the Fetch unit. [[Structure_of_PredictionOutput]] === Structure of PredictionOutput @@ -163,16 +123,13 @@ to the Fetch unit. ** `bool predDirection_` ** `uint64_t predPC_` -[[Description_of_UpdateInput]] -== Description of UpdateInput - -Olympia's Branch Prediction API expects the implementation of Branch Predictor to specify its implementation of an update input. +[[UpdateInput]] +== UpdateInput [[Overview_of_UpdateInput]] === Overview -Once the instructions are committed, UpdateInput is sent to the BPU in order to -update BPU's internal state in case of mis-prediction. +Once the instructions are committed in the pipeline, `UpdateInput` is sent to the BPU to update its internal state. [[Structure_of_UpdateInput]] === Structure of UpdateInput @@ -209,8 +166,53 @@ correctedDirection_(correctedDirection), correctedTargetPC_(correctedTargetPC) { This section describes the overview and description for the top level class which bolts the Branch Prediction Unit into the Olympia simulator. +[[Functional_Description]] +=== Functional Description + +The proposed Branch Prediction Unit (BPU) is a two-tiered branch predictor where the +first tier(BasePredictor) provides a simple but fast prediction, whereas the second tier(TAGE_SC_L) +can give more accurate prediction but takes an additional cycle. + +[[Counters]] +=== Counters + +** `pred_req_num` - Total number of prediction requests made to BPU +** `num_mispred` - Total number of mis-predictions +** `mispred_perc` - Percentage of mis-predictions +** `branch_req_num` - Total number of prediction requests made which are conditional branch instructions. +** `call_req_num` - Total number of prediction requests made which are call/jump type. +** `return_req_num` - Total number of prediction requests made which are return type. +** `pht_req_num` - Total number of requests made to PHT. +** `pht_hit_num` - Total number of times when requested index is hit on PHT. +** `pht_miss_rate` - Total number of times when requested index is miss on PHT. +** `pht_mispred_perc` - Percentage of times when PHT mispredicted. +** `btb_req_num` - Total number of requests made to BTB. +** `btb_hit_rate` - Total number of times when requested index is hit on BTB. +** `btb_miss_rate` - Total number of times when requested index is miss on BTB. +** `ras_high_mark` - Highest size of RAS during an execution cycle. +** `ras_low_mark` - Lowest size of RAS during an execution cycle. + +[[Unit_Block_Diagram]] +=== Unit Block Diagram + +image:media/bpu_uarch.png[image,width=800,height=366] + +Figure 1 - Unit block diagram of BPU + +[[Block_Diagram_Description]] +=== Block Diagram Description + +BPU consists of a BasePredictor, a TAGE_SC_L Predictor, and an FTQ (a +queue) which stores the information of all in-flight branch instructions +and is required in order to update the state of BPU once instruction are finally +committed, it also enables multi-tier prediction by buffering the initial prediction +while BPU accesses its higher level of hierarchy. + +[[Ports_of_BPU]] +=== Ports of BPU + [[Input_Ports_BPU]] -=== Input Ports in BPU +==== Input Ports in BPU ** `in_fetch_prediction_request` - To receive `PredictionRequest` from Fetch unit. @@ -220,7 +222,7 @@ which bolts the Branch Prediction Unit into the Olympia simulator. branch, UpdateInput is used to update the internal state of BPU. [[Output_Ports_BPU]] -=== Output Ports in BPU +==== Output Ports in BPU ** `out_fetch_prediction_request_credits` - To send credits to Fetch unit to indicate availability of slots in BPU to receive `PredictionRequest`. @@ -537,16 +539,19 @@ PHT and RAS. === Class description -`class Tage_SC_L` +`class TAGE_SC_L` ==== Constructor -`Tage_SC_L()` +`TAGE_SC_L()` === Data members ==== Public members ==== Private members +* `TAGE tage_` +* `StatisticalCorrector statisticalCorrector_` +* `LoopPredictor loopPredictor_` === Functions list