Exercício 3 - Contabilizando corretamente os ciclos
Objetivos
Complementar a contagem de ciclos do simulador anterior com mais
detalhes sobre a execução do programa num pipeline, focando nos
hazards de cnotrole.
Relembrar conceitos sobre CPI e hazards..
Atenção: Este exercício, assim como todos os demais, é individual. Isto significa que você não pode, em hipótese alguma, olhar o código de um de seus colegas. Você pode tirar dúvidas longe do computador ou pedir auxílio ao professor.
Antes de começar
Você deve relembrar os conceitos relacionados à medidas de desempenho. Procure pensar em respostas para as seguintes perguntas (não precisa colocá-las no seu relatório):
O que é CPI?
O que é hazard?
Quais são os tipos de hazards que podem acontecer no pipeline de 5
estágios do MIPS?
Qual o impacto de cada hazard no desempenho de um programa? É
possível melhorar o desempenho?
Como funciona previsão de desvio (branch prediction)? Qual a
técnica padrão do pipeline do MIPS neste caso (consulte o livro da
disciplina)?
Sem previsão de desvio, qual o momento mais cedo no pipeline em
que instrução de salto (branch) pode ser executada?
Enumere algumas técnicas de previsão de desvio e como elas funcionam.
É importante que você saiba responder estas perguntas antes de continuar a atividade.
Atividade
Nesta atividade você deve usar os mesmos programas
do Exercício 1. Mas recomendo que façam
primeiro uma avaliação no "Hello World" pelo tamanho e facilidade de
depuração. Posteriormente executem seu código com os 3 programas
maiores.
Pré-atividade
Você já fez a pré-atividade no exercício 2.
Hazard de controle e previsão de desvio
De forma similar aos hazards de dados, os hazards de controle
ocorrerão apenas em algumas das execuções das instruções. Então
precisam ser contabilizados de forma correta. Você precisa
identificar quais instruções são sujeitas a hazards de controle e
qual o impacto no momento em que estes hazards acontecem. O próximo
passo é capturar estas informações diretamente no simulador,
calculando o impacto no tempo de execução dos programas. Comece
considerando que as instruções de desvio só podem ser concluídas no
quarto estágio do pipeline (versão inicial do capítulo do livro,
bastante pessimista).
Depois de calcular o impacto nas instruções de desvio, você deve
avaliar como elas podem ser melhoradas com o uso de previsão de
desvios. Para isto, considere as seguintes técnicas de previsão de
desvio:
Desvio nunca tomado: Esta técnica é a mesma que simulou
até agora. Apenas use este nome para identificar a coluna com os
resultados que já obteve até o momento e incluir o overhead dos
desvios.
Desvio sempre tomado: Esta técnica é impossível de
implementar em hardware, mas no simulador você pode ter noção do
impacto que ela causaria no seu programa.
Preditor de 1 bit: Aloque um bit por endereço, comece a
previsão com não tomado e calcule o impacto deste preditor no
seu programa.
Outro preditor: Escolha uma outra técnica de previsão de
saltos, implemente-a e veja qual o impacto no seu programa.
Entrega
Todos devem entregar um relatório de 1 página, no formato PDF,
através
do Susy. Guardem
o código fonte até o final do semestre.
No seu relatório, inclua uma tabela com, ao menos, as seguintes
colunas:
Programa que foi avaliado
Número de ciclos considerando CPI=1
Número de ciclos considerando CPI do exercício 1
Número de ciclos considerando CPI do exercício 1 e a existência
de hazard de dados, com forward no pipeline (última coluna do
exercício 2). Use esta configuração para as medidas posteriores.
Previsão de desvio: Nunca tomado
Previsão de desvio: Sempre tomado
Previsão de desvio: Preditor de 1 bit
Previsão de desvio: Outro preditor
Indique também, para cada técnica de previsão de desvio, a taxa de
acerto média dela nos programas avaliados (a média das porcentagens
dos três programas para cada uma das técnicas).