>>17041When you open a program, it is loaded into the memory. The CPU can only hold a small number of instructions in its own store, when it is done with them, it has to fetch instructions from memory. This is slow. The prefetcher tries to fetch the next instructions from memory before the CPU actually needs them so they are ready to be executed as soon as the CPU is ready. This speeds things up.
A branch is a decision point in the code. Based on some condition, different code will be executed. A branch predictor tries to predict what decision will be made. Based on this, the prefetcher will load the instructions that will be needed after the branch. If the prediction was wrong, the loaded instructions will be useless and the correct instructions will have to be fetched, and the CPU will have to wait until they arrive from the memory, slowing things down.