Exercício 2 - Contabilizando corretamente os ciclos

Objetivos

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):

É 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

Assim como existem os comportamentos ac_behavior(begin) e ac_behavior(end) do simulador, cada instrução possui seu próprio comportamento. A instrução addu possui o comportamento declarado em ac_behavior(addu). No entanto, um só comportamento por instrução torna o código bastante repetitivo, então, cada instrução executa 3 comportamentos em sequência. Para a instrução addu teremos o comportamento geral: ac_behavior(instruction), executado para todas as instruções, o comportamento do formatoda instrução: ac_behavior(Type_R), executado para todas as instruções do tipo R, e o comportamento específicoac_behavior(addu). Note que o incremento do PC (ac_pc) é feito apenas no comportamento geral e todas as instruções tiram proveito desta operação.

Sua pré-atividade é contar quantas instruções de cada formato são executadas por seu programa. Inclua isto numa tabela no seu relatório (você vai ter mais dados para esta tabela nos passos posteriores).

Computando o overhead da execução de um programa

Seu simulador já realiza a execução correta do programa. Então todos os hazards foram resolvidos corretamente. Ele faz isto considerando que uma instrução executa por vez, o que torna bem mais fácil a simulação, no entanto ele não consegue computar o tempo de execução correto do programa pois não calcula os efeitos entre as instruções nem mesmo o tempo que cada uma gasta individualmente. Você deve avaliar os impactos, como fez com o caso do CPI médio, em cada uma das instruções do programa. Só que agora, algumas instruções impactarão de forma diferente no código dependendo do seu comportamento (um salto tomado ou não tomado) e também das instruções ao seu redor (um hazard de dados ou controle).

A metodologia recomendada continua similar ao exercício anterior, só que agora você precisa criar mais grupos de instruções para adicionar o impacto correto delas no tempo de execução de seu programa.

Comece considerando o CPI médio por grupo de instrução do Exercício 1. O próximo passo é considerar os efeitos dos hazards e, posteriormente, da previsão de saltos. Em seu relatório, você deve gerar colunas com os tempos de execuções em ciclos e o CPI médio de cada configuração. Para cada atividade a seguir, você deve incluir novas colunas indicando os novos resultados, assim você mantem apenas uma tabela de resultados. Comece incluindo as colunas: original (considerando CPI = 1 para todas as instruções) e CPI variável tabela do Exercício 1 (este é o mesmo resultado do exercício 1).

Hazard de dados

Quais são os hazards de dados que podem acontecer no pipeline de 5 estágios do MIPS? Quais deles podem ser resolvidos através de forwarding e quais não podem? Modifique o simulador para contar os hazards de dados e classificá-los nestas duas categorias: os que são resolvidos por forwarding e os que não são. Os que não são resolvidos por forwarding gerarão um impacto no desempenho. Quantos ciclos extras serão necessários para executá-los?

Uma vez que você tenha detectado as sequências de instruções que precisam ser monitoradas, você também precisa avaliar o atraso que estas sequências causam na execução do programa e capturar a quantidade de vezes que o simulador executou estas sequências. Provavelmente você vai querer alterar os comportamentos dos formatos para capturar estas informações de forma genérica.

Hazard de controle e previsão de desvio

Esta parte foi movida para o Exercício 3. Você não precisa fazer nada relacionado com hazard de controle neste exercício.

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: