1. Redução das penalidades por erros de previsão nas filiais - Os preditores de ramificação são usados para prever a próxima instrução a ser executada. Se a previsão correta for feita, as instruções já serão pré-buscadas e, portanto, não haverá travamento do pipeline. Por outro lado, em caso de previsão incorreta, a execução entra em fases de recuperação. A paralisação do pipeline leva à perda de desempenho.
- As técnicas que podem ser aplicadas para reduzir a previsão incorreta de ramificações são:Aumentar o tamanho dos buffers, desenrolar do loop, fundir o loop.
2. Reduzindo penalidades por perda de cache de dados - O cache de dados é usado para reduzir o tempo de carregamento e armazenamento durante a busca de dados da memória principal. Mas quando o endereço de memória solicitado não é encontrado no cache, isso é chamado de Cache Miss e os dados devem ser buscados na memória principal, o que leva mais tempo.
- Existem dois tipos de falhas de cache:
a)
Faltas frias - Ocorre quando o bloco de memória referenciado não está no Cache e nem estava lá antes.
b)
Perdas de capacidade - Ocorre quando o bloco solicitado não está presente no cache, mas poderia estar presente se houvesse espaço suficiente.
- Técnicas para reduzir Misses de Cache:Aumentando o tamanho do Cache, Localidade Espacial (Agrupar os dados com alta probabilidade de acesso).
3. Redução da sobrecarga do fluxo de controle - As instruções de controle-fluxo em um programa alteram a sequência de execução das instruções.
- Técnicas que podem ser usadas para reduzir o fluxo de controle:Redução do número de ramificações (por exemplo, remoção do if-else aninhado), uso de tabela de salto, desenrolamento de loops.
4. Execução Especulativa - A execução especulativa envolve a execução de instruções além de uma instrução de desvio com a suposição de que o desvio será realizado.
- As especulações são verificadas ou esmagadas dependendo da direção real do ramo posteriormente.