to today's lecture, which will continue our discussion on branch prediction. In the last lecture, I have introduced to you the basic concepts of branch prediction and three different schemes have been introduced that is one-bit branch predictor buffer, two-bit branch predictor buffer, then correlating branch predictor buffer and today I shall introduce to you the other techniques related to branch prediction like tournament branch predictor, then branch target buffer, integrated instruction fetch units and return address predictors. So, these are the topics I shall cover in today's lecture and let us have a very quick recap of the different schemes that I discussed in the last lecture. This is the simple one-bit branch predictor and this is accessed early in the pipeline using the branch instruction PC that means in the instruction fetch cycles, then that branch PC is used to index particularly the lower order bit is used to index a buffer where one bit is stored and that is the prediction it can be taken or not taken. So, if the prediction is right or wrong depending on that it is modified, so if it is 0 then it is not taken, if it is 1 then it is taken, so if the prediction turns out to be wrong then actual outcome is written into this buffer. So, this is how one-bit predictor works and we have seen one-bit predictor does not give you very good performance, so a two-bit branch predictor was introduced where instead of one bit two bits are stored and the two bits represent 0 0 corresponds to not taken 0 1 not taken that means whenever the value is half or more then it is taken that means 1 0 and 1 1 corresponds to taken and if this is the prediction and depending on the outcome you know the modification is done in the branch target buffer and for example, if the present state is it can be described as a finite state machine and so it can be represented with the help of a next state table. So, here you can see this is the previous state that corresponds to the prediction 0 0 0 1 1 0 and 1 1 if the next if the outcome is not taken then this is how it is modified and it is written into the branch target buffer, so if it is not taken if it was 0 0 it remains 0 0 if it is 0 0 1 it remains 0 0 and if it is 1 0 then it becomes 0 1 and if it is 1 1 and if the it was not taken it is 1 0, so that means if it is not taken as you can see it is dictimated on the other hand if it is taken then it is incremented if it was 0 it is incremented to 0 1 if it was 0 1 it is incremented to 1 0 and whenever it was 1 0 it becomes 1 1 and if it is 1 1 it remains 1 1 because it is a we are realizing a saturating counter. So, the actual outcome is again stored in this 2 bit branch predictor and essentially what is done by this 2 bit branch predictor it adds hysteresis to the decision making process that means unless 2 predictions are right or wrong the prediction bit is not modified. So, this is how this 2 bit branch predictor works then coming to the third type that is your correlating branch predictor basic idea is that how can we capture the behavior of the last n branches and adjust the behavior of the current branch accordingly. So, in the 1 bit branch predictor and 2 bit branch predictor what is being done it tries to identify what happened for the current branch it does not concern about the other branches that is present in the program, but in correlating branch predictor it is a kind of it takes into account a global scenario. So, what happens to the other branches that is taken care of in this correlating branch predictor as I have introduced in the last lecture and how it is being done the answer is use an n bit shift register and shift the behavior of each branch to this register as they become known. So, the previous n branches may not be the branch under consideration it may be other branches their outcome is stored in a shift register and this is being used and question naturally arises how many possible values will our shift register have. So, the number of bits will again decide the number of possible outcomes you would like to consider for example, if it is 3 bits then there will be 2 to the power 3 8 possible outcomes you have to choose one out of 8 tables. That means, imagine that many tables and there are many tables and you have to select one of the table on the basis of this shift register value and decide it and as we have seen I have discussed it with the help of this diagram how this correlating branch predictor works here 2 bits of global history that is being used and that selects one of the 4 possible tables and where the prediction values 2 bit prediction value is stored and that can be used for the purpose of prediction. So, this is the correlating branch predictor and in general we can have m n predictor use predictor which uses the behavior of the last m branches and obviously total number can be 2 to the power m and then with the help of the lower order bit address branch address it selects n bit predictor and that is being used for the purpose of prediction. So, this is the recap of correlating branch predictor and one popular correlating predictor is known as GCR correlating predictor. In this GCR correlating predictor as you can see how the global history is being incorporated for the purpose of prediction. So, here the branch PC lower order bits of the branch PC is exorbitant with the global history and then that is used for the purpose of indexing in the branch history table and that is being used for the purpose of prediction. So, this is how GCR correlating predictor works. Now, we shall focus on tournament predictors this is based on the observation that performance is improved by adding global information based on the observation that performance is improved by adding global information tournament predictor takes a step further. We have seen in correlating predictor we are considering we are combining local and global predictions and trying to come up with a prediction. So, we have seen that this correlating predictors perform very well and can we really goes a step further here is the that is the basic idea behind tournament predictor. What is being done? It uses multiple predictors one based on global information and the other based on local information. So, for simplicity you can have only two predictor one based on local information local information in this particular branch whether it was taken or not taken earlier and global information means other loops other branches whether they were taken or not taken that information is used. So, this is the difference between local and global. Now, you can have two predictors one local and one global you have to select one of the two predictors for the purpose of prediction that is the basic idea of the tournament predictor. So, it adaptively combines local and global predictors with the help of selectors and obviously, it does dynamically with the help of hardware because at run time for a particular branch at a particular instant it can be taken and at some other instant it can be not taken. So, it dynamically changes so adaptively combines and selects one of the predictors at run time. So, this is the most popular among the multiple branch predictors later on we shall have a look at the contemporary processors and we shall see how this tournament predictor is being used in different recent processors. So, this tournament predictors ability to select right predictor for the right branch that means you may have many branches. So, it identifies which predictor will give you good result. So, it identifies right predictor for the right branch and that is the basic approach that is being used in tournament predictor. So, let me explain this tournament predictor let us assume we have got two predictors one and predictor two and there are four states say here it is use predictor one and another is here also use predict one predictor one predictor one and here it is use predictor two and you have got four states predictor two. Now, how it reaches from one predictor to another so what is being done let us assume it is in the state in this state use predictor one. Now, you have got two predictors predictor one and predictor two. Now, if both of them turns out to be zero that means both turns out to be wrong then it remains in the same state. So, if it is if the outcome is zero zero that means both the predictors turns out to be wrong then it remains in this particular state and say predictor one turns out to be right and then the predictor two is wrong then it since it predictor one has remained true. So, it remains in this state again for zero one one zero and if it is one one I mean if it is zero one then it will switch from this to this if it is zero one then it will go from this state to another state and this kind of I mean this predictor one if it fails twice then means if it is zero one and again zero one and predictor two becomes right in this case that means if it is zero one again then it goes to predictor two that means that predictor one has to fail twice and predictor two has to become true twice only then it will go from predictor one to predictor two. So, this is the boundary between predictor one and predictor two so it will go from here to here. So, for all these states zero zero one zero and one one it will remain in this state and only when it is zero one that means predictor one has turned out to be wrong and predictor two has turned out to be right it will go from this state to another state and it will remain in this state again as long as both of them are false both of them both the predictions are false or both the predictions are right and only when it is only when the other way happens that means if it is one zero then again it will go back to this state that means if this predictor one is right and predictor two is wrong it moves in that direction so it will go from here to here and whenever it is zero one it will go from predictor one to predictor two. Similarly, here it will remain in this state or let us consider this one first so whenever you are using predictor two and I mean let us assume that you are in this state predictor two state predictor two is being used and if it is zero zero again it will remain in this state if it is one one it will remain in this state as we have seen that is true for all the cases zero zero that means both the predictors are wrong or both the predictors are right so in both the cases it will remain in the same state the state does not change. Now it will move in the direction of predictor two and it will remain in this state as long as this predictor two is correct and predictor one is wrong so it will remain in this particular condition as long as this is true and it will come from this state to this state whenever it is one zero that means predictor one is right and predictor two is wrong so it will come here and again if the same condition holds that means predictor one is right and predictor two is wrong if it happens twice it will go to predictor one that means predictor two if it fails twice then it will go to predictor one and on the other hand here it will go from this to this if it is zero one so from this state to this state it will go that means you are moving in the direction of predictor two if predictor one has failed twice and predictor two has turned out to be correct and on the other hand it will go to predictor one if it turns out to be true twice and predictor two fails twice. So this is the state transition diagram for this tournament predictor and so basic idea is the counter is incremented whenever the predicted predictor is correct and the other predictor is incorrect and it is decremented if the reverse is situation. So based on this the tournament predictor prediction works and you can see here only two predictors have been shown it is not necessary that you can have only two predictors. So for the sake of simplicity to illustrate the operation of tournament predictor we have considered two predictors but there can be more than two predictors in real processors as we shall see later. Particularly later on we shall see that deck alpha processor where this tournament predictor has been used and of course with much more complexity that we shall discuss later. Now this particular diagram shows fraction of the predictions coming from local predictor. So we have seen that earlier either the predictor one can be used or predictor two can be used and here this particular diagram shows for different benchmarks whether predictor one has been used that is the local predictor has been used or global predictor has been used. So as you can see the tournament predictor selects between a local predictor two-bit predictor and a two-bit GCR predictor that GCR predictor which I have already discussed earlier which is a correlating predictor which uses global information for the purpose of prediction and each predictor has 1024 entries each of two bits for the for a total of 64 kilo bits of information. Now here you can see the local predictor is used different percentage of times for different applications. So it is very much application dependent for example it can vary from 100 percent to 33 percent that means local predictor has been used 100 percent for some application and in some cases only 37 percent of the time the local predictor has been used and for the remaining part of the time the global predictor has been used. So this simulation shows how the tournament predictor works and the variation of the use of different predictors. So this is a simple case of two predictors but in real life as I told there can be more predictors and these are the different application programs which I have already mentioned earlier. So faction of predictions by local predictor is shown in this diagram and the remaining percentage corresponds to global predictor. Now this is the performance comparison of different types of predictors. We can broadly categorize the predictors into three types local based on purely based on local information and we have seen two bit predictor gives you better result. So local two bit predictor another is which uses both local and global information that is known as correlating predictor and third category is tournament predictor. So here as you can see for different predictor size how the performance changes for different predictors. So this is based on the misprediction rate of spec 89 as the total number of bits is increased. So as the total number of bits is increased how the number of misprediction changes. Obviously as you increase the number of bits the performance would improve that means misprediction rate should reduce but for one bit predictor as you can see the reduction is not really much. So it from little more than 7 to little less than 7 that is the decrease and there is no improvement even if you increase the size of the branch prediction buffer. So even by increasing the size of the branch prediction buffer there is no improvement in performance for local two bit prediction as you can see here. Then for correlating predictors which uses both local and global information and you can see starting from 5 percent it decreases to little less than 4 percent for spec 89 programs and you can get a pretty quite little relatively good performance misprediction rate is only is less than 4 percent that is for the correlating predictor and actually it has used that GCR predictor for this purpose and third is and here what has been done optimal correlating predictor has been chosen at each point. So optimal correlating predictor has been used for plotting this diagram and the last curve where the misprediction rate is less than 3 percent for the tournament predictors which I have just discussed in detail. So for the tournament predictor you get very good performance and you can see you can get a performance I mean less than 2 percent that means for more than 98 percent of the cases prediction is correct. So it will definitely give you good improvement in processor performance. Now, coming to another very important need that is your important requirement for good performance of processors that is branch target proper. So far we have focused on branch prediction buffer. So outcome of the predictions are stored in the buffer and which is used dynamically in different predictors. Now let us see why do we need branch target buffer on top of branch prediction buffer. So in the classic five stage pipeline an instruction is identified as a branch only in the id stage and branch prediction buffer can help decide whether to fetch from target address as you have already seen or from fall through. So however instruction fetch still ends up fetching a possibly useless instruction that means whenever you are using only the branch prediction buffer then what happens that is being given here. So even when prediction perfect branch prediction it cannot achieve zero cycle branch latency. The reason for that is you know that calculation of the address that will be taken place is done either in the execution stage usually it is done in the execution stage or in a later stage. So even if your prediction is correct taken or untaken where the branch will take place is not known in the second cycle. So it is necessary to have branch target buffer the solution is to have branch target buffer and this branch target buffer which is accessed during the instruction fetch cycle. So a cache that stores predicted address for the next instruction after a branch. So you can use a branch target buffer which will store the information of the target address in a cache memory and that will be used for the purpose of jumping to a particular address.  Of course if your prediction is untaken then no problem it is PC plus 4 but when your prediction is taken then that branches has to be known and that branches is calculated if the address is PC relative we have already seen that in most of our I mean the example that you have given that is for the instruction set of the simple MIPS pipeline they are you know PC relative address is being used. So in the PC relative branch case what is being done that content of the program counter is added with the displacement or offset that is being added to get to find out the effective address. And this effective address calculation can be done in the instruction decode stage or in the instruction execution stage depending on whether we are having additional hardware or not. If we do not have any additional hardware or adder it is done in the execution stage and if we use a special adder for the purpose of calculating the effective address then it is done in the instruction decode stage. So either in the execution stage or in the instruction decode stage if the calculation is done that means you have to wait till the end of either the instruction decode stage or the end of the execution stage to get the branch address and obviously it will lead to it cannot achieve zero cycle branch latency. So there will be a delay of either one cycle or two cycles depending on whether when the branch address is calculated. And now there are some variants you can store only the predicted taken branches. So branch may be taken or not taken it is not really necessary to store the address of the I mean when the branch is not taken because in that case your address is already known that is your PC plus 4 but only when branch is taken then you have to calculate this way if you use PC relative addressing which is used in the context of branch addresses. And this works well for one bit local predictor and store entry when changing the prediction of T that means when the prediction changes then this that address has to be changed only taken branches information is stored in the branch target buffer and use separate target and prediction buffer. So you can use two separate buffers one where you will store the branch predictions and another where you will store the branch target buffer that means where it will jump and this is done in this way. So branch target buffer address of the branch index to get the prediction and branch address you must note that must check for branch match now since cannot use wrong branch address. So earlier that branch target buffer that was used without any tag but in case of branch target buffer we have to use tag which is conventionally used in cache memories as we shall see this is very important because for the branch target buffer must check the branch match now since it cannot use wrong branch address. So this is how it is being done. So you can see the cache memory is in this case is storing not only predicted address that is the predicted program counter address but it is also storing the branch PC as part of the cache memory. So after you get the PC value of the instruction fetch after you have fetched instruction and you know the branch PC then that is being compared with the branch address that means this branch PC. So it is done in a conventional manner and it is known as content addressable memory. So what is being done you are essentially comparing with a value and then you are using this address and correspondingly you are getting this value. So this is the cache memory used in this manner and if there is a no match branch not predicted so proceed normally. So you will go for PC plus 4 so if there is no match with this value. So what you are doing you are in content addressable memory you know the content is compared with this address that is being done here. So here also you are trying to match a content with the PC of the instruction fetch and if there is no match then the content is not present here and branch is not predicted proceed normally. On the other hand if there is a matching with any one of the contents that is being present here that means in your branch target buffer that target buffer the PC values which are stored program counter values which are stored if there is a match with any one of them then there is a match and you say that yes instruction is branch and use the predicted PC as the next PC. That means corresponding for the corresponding program counter value you will get a predicted PC where the branch should target branch should take place. So here you get this predicted PC and that can be used for the purpose of fetching instructions immediately. So you can see using this you can have zero delay the reason for that you are getting the information whether the prediction is taking place or not you are getting the information where the branch should take place if it is taken. So in the next cycle itself that means in the after the instruction fetch has been done in the next cycle itself you can fetch the instruction from the target address and its execution can proceed. So delay is zero delay it can work with zero delay. So the prediction and address at the same time that is the basic idea of using branch target buffer. So branch target buffer contents prediction for the target address can be used along with the separate branch prediction buffer and at the end of instruction fetch stage we know whether a branch should be taken and if yes and if the target address is known then we can have zero cycle penalty for branches as I have elaborated in detail. Now let us come to some intricacies of this branch target buffer. So target address to be stored in the BTP. So will you store only the predicted taken branches if it is not taken then what will happen? If the prediction is not taken we know it is PC plus 4. So it is not necessary to store the target address when the prediction is not correct and can the branch prediction buffer and branch target buffer be combined. So this can we use here we are trying to tell can we use a single buffer to store the prediction as well as to store the branch target address. This can be used very conveniently if it is a single bit one bit prediction. However whenever we go for two bit predictor then it leads to some problem complication arises. Why complication arises? We have seen in a two bit predictor 00, 01, 10, 11 predict untaken predict untaken that means for that entry and again 01 predict untaken predict taken. So what you have to do this will require that target address for branch untaken would also have to be stored. That means whenever we are using two bit predictor it is not only necessary to store the information of only the branch taken addresses but also you have to store the addresses of branch untaken addresses. That is the complication that arises whenever you go for a combined branch prediction buffer and branch target buffer in the case of two bit predictor. And in many commercial processors like PowerPC separate branch target buffer and branch prediction buffers have been used to avoid this complication. And invariably we will see the branch target buffer is not a single bit always two bit is used and that is the reason why two separate buffers are used one for branch target buffer and one for branch prediction buffer. Now here how we can combine branch target and branch prediction buffer is illustrated with the help of this flow chart. And how the pipeline behaves whenever you have got branch target and branch prediction buffers. And we have assumed that instruction phase which only have branch target buffer and ID is responsible for prediction and instruction decode stage is responsible for the purpose of prediction. So here the first step is send program counter to the memory and branch target buffer. So the program counter value is sent to both in the instruction cycle it is sent PC to memory as well as branch target buffer. So it is branch target buffer and after sending that whether you have to check whether entry is found in the branch target buffer or not. We have seen there is a if we go back you have to check whether that entry is present in the branch target buffer or not. So that is being done by this in this step itself entry found in the branch target buffer. If the entry is found in the branch target buffer then question arises whether there are two possibilities branch may be taken or not taken. If the instruction is taken instruction a taken branch if the answer is no normal instruction execution. Normal instruction execution means the program counter will be that address will be fetched I mean instruction will be fetched from PC plus 4 for the MIPS pipeline that we have discussed. So that is the case and you can do it in the ID stage. Now if the instruction is the instruction taken branch if the answer is yes that means your prediction is branch is taken in such a case what will happen enter branch instruction address and next PC into branch target buffer. So in this case you have to enter your information in the enter branch instruction address and next PC into the branch target buffer if your prediction is taken and that we will do in the execution stage. Now let us see whenever entry is in the previous case entry was not found in the branch target buffer and that is why you have to go up to the execution stage and there will be a delay of you can see you are losing two cycles in this case. So you cannot fetch instruction in this stage you cannot fetch instruction in this case. So there is a loss of two cycles in this particular case. Similarly, let us see consider the case where the entry is found in the branch target buffer. So if the entry is found in the branch target buffer you can send out the predicted PC and if there are two possibilities again branch may be taken or not taken. If the branch is taken then branch correctly predicted and continue execution with no stalls. So in this case there will be no stalls and you can go ahead with your predicted address. Now if your outcome turns out to be wrong in this case also there is no loss of clock cycles but whenever your prediction turns out to be wrong in cases then you have to your prediction is wrong so mispredicted branch.  We have seen only the address of the taken branches are stored in the branch target buffer. So when it is untaken you have to remove that particular entry and not only that you have to undo the instructions which have been fetched and you have to fetch from the next from another address and as a consequence here also you will lose two cycles. So in this case you will lose two cycles. So in two cases you are losing two cycles and in two cases you are not losing any cycle. So current processors combine target and prediction logic into a separate instruction fetch unit and operates independently of the pipeline and there is a special variant stored decoded later on I shall discuss about it this variant. So I was mentioning about the I mean when there will be penalty of two cycles and when there is no penalty that is being given here assuming a new target is written into PC only at the end of execution cycle. So instruction in buffer whenever it is yes and prediction is taken and actually is taken there is no penalty and your prediction was taken but actually not taken even there will be loss of two cycles as I have already explained and if the instruction is not in the buffer then if your prediction is not taken but actually it is taken then again you will lose two cycles and that means in this case you will lose two cycles but if you are actually if it is prediction is not taken then again there is no loss in cycles because it was not taken so you will not lose any cycles. So this is how the branch target buffer works and we can have losses in two cases and no loss in two cycles that means we can say zero latency. Now there is another requirement particularly for unconditional cases return address predictor you know techniques discussed so far work only with direct branches that means you have got direct branches and address calculation is done with the help of that PC relative and then branch is taken or not taken but there are many indirect branches whose outcome is known whether it will be taken or not taken at execution time so where you know that target is not PC relative in such a case an important category of indirect jump is returns you know you will find you are doing subroutine calls say here you have got a main program and you may be calling a subroutine and so it will jump to a subroutine and here you will have a return so you will be returning to this point in this particular case but this subroutine this subroutine may be called not by one main program this is a main one and another program say main two another main program is again calling subroutine say this same subroutine so in this case it will go here but you have to return not there but to this point so we find that this particular situation we find that for the same subroutine that return address has to return to different addresses if this particular subroutine is called by different main programs or from multiple places so in this type of return instructions you will encounter in many situations for example more than 15% of the branches in spec 89 and particularly in object oriented languages like C++ and Java this type of you know unconditional branches are present in many places so in such cases you know that the techniques that we have discussed will not work properly so can we predict the return address so in this case what you have to do you have to predict the return address just like you are predicting the with the help of a bunch target buffer you are predicting where the branch will take place here you have to predict where the return will take place so there are two possible alternative or two possible options one is use branch target buffer so if we use simple branch target buffer to store the return address what will be the outcome accuracy tends to be low the reason for that I have already explained say the return address cannot be same cannot be stored for you will not correspond to a particular branch PC that means it can be it can be dependent on which particular program is calling this subroutine and return has to take place to different points so return address depends on the call site so call site can be different for different instances of the call of a single subroutine so what is the alternative alternative is to use a return address stack so this is how the problem can be overcome so with the help of this return address stack you can push an entry to the return address stack at a call and pop the entry upon return so this is how you can resolve this problem so in addition to branch prediction branch target buffer you will require a return address stack so this the perfect prediction if call depth does not exceed the return address stack buffer size of course one thing you have to keep in your mind a stack will have limited size as long as the there is no stack overflow your prediction will be that prediction of the return address will be always correct only when there is stack overflow you will not get correct branch prediction so as long as your I mean that stack depth is enough you will get perfect prediction but if there is stack overflow then of course it will not give correct result let us see what is the simulation results on misprediction rates for different sizes of return address carried out on spec CPU 95 benchmarks so we find that as the number of entries in the return address stack is increased the misprediction rate falls significantly so we find that for different benchmark programs the misprediction rate falls sharply as the number of entries in the return stack is increased but you can see you do not really require a very large stack size only by using a stack of 16 entries your misprediction rate is significantly lower except for I mean except for one brand one particular application program that is your Li for this particular benchmark it is not 100% prediction I mean prediction is misprediction rate is 0 for all other application except for only one application program that is your Li where the misprediction rate is about 2.5% even with this return stack size 16 entry if you increase the size of the return stack for this application also it may become 0 but this particular simulation result clearly demonstrates the usefulness of the return stack and the size need not be very high that is also clear from this particular simulation results. Now the last topic related to this is known as branch folding branch folding can be considered as a variation of the techniques that we have discussed here what we have done so far we are in a branch prediction buffer we are storing the predictions 1 bit or 2 bits in branch target buffer you are storing the target addresses and then from the target address you have to fetch the instruction instead of that why not store the instruction itself instead of storing the branch target address why not store the instruction itself and that is the basic idea of this branch folding to store one or more target instructions instead of or in addition to the predicted target address the advantage is it allows a larger branch target buffer and it allows us to perform an optimization called branch folding so essentially branch folding this particular technique is known as branch folding because it allows unconditional branches and can run in zero cycles that means normally unconditional branches do not run with zero cycles but using this branch folding technique even this unconditional branches will run with penalty of zero cycles. How it is done when the branch target buffer signals a hit and indicates that branch is unconditional the pipeline can simply substitute the instruction in the branch target buffer for the branch instruction so in this case this is how we are able to achieve zero cycle I mean penalty for unconditional branches so this is known as branch folding. Now let us consider how different types of predictors have been used in different processors first we shall consider the case of Pentium processors you can see the Pentium 2 bit local predictor direct jump from 0 0 to 1 1 state so simple 2 bit predictor is being used but there is some difference with the predictor that we have discussed that saturating counter predictor here from 0 0 to 1 1 jump is taking place. So it is little different from the saturating counter 2 bit predictor that we have discussed then for Pentium MMX Pentium Pro and Celeron Pentium 2 Celeron and Pentium 2 they use 4,2 correlating predictor that correlating predictor where you have got global and local predictors so that means there are 4 global predictor and 2 bit predictor has been used so you can have 2 to the power 4 different tables you can say out of 2 to the power 4 16 different tables you have to take one of them from the using the lower order bits of the address and then the 2 bits is being used for the purpose of prediction. And Pentium 3 uses two level adaptive tournament predictor but unfortunately the details given for Pentium 3 is very sketchy and so far as the branch target buffer is concerned it uses 512 entry branch target buffer. On the other hand Pentium 4 uses 4096 entry branch target buffer and it also uses execution trace cache later on I shall discuss about it so far we have not discussed about this execution trace cache later on when we shall discuss about cache memories I shall discuss about it. Coming to the predictor in deck alpha 2 1 2 6 4 deck alpha chip where the predictor is the most sophisticated one which has used tournament predictor as we have seen a tournament predictor requires 3 components selector global predictor and local predictor so and the selector will select between select either local predictor or global predictor so 3 components are there. So, the selector is it uses a 4 k 2 bit counters indexed by the local branch address to select between local and global predictor as it is shown in this particular diagram. So, this is the selector global history which is being used choice predicts so this is a selector that is being used for the purpose of prediction then you have got global predictor you have got 4 k entries indexed by the history of the last 12 branches each entry is a 2 bit predictor. So, global predictor uses 4 k entries in the global predictor and each entries 2 bit predictor and 12 comma 2 4 k means you require 12 bit 12 comma 2 correlating predictor is being used as the global predictor. So, as it is shown global predictor where you have got 4 k into 2 bit this is your global prediction using the global history of 12 bit that is being done so this is the global prediction this is the selection by using the global 12 bit global predictor and now let us come to the local predictor. So, local predictor itself is 2 level top level is 1 k 10 bit history of the local predictor branch outcomes. So, it detects the patterns pattern means you know 10 bit if it all are taken the bit sequence is 1 1 1 1 all 1 if it is alternative bit sequence is 1 0 1 0 1 0 and if it are all are untaken then it is all 0 that kind of sequences are taken that is the 10 bit history is used and history used to index a 1 k 3 bit saturating counter table and total of 29 k bit provides high accuracy in the branch prediction and this is the local history table as you can see this is the local history table then the 10 bit is used to look for the purpose of local prediction and 1 k into 3 bit. So, this local prediction either local prediction or global global global prediction is used and that is decided by the selector. So, it will use one of the two for the final prediction. So, this is the predictor used in decalpha chip and possibly the most sophisticated one used so far in different processors and in modern processor somewhat similar type of predictors are used. So, we can summarize now prediction is becoming important part of scalar execution. So, branch history table 2 bit for loop accuracy correlation recently correlated recently executed branches are correlated with next branch either different branches or different executions of the same branch and tournament predictor is used where which requires more resources to competitive solutions and pick between them and branch target buffer includes branch addresses and prediction and predicted execution can reduce number of branches and number of unpredicted branches and return at the stack for prediction of indirect jump that I have already discussed and here we can conclude branch prediction techniques achieve 80 to 95 percent accuracy and exact benefit varies based on the programs type size of buffer and it is crucial for current day processors because nowadays we are using super scalar architecture where multiple instructions are issued and so branch prediction is extremely essential because need to supply multiple instructions per cycle in the subsequent stages based on super scalar architecture and it can also reduce branch penalties by reducing misprediction penalties and fetch from both predicted and unpredicted branches and store buffer instructions from both paths in the BTB and later on we shall see extension supply of this idea is execution trace cache you may be asking how all these are possible the reason for that is we have seen that Moore's law has is providing us large number of transistors the dimension of the transistors is increasing you can put more and more transistors on a chip and that has helped us to use sophisticated branch predictors in the processors so with this we have come to the end of today's lecture thank you.


Before I get into this video, I just want to remind you that we have a kickoff giveaway for Prime Gaming Fest featuring a Hylian Shield replica, two Zelda Switch OLEDs, and two Zelda Collector's Edition, so five total winners. All you have to do is head down to the pinned comment or the description. Click on the link to enter. Prime Gaming Fest begins on June 8th. We'll have more details on this festival soon, but again, you can enter this giveaway right now. We're also on our road to 133,000 subscribers, so I'd appreciate if you would go ahead and hit that subscribe button, drop a like on this video, and let me know your favorite moment in Tears of the Kingdom so far down in the comments below. Now guys, I've been playing a lot of Tears of the Kingdom, right? Let's just not beat around the bush. Some of you guys are going to be much further than me. Some of you guys aren't. I didn't get to play at all yesterday, as an example, had a lot of family obligations, but here's the thing about Tears of the Kingdom that I want to talk about. I'm going to give some impressions here, because I realized we have a podcast coming up tomorrow at Noon Central featuring Kit and Krista from the Kit and Krista show and former Nintendo employees. We got Monster Maze coming on. We got Commonwealth Realm coming on. I started to realize with the amount of people Andres restart that we have coming on to talk about Zelda that I might not really get to talk that much. I'm going to kind of play host and keep in the conversation, moving and passing it around. So instead, I wanted to make a separate impressions video on this game. And this is not my review, because I don't feel like you should review a game if you haven't beaten it. And I haven't beaten this game. But there's one big impression I have. And I got to give RGT-85 some credit on this, because he brought it up. And it's something I've already been thinking. And it's something that he kind of labels are a problem, but a good problem. I look at it more as this is just something I've never seen. And I played a lot of open world games, right? I played The Witcher 3 to completion, including its DLC. I played, so far, I played a little bit of Elden Ring. I admit that's the one that I don't have the hours in yet. But I did play some Elden Ring. I played a ton of other open world games, open world MMO games like World of Warcraft and stuff like that. But what's really fun about this game is the sheer amount of stuff there is to do. People call this $70 DLC. I really didn't buy that it would be $70 DLC. They spent way too much time making this. I understood the concerns about being in the same world. But it really feels like every two minutes in this game, there is something new to do. And it's insane. Like, it distracts you from things. Like, the whole reason I haven't, quote, unquote, beaten the game and done all the dungeons and all this stuff is because I keep getting sidetracked. And I keep getting sidetracked with quests and with things in the world that are so much more in depth than Breath of the Wild ever was. Most of Breath of the Wild's quests were basically fetch quests, right? That's what a majority of those side quests were. Fetch me these materials. Thank you. Fetch me these materials. Thank you. And sure, there are a few fetch quests in this game so far that I have encountered. But to a much, let's just say they don't really bother me as much because of the variety in the quest, right? Like, there were so many of those in Breath of the Wild.  There is a lot. I'll give you just a few examples. I don't want to get too spoiler-y here. But Nintendo showed this out themselves so I could talk about it. You have your monster hunters out there, right? You have your, I forget exactly what they call the crew that runs out of the Pura camp. But there's this crew out there that's trying to clear out monsters from certain sectors of the world.  So it's really cool that you could tackle these things in multiple ways. But one of those ways is to tackle it with them and have them fight alongside you. And that is such a unique little side mission that's absolutely not required to do in any sense. It's a side quest, but you get to experience this multiple times throughout the game and it's not thrown at you so often that it ever feels old and every situation you find this quest in offers a unique thing, right? A unique ability. Now, there are other things as well, obviously, like the shrines, right? We all know the shrines. Some of those, some people out there are kind of like, oh, shrines, pain, pain. What a pain. And I hear you there, right? I hear the pain comments about shrines. But what's interesting is because we're using all new mechanics, the shrines don't actually feel that bad to me. Now, some of the shrines I've encountered are extremely long, significantly longer than any shrine I encountered in Breath of the Wild. But other shrines are still on the shorter variety, but offer really clever puzzles that your mind has to work differently to solve. And because of the new way in which we have to solve puzzles, which a majority of them deal with Masterhand, it's become to me quite brilliant in how Nintendo designed this game. So for me personally, I'm just super stoked about this whole concept in general of the shrines. I thought I would be bored with them. You know, at one point I got bored with them in Breath of the Wild, my first playthrough. And I'm not finding that happening here because Nintendo created some really clever shrines that you can obviously, you know, figure out in multiple different ways. And I'm actually having a pretty good time with the shrine, surprisingly. But that's just one little side thing, right?  Of course, you could drop some of your own materials, your own doughnut devices, but it's really fun and clever and interesting when these things come up because they sort of make sense. They're not things that like, oh, this person shouldn't be here. It was put here just for me to do something. Even like listening to their story and how they got into the hole, it all makes sense. It's super fleshed out. You have escort missions. You have a cash. I mean, there's the Korok seeds right now. I'm going to admit right now I'm not the biggest fan of the Korok seed quest in general, existing. Give me an example. You know, they use this one a lot. This is one that's become very repetitive where you have a Korok with a backpack who's trying to get to his friend. And this is a very popular Korok seed quest. There's a ton of these all throughout Hyrule. And like, I didn't mind it at first, but after a while, it does get old, having it repeated so much. I was hoping there'd be more variety and there is in some cases like up on the Great Sky Island. You might have encountered this one where there is a flower, but this isn't like your normal white flower that you would chase around in Breath of the Wild. Instead, it's one of those floating flowers. You hit it and it floats in the air. And I couldn't figure out what you're supposed to do. I supposed to shoot it with an arrow or, you know, just have it land in a certain location. And it turns out, you're supposed to chase after and catch it before it hits the ground and that's the Korok seed. And I find those Korok seed ones to be interesting. Like the new Korok seed puzzles, the first time you encounter them, including the backpack one is quite fun. It's just then after a while, you start to realize, oh, they've only added X amount of new ways Korok seeds work plus they have some of the old ways and it gets a little old. So, this is another thing, like I never really would 100% of the Koroks in Breath of the Wild and I don't think I'm gonna do that here, but it's still something to do, which kind of gets deeper and deeper into some of the other side quests. You'll randomly have someone like, oh, I dropped something down in the malice hole. There's a whole side mission going on with that down in the depths. And the depths itself has all this stuff going on. The enemy variety, like I'm finding, okay. So because this game uses fuse, right? And there isn't really elemental arrows or at least elemental weapons. I haven't found elemental arrows or weapons in this game. What I found are fused elemental arrows and weapons, which are really awesome. But because of this, you're constantly needing to gather materials all the time. Like you can't just skip by things. In fact, one of my scarcest resources in this game is money. I've only purchased a few things from a shop because I look like, well, I own kind of shop. Oh, here's some clothes. All the clothes is 500 rupees. I'm 20 plus hours in and I've only got 500 rupees because the only rupees I'm getting are from quests because I'm not selling anything because everything is useful. Maybe I can start selling to someone like the Bokeland teeth or something, but those are worth so little money that I'm not really gonna make much from it. The things that are actually worth money, let's say gems as an example. Gems are some of your best fuses, like fusing those through your weapons, fusing those through your bow. Like there's some of your best fuses. Why would you sell them? Like if you've got like 20, 30 of the rubies, you are like a God in this game and you don't wanna get rid of those. So I find it really fascinating how hard I mean, maybe there's a quest or a mini game somewhere because you guys remember Breath of the Wild, you can do like the snowball mini game and that was one way to make, once you get good at that mini game of course, to just make a ton of rupees. I haven't found a mini game like that in this world yet. Maybe there is one and I wouldn't be surprised if there was. Look, I'm not even getting into the story beats here because we're gonna keep this non-spoiler but this game just has so much to do. I'm a little overwhelmed at times at the amount of things there are to do but I'm overwhelmed in a good way because every time I boot up this game, I know I'll not be bored because there's always something to do and I didn't necessarily feel that way in Breath of the Wild. There was significantly less side quests in Breath of the Wild, significantly less things going on in the overall. I mean, even this guy who's running around trying to set up signs to advertise Hudson, I don't even know if he works for Hudson. I don't know if he's just trying to impress Hudson. I don't know what the hell's going on the whole president thing you think you have a grip on how to help him set up his signs and how to hold it up so he can lock it in place and then all of a sudden you'll meet one where the landscape is just slightly different so not different enough that you think it's a big deal and the whole way you've been holding up the signs doesn't work and next thing you know you're building this absolute monstrosity just to hold a sign up so he can nail it into the ground. It's so weird but it's fun. It's engaging, it's different. There isn't anything I truly dislike about this game so far. Like I've been trying to find flaws and besides the Korok seeds getting a little bit too repetitive which I mean, come on, the Korok seeds weren't that great in the first game if we're being completely honest I wish they would have found it a different way because there's so much in this game. In Breath of the Wild I felt like the Korok seeds existed because there wasn't as much going on in the world so you needed Korok seeds to add some sort of reward for getting to the tallest peak or getting inside this cave or doing this thing. Having a Korok seed there at least gave you a sense of okay, this wasn't entirely pointless to explore and visit this area but here's the thing, there's so much going on in this game and every nook and cranny and cave and all over the place that the Korok seeds aren't really needed. The Korok seeds aren't really needed in my opinion to help fill out content in this world I wish they would have done, they wanted to do some Korok seed quest, fine. Maybe have it where each Korok seed quest would have been a upgrade to your inventory. I would have been cool with that. Instead they've gone with a ton of, I have no idea how many Korok seeds there are. I wouldn't be surprised if there were like 2,000 in this game.  And then the way they handle the transition from the sky to Hyrule to the underworld it's all seamless, it's all just crazy and the underworld is like so deep down. Like it is way down there. The fact that the entirety of Hyrule basically has this, you know, chasm underneath all of it. It's just, this game guys, it makes Breath of the Wild look like a toy. That's maybe the biggest compliment I can give the tears of the kingdom is it makes Breath of the Wild look like a toy and also fixes a lot of the complaints in Breath of the Wild. Not all of it, but a lot. And we need to get used to this style of game because, well, according to Heiji Onuma, he said in an interview that Breath of the Wild was sort of their new template for games going forward in the way that Ocarina of Time was back in 1998. We're gonna get a lot more games like this. I don't know if it's gonna necessarily be this exact same art style, the same climbing mechanics and animations and all that. Maybe not, but it's going to be open world. They're not going away from open world Zelda anytime soon and I don't blame them. You know why I don't blame them?  Tears of the Kingdom is setting records right now. Breath of the Wild set a record for a Zelda game and there's no logical reason for them to go away from this other than the small minority of people whining and complaining and wanting to go back to a more linear game that's just jam-packed with nine, 10, 12 dungeons and have those dungeons be in a certain way. Could some of those dungeon elements come back in the future? Sure, but you combine the shrines with the dungeons in this game and I gotta say I'm pretty satisfied. You know, they fix a lot of things. Do we have unique boss fights in the dungeon? Yes, we have extremely unique boss fights. Do we have a lot more enemy variety in this game? Yes, the level of enemy variety. I haven't even touched on that. There's so many different enemies. Like, I am blown away. They're the variety. Like, guys, I don't know what Tears of the Kingdom is a perfect game. I do have some minor gripes, you know? Things like, I wish there were more enemies in the dungeons, right? But I will say that I am very impressed by what I have seen. I'm very impressed by what I've encountered. I'm very impressed by how much there is to do. Obviously, a more stable frame rate in some situations would be welcome, but I can almost overlook all that because I just, I got something else to worry about, man. Oh, the frame rate's chugging. I don't care, I still gotta get over to the spot over here and do this thing. I gotta collect some spirits over here. I'm not gonna say what they are because I don't wanna spoil people, but oh my gosh, guys, this is the game that, I mean, this is worth the wait. Six years, didn't know how this game was gonna deliver. It's delivered in spades. This may be for me, the perfect video game. And I don't mean perfect in every way. Again, I have criticisms, but those criticisms seem so small compared to everything going on. Everything seems to matter. The storytelling seems to matter. Again, don't wanna spoil anything, but it seems to really matter. The NPCs are not just blank slates. They all have personalities and lives and things going on. I'm just, guys, am I ever gonna stop playing this game? At this point, I don't know, probably someday, but I'm gonna be playing it for years because I don't know how it's possible to discover everything in this game, but sure be it, I will do it someday. Damn, I'm gonna put more hours in this and animal crossing new horizons. Man, anyways, guys, thank you so much for tuning in. Let me know your thoughts on Tuesday the game down below and I'll catch you in the next video.


I hope you're ready for this because I'm about to share with you the ultimate drugstore makeup starter kit. This is full of all kinds of makeup and I can't wait to show you what goodies are inside this bag. Hello my friends, I hope that you are all doing well. I am very happy to have you here today because not only am I going to show you how you can put together the perfect ultimate makeup starter kit if you're a beginner, but there are some amazing drugstore products in here. The cream of the crop is what I tried to choose. Things that really weren't very expensive and yet were really star performers. That's what I really wanted to achieve today, but not only am I excited about the content we have today, I'm also excited to be doing this in a collab for the first time on my channel with Jen Phelps. I am so happy to be teaming up with Jen because I've been watching Jen for years and years and especially over on Instagram. I found her from Instagram because she had the most amazing swatches comparing eyeshadows and she has an amazing collection of eyeshadows. She has so many palettes that she can go back to and reference and see if what's coming out now is even close to what we might have already in our stash which is so helpful for me because you can get repetitive over and over again. She just has this eye to be able to think, oh yeah that palette looked like that so she'll bring those together and show them to you. She also does weekly reviews of the things that she sees that are new and she'll swatch them for you and kind of give her a little bit of thoughts about how she feels about it. She does great content and she sticks a lot to drugstore. I know that a lot of you like very affordable makeup. She does reviews on indie brands. She's just amazing. I love her content. She does a great job. So as soon as this video is over, please go over and say hello to Jen. Make sure you leave her a comment telling her that I sent you over today and if you are here joining me from Jen's channel, I want to say a special welcome to you. Thank you so much for coming over to my channel. Please consider subscribing and don't forget to hit the little bell icon so that you can be notified of any future videos and everyone if you wouldn't mind giving me a thumbs up. That includes all my friends that have been with me for such a long time.  You are a part of my family and I hope that we get to add to that family. I am trying so hard right now to get to $100,000. I want that plaque. I'm just six years into YouTube and I really want that plaque. So I hope that I can achieve that very very soon. All right.  I realized that but I didn't want to buy a smaller bag just for this but I'll tell you what I'm going to do. I'm going to leave a link not only to this bag. It's on Amazon but also to a couple that are a little bit smaller if you're you know you don't carry around like 80 pounds of makeup like I do. But what I love about this bag is it is a two-tier bag and you can get a ton in here. It has so much organization and so many compartments and you can customize the compartments down here. You can divide them however you want to. So I think that that is just great. So let's start out with primer. Now I decided to go with the elf gripping power grip primer because I really have been enjoying this and as we're going into the summer months we're going to want budge-proof makeup. I feel like a gripping primer is something that really holds on to that foundation and can really give you that lasting power that you need. This is also kind of a smoothing primer. What you're going to want to do is when you use it you're going to want to really work it into your pores right around your area where you have the most pores and you're going to want to really take the time to just press that in and make sure that you get it. But for gripping and holding on to that as we get into the heat I think you're going to love this elf primer. So I wanted to give you some options for foundation. Now you don't necessarily have to get all these foundations. I would just choose one if you are starting out. What I have on today is the L'Oreal Infallible Pro Glow and I have rediscovered this. I put it in a hidden gem or shop my stash type video not long ago and this is gorgeous. It's just one of those ones that lays across your skin and if you have mature skin it's not going to show up texture and I have mine in 203 however this is kind of a little bit orange. It's very hard with L'Oreal. I feel like theirs go very very orange and it's hard to get the right color but I will show you how to take care of that in this kit too. Fantastic foundation.  Now I have very combo dry skin in the summertime and it works perfect for me. It's just one of those foundations that I feel like no matter what your skin type is this is a really really good one. However do keep in mind that this is a full coverage. It doesn't show up any texture and I really love this one as well. My color is 115 ivory in this one. Okay I said that the L'Oreal foundation is a very orange color on me but you can very easily take care of that by putting these two items in your kit. These are the LA Girl Pro Color Foundation Mixing Pigments. Now I have one in white which is obviously to lighten a too dark of a foundation but this one right here is blue and you would think why in the world would you ever put blue into your foundation. Well blue counteracts orange perfectly and so my cool skin cannot handle any sort of an orange foundation. So I just put some of this in there. I will show a clip of that of doing that and it immediately makes it my perfect color and then I'm pretty white so it's kind of sometimes hard to find one that is light enough so I will mix some of this into these are lifesavers and I do have a whole entire video about mixing foundations. So those will help you save your foundation anytime. I love those. I did choose today to put the Colourpop Pretty Fresh Hyaluronic Concealer in here. It is a medium coverage concealer but it has a very thin consistency and you can build it up if you need more. Like I will put just a tiny bit more after my first coat on the troughs that I have right here on my eyes. This is a very nice concealer. I like the doe foot. It's not too big. Some of those doe foots are huge but I like this one. This is a really great concealer that won't crease. You do have to just sit it down just a little bit. I have such crinkles under my eyes that if I don't set it with a little bit of powder I'm going to find that through the day it's going to settle into fine lines. That's all of my makeup not just this particular concealer. It's any concealer that I wear but this one is very long wearing and it does almost have a self-setting property to it. So you don't need a lot of powder as you're working with it. So I really like that one. I want to tell you about these sponges that I get. These are the Beaky sponges. You can get a package of five. You can get a package of 10. It's a little cheaper to get the package of 10 but I love these. These are every bit of soft as a beauty blender and they will plump up to double their size. They last and last and last but these are definitely at a drugstore price point so you can definitely pick those up and you know not break the bank with a beauty blender that's $20 whereas these are just a few dollars for several of them. Also I would put in my kit if it were me this sponge cover or the case that I have for my makeup sponges. What this does for me is it keeps the inside of my makeup case clean from any sort of foundation or products that you put on your beauty sponge and I just put it in there so that nothing gets wet or nothing gets damp inside my makeup case. This has really saved me a lot. Number seven Lift and Luminate pressed powder is my all-time favorite drugstore powder. It has been for years and it will continue to be. It is one that comes in several different colors and I think it might even come in a translucent. Don't quote me on that but it might. So also I want to share with you these puffs. These are what I actually have been using lately. I don't have any powder on this right now but you can use it to pick up if you have you know any settling that you might get around your nose and your chin. If you feel like you need to reapply powder during the day you can surely dip down into there and apply the powder. It's just great.  I really like that effect and then if I want to dust powder all over I will use the ELF. I think this is a precision pro brush. I'm not exactly sure what it's called but it's a very fluffy brush for powder and I wanted to include it in this video and this is what I use when I use my finishing powder. This is a little bit of a finishing slash highlight powder. This is the Physicians Formula Rose All Day Set and Glow. So you have two products in here. You have a balm like product that you can use to kind of make your face have that little bit of a dewy look to it. I don't use that very much but I love this other powder so much. It's got this gorgeous imprint on it anyway and the powder itself is just super light and it just gives a beautiful glow. I just dust this in the middle of my face. It gives a very ethereal look to your face. If you like the Milani Prep Set and Glow, this is really close to that. It might have just a tiny bit more glow but I really think that this particular color which I think is called Luminous Light, this one is probably as close a dupe as you can get to the Milani. So by this not that type thing. And the powder brush and it just makes it so easy to just dust really quickly over the middle of my face. When we're talking about a highlighter, I wanted to go with a creamy highlighter and I had forgotten how good these Wet n Wild Makeup Sticks are and this one is in the highlight color. It's what I have on today underneath my blush. It's really a good one. I hope that you're able to see this but it's pretty soft and that's what I like about it. It's not got this super high beam although you could build and build and it would really get to that point of being really a high beam product. And I use the Elf Small Stipple Brush to just tap on the top of it like this and then I'll go across like this. And I had this years and years ago. This came out a long time ago. I had it years ago and I forgot how much I like these sticks. Now for contour and bronzer, I actually just talked about this in a video very recently. This is the Essence Contouring Duo Palette and it has, if I can get the sucker open, it has two different colors in here. I actually in the wintertime I will swirl the colors together to make it this color a little bit lighter for me and then I just dust it all over where I want to get bronzed or a little bit of contour. This is a nice enough shade that I can use it for both. It is a little bit more on the bronzy side than I would normally wear if I were doing a separate contour and bronzer. But when you're just starting out or when you want something really quick, it's great to have a product that can do both. I had the Charlotte Tilbury Film Star as well. I picked this one up over that product all the time. I would much rather put this on my face than that one. I feel like I have to really build and build and build that one up. By the way, this one is for lighter skin and they have one that is for darker skin. And then that powder over there, if you want to use that as a setting powder, that is so creamy and lovely. This is a great product and at a great price point. By the way, this brush is a really great brush too. I will try to link one for you that is almost identical to it. This one I got from Crown Brush. Unfortunately, they are out of business now but this is a great brush and I found some dupes for it on Amazon. They're actually cheaper than this one was. The new setting mist that I found from ColourPop which is the No Filter setting mist. This doesn't have any alcohol in it and I really appreciate that about it because again, I have dry skin.  During the day, if I feel like I'm looking dry, I'll go ahead and spray this on again and it's like a boost of moisture on my face too. So this is a really great one as well. And then my recommendation for blush are the L'Oreal True Match Blushes. I really like this formula and we'll find out what this one is called right now. This one is called it's Five and Six Rosy Outlook. This one is the one I have on today. It's kind of a quite a bright pink. I feel like just about anybody can wear that. Maybe if you're super deep, you can't. They do have a lot of deeper colors in this one. And then this one is C34 Tender Rose and that's pretty as well. This one is really light so it's a little bit harder to be able to see that. I'm trying to build that up. But it's really pretty on your cheeks if you are somebody that is a little bit lighter. I really like that one. And like I said, there's lots of colors and there is the neutrals and the worms as well with these. So I love those as well. Switching over to eye products. Oh my goodness. I could not decide what I was going to do here. So I decided that I wasn't going to decide. I put ELF and the Essence Little Palettes in here. Both of these shadows, they feel like they're high and both kinds. And I love the ones from Essence because they are a little bit lighter in their pigment. And so building them up is easier. And if you have a very light skin tone, it's easier to build than have to try and blend out to where you have a decent look instead of everything looking so so dark. So this one right here is called Tope It Up. And then the next one is called I Like To Mov It, Mov It. So there's your purples. This is their new one that is called My Rose Will Go On. And that is your pinks. And then I have the Dancing Green. If you just bought four of these like what I have right here, you're getting six shadows in each. So you're getting 24 shadows at a price point of about $4 each. So 24 shadows for 16, that's better than any palette that you can buy. So yeah, you could customize which ones you actually like and want to use. So these are great. The other ones that I had to put in here are from ELF. These are the Bite Size shadows. You get four shadows in each of these. And I have, let me again get my glasses. I don't know why I don't find something to tie around my neck to have these babies on. Okay, the first one is Cream and Sugar. And Cream and Sugar is actually what I'm wearing today on my eyes. So I took this color right here at the top. I took it as a transition. Then I took this one just out in the corner to deepen and give the wing effect. And then I took this one right here on my lid on the inner part. And then I also took from Truffles. I took this gray color right here, kind of a shimmering gray. And I kind of put that all over my eyelid. And so that one is kind of a cool toned one. And then I have the Rose Water one, which is a very pretty roses. Just beautiful. And then I have a KAU. And I think this is just absolutely gorgeous as well. This blue right here is probably one of my favorite blues of all time. It has a purple blue look to it. I just think it's so pretty. So I have four of these with four shadows in each. And that would be 16 shadows. And these are $3 a piece. So for $12 you're getting 16 shadows and you're getting, whoops, let's turn that around. And you're getting really quality shadows. I just think that these are wonderful for anybody that is starting out. And if you haven't tried these before they're amazing. Now as far as eyeliner, a lot of times I will just go ahead and I'll put just a regular eyeshadow on the bottom of my eye to do my eyeliner. But if I was going to choose, I would choose to use either the Covergirl Exhibitionist or the Revlon Color Stay liners. Both of these are super durable liners. That's not a word that we use a lot in makeup, but they really last a long time on your eyes. And they've got great pigment to them. So the Revlon one has a ton of colors. Now the Exhibitionist doesn't have as many, but this green color is so gorgeous. I use that all the time. It is one of the most pretty colors. And I have heard people say, how do you sharpen that one? These, I just use a regular sharpener. As a matter of fact, I will show you that too. And I'll make that a part of the kit. This is just a Revlon sharpener that I've had forever. And it will sharpen that even though that this barrel right here is plastic. So don't shy away from those because you might have heard people say that they're hard to sharpen. They might be a little bit hard to sharpen, but not like impossible. These ones from Revlon, they are automatic. So you do have that. And then on the other side, you do have the little built-in sharpener. And you do have a smudger on that. So I really love the Revlon ones. And you could probably find every color you needed in the Revlon. I just really wanted to talk about the formula with the Exhibitionist because that green is just mesmerizing to me. It's so pretty. So I've been doing my eyebrows a little bit different lately. I will take a mascara, eyebrow mascara, eyebrow gel, whatever you want to call them. So this has a tiny, tiny little spoolie on it. By the way, this is the Essence Make Me Brow in Ashy Browns. And I love this. So I will take that spoolie. And the first thing I'll do is I'll take a spoolie like on the end of this one. And I'll just brush my hairs or brush my eyebrows up. And then I will put this product, the gel product in them and really fluff them up. And then I'll go in. This one is the Revlon, the Revlon Colorstay Brow Creator. So then I'll go in with a pencil like this. And again, this is just a very fine tip pencil. But what I love about this is not only does it have that, but it also has a built-in little stopper, spring-loaded stopper that you can get this little tiny bit of shadow. And if you need to fill in places, this is great for filling in the brows. So you get this color right there. And then let me show you a little line right there of the actual brow pencil right there. But these two products together, they're everything I need to do my brows. And I've been loving doing my brows like this. It's just so much more simple to start with the brow gel and then fill in with this. This is what I line my top lashes with or my top lash line. I like to do it very tight so that it does make a little bit of definition for those top lashes. And this one is the NYX Epic Ink Liner. I know that they have this in a waterproof formula and I know that they have it in the brown and the black. And this is just the brown one. I choose the brown one a lot because I enjoy having a softer look. And as you can see, it's really a lot softer. But you can see right here that if you need it to be a little bit darker, it can be a little bit darker too. So it's really lovely and I have it on all day. It doesn't go anywhere. And what I'm wearing on my lashes for mascara, I wanted to put something different that you could just go to Walmart and buy if you wanted to, the Maybelline Sky High. Now there are a lot of people that don't like this one because that wand is very bendy like that right there. Well, I actually find that to my advantage because many of you know I have a very shaky hand. I have a palsy in my hand and trimmer. And it is a disability that I have. And so being able to have that bend is a little bit easier than having a stiff one that I will poke myself with almost every time. It can be a little bit challenging to get used to it, but I really, this formula is just fantastic. It's a silicone brush. It's not a natural bristle brush. And then when you saw me do my eyes, you also saw this tape employed. This is just the Sephora Guide Makeup Tape. Elf has some, but it's not, it doesn't adhere as nicely. And I just find that this is indispensable for me to be able to have in my kit. So it's worth the splurge. All right, on go the glasses for the lips. First of all, one of my favorite liners. This is the color, not just the liner itself. This is an automatic liner. Once again, it does have a little bit of a sharpener there. Excuse me, I couldn't think of the name. This is in Gone Grey's from Maybelline and this is their color sensational liners. The reason that I love this is because I can pair it with any liner and it does give that shadow so you can draw outside the lip line and give a little bit bigger pout there. The one that I do have on today are the LA Girl Shockwave ones and this one is in Rosewood. And again, I love this one. This is not automatic. You are going to have to sharpen it yourself. I don't mind that, especially when I find a color that works so well. So I've got a very kind of a deepened rose here and then that kind of a mauve gray color that works so well on my skin tone because it just is a beautiful nude color. I can pair anything with it. I also couldn't decide on which one I wanted to do for Maybelline either. So I picked out my top five. This one is called Nude Lust. All of these, except for one, are going to be fairly creamy products. That one's called Nude Lust and I'm having a hard time finding places to put things so yeah. The next one is called Born With It. This is more of a balmy, very creamy pink color and I really like that one so it's a little bit lighter of a pink right there. And then the next one is called Warm Me Up. This is a neutral pink that just about any woman can wear. This is the one that I have just recommended to so many people when they didn't know what color to wear because it can go cool, it can go warm, whatever your coloring is. It's a beautiful color and then going into a little bit deeper is this one called Rose Embrace. It's a very deepened color that reminds me very much of the intense pillow talk from Charlotte Tilbury. It's just that deep medium neutral rose and then what I'm wearing today is Blushing Pout and this is like a bubblegum pink and that's a little bit more of a matte formula and you can get lots of different mattes and sheers and creams in this formula from Maybelline. I love them and then to top everything off let's talk about my favorite gloss at the drugstore which is the Melani. Keep it full. These are the Plumping Lip Glosses. I love these, they're fantastic. The first one that I have is called Moonlight. This is just one that I wear over just about any lippie that I'm going to do just because it just has just a tiny bit of a reflect in it. I like a little bit of that reflect, not glitter at all but just a little bit of that really beautiful sheen that goes into lip glosses at times. So that one's Moonlight and then I have Nude Shimmer which I love as well. This is more of a nude kind of a champagne color and that one's pretty as well. That one goes on top of just about any lipstick too for a nude look and then what I wore over top of Blushing Pout is this one right here and it's called Tropical Shine. This one is just so pretty. It gives a little tiny bit of a coral cast to it without overwhelming whatever you have on. So pretty. So there is that Tropical Shine. This is a cooling effect lip gloss but it's not super intense like Buxom's. I actually like it so much better than Buxom's. I think that's it for today. I thought it was a lot I know but I really wanted to bring you a very complete kit. That's why I wanted to call it the ultimate kit. So I hope that you did enjoy this today and if you did please give it a thumbs up and please don't forget to go over and show Jen all kinds of love. I know you're gonna fall in love with her. I love her. She's down to earth. She's amazing. She's just something special to watch and I think that you're gonna really love her. Don't forget to subscribe if you're not to help me get to that 100,000. I would really appreciate that. Hope you're all having a great day. I love you very much. Come right back in my next video and we'll meet together. We'll have all kinds of fun. Take care of yourselves until then and I'll see you soon. Goodbye my friend.


This data table comes from the USGS and it tells you how many earthquakes are given magnitude happen on average every year all over the world. So you can see that there are way fewer really big earthquakes than really small earthquakes and that's a good thing. I like to make a plot out of this data because I think it's more instructive to make a plot. Over here I've already drawn my axes. This is magnitude on the x axis and this is number of earthquakes on the y axis and you can see that I've made a log scale plot here. So this is 10, this is 100 million up here. Why don't we just plot this data from this table onto this and we'll see what it looks like. So how many earthquakes of 8 and higher are there? Well there's about one and that is right about here on my plot. For magnitude 7 it's about 15, that's about here. For magnitude 6 is 134, that's about here. Magnitude 5 is a little bit over 1,000. Magnitude 4 is a little bit over 10,000. Magnitude 3 is estimated to be a little over 130,000. Magnitude 2 is estimated to be a little over a million. Magnitude 1's and anything smaller aren't in this table but I bet we can just extrapolate, can't we? Because if we connect up all these points we have drawn a line.  Magnitude is a log scale so it actually is meaningful to have a magnitude 0. Alright, so we've drawn this line and when I was a kid in school I learned that the formula for a line is y equals mx plus b. So why don't we write this formula in terms of what we know about this plot, right? What's y? Well y is the number of earthquakes as a log scale, right? So it's actually log of the number. Slope is rise over run, right? So the rise is actually negative minus 1 unit on our plot and the run is plus 1 unit on our plot. So that's a slope of negative 1 and x is magnitude and the y-intercept is a little over 100 million. It's probably 130 million, right? That's how these numbers are going up so we could just guess on 30 million. So the log of the number of earthquakes equals negative 1 times the magnitude plus 130 million for the whole world for a year. Now, who cares, right? Why are we bothering to write this down? Well the reason is that in fact you will verify in your problem set that this slope is always negative 1 no matter what part of the world it is and no matter what the time scale is. The only thing that changes when you don't look at the whole world annually is that this y-intercept will change, right? Because if you look at say California there's fewer earthquakes in California than the whole world, right? But this line is basically always true. So if you want to predict how often a really big earthquake is going to happen then it's important to keep track of how many small ones happen because then you can draw this line and guess how often the big one is going to happen. That's what you're going to do in your problem set.