Exercício 3 - Criação, uso e avaliação  de uma plataforma de prototipagem

Informações Gerais

Dicas sobre o Exercício

Motivação

Objetivos

Esse exercício vai ser dividido em partes e, ao final delas, vocês devem ser capazes de:

Contextualização

Atenção: Todos os arquivos que você precisa para essa atividade estão disponíveis em /home/staff/rodolfo/mc723/download.

Parte 1 - Usando uma plataforma virtual

Uma plataforma virtual é um software capaz de simular um hardware com um bom nível de detalhes. Geralmente não é necessário modificar programas que rodam nesta plataforma virtual para executá-los numa plataforma real (hardware). Alguns componentes existentes em plataformas reais não aparecem nas versões virtuais para não afetar o desempenho. Outros componentes aparecem com versões bastante simplificadas. Entranto, dificilmente o software que está executando nesta plataforam virtual deve ser capaz de notar esta diferença. Como exemplos destes componentes que podem aparecer de forma diferente temos: caches (que pode não existir), periféricos (que podem apenas emular o que deveriam fazer), etc.

Vocês usarão, neste exercício, o pacote ARP (ArchC Reference Plataform) para gerenciar plataformas. Ele será exatamente o mesmo pacote que vocês utilizarão durante o semestre para realizar os demais experimentos. A ARP nada mais é que um conjunto de Makefiles e uma estrutura de diretórios para facilitar o desenvolvimento de projetos maiores. Cada diretório tem um conteúdo específico:

Pegue a plataforma de exemplo (arp-rodolfo.tgz), descompacte-a e navegue pelos diretórios observando o conteúdo de cada um deles. Embora exista uma versão da ARP descompactada no meu homedir, vocês devem começar com a versão vazia indicada acima. Para executar a plataforma, basta utilizar os comandos:

make
make run

O primeiro comando compila a plataforma e o segundo executa. Se for necessário compilar o programa, você deve utilizar o compilador instalado em /l/archc/compilers/bin da máquina xaveco (o compilador está apenas nela, você pode executar os programas compilados em qualquer outra máquina, mas os compiladores para MIPS estão apenas na xaveco). Para facilitade, inclua o caminho anterior no PATH antes de executar os dois comandos acima.

Ao final da execução, o simulador indicará quantas instruções por segundo ele conseguiu executar. Anote este número. O que acha desta velocidade? Será que tem como melhorar? Se seu computador for muito rápido, faça uma modificação básica no programa (comente no relatório) de forma a gastar mais tempo.

Uma métrica importante na execução de programas em simuladores é o slowdown factor, que indica a perda de desempenho ao executar um programa num simulador em relação à execução num sistema real. Execute o programa, no seu computador, sem o simulador, e com o simulador. Indique no seu relatório quantas vezes mais lenta foi a execução no simulador. Atenção: compare o tempo que o simulador anuncia com o tempo medido pela linha de comando. Qual é o correto? Por que?

Você colocou as otimizações corretas/necessárias? Indique no seu relatório quais otimizações, onde colocou e o resultado obtido.

Você consegue executar outro programa? Faça um programa (bem simples) e coloque para executar nesta plataforma. A velocidade de simulação é similar? Qual o slowdown factor?

Dica: Você pode ver o conteúdo, em assembly, do seu programa utilizando o software objdump. No caso do mips, a versão mips-elf-objdump (a opção -d lista as instruções do programa)

Parte 2 - Usando ArchC isoladamente

O simulador gerado anteriormente foi projetado em ArchC. Estes processadores podem ser utilizados tanto em plataformas quanto em modo isolado. Quando uma plataforma é bem simples, é preferível ter o processador isolado. Pegue o arquivo mips1-v0.7.8.tgz, que contém o modelo do MIPS (praticamente idêntico ao que você utilizou anteriormente, e execute o mesmo programa da Parte 1. Para isto, você deve descompactar o arquivo, utilizar o ArchC para gerar o modelo em SystemC, compilar o modelo e executá-lo. Tanto ArchC quanto SystemC estão instalados em /home/staff/rodolfo/mc723, basta utilizá-los.

acsim mips1.ac -abi
make -f Makefile.archc
mips1.x --load=<nome do programa que você quer executar> <parâmetros para o programa>

Atualize o PATH convenientemente antes de executar estes comandos.

Qual foi o desempenho da simulação agora? A diferença é muito grande? Qual o slowdown factor?

Você colocou as otimizações corretas/necessárias? Indique no seu relatório quais otimizações, onde colocou e o resultado obtido.

Este resultado ficou consistente com o da Parte 1? Compare a complexidade dos dois sistemas e os respectivos slowdown factors.

Desafio opcional valendo bônus na nota: Pegue todos os componentes necessários para esta simulação, recompile-os utilizando as melhores otimizações possíveis para gerar o simulador mais rápido possível. Meça o tempo de execução do programa JPEG coder em instruções por segundo (conforme mostrado no final do relatório da execução (não utilize o comando time). Todos deverão utilizar a máquina ssh.students.ic.unicamp.br. O melhor desempenho sem modificar o código fonte do ArchC ganhará um bônus. O melhor desempenho modificando pouco do código do ArchC também ganhará um bônus (pouco = pouquíssimas linhas). Um mesmo aluno pode ganhar bônus dobrado se fizer os dois melhores resultados. Os 3 melhores resultados de cada categoria terão que fazer uma demonstração de suas modificações numa das aulas. O programa a ser utilizado está disponível dentro do pacote mibench-mips1.tgz, dentro do diretório consumer/jpeg/bin (arquivo cjpeg). Utilizar como entrada o input_large. Veja maiores instruções de uso diretamente no diretório do programa. Os arquivos já estão compilados, você deve utilizar a versão compilada disponível. Cheque se a resposta gerada é válida.

Parte 3 - Alterar o código e retirar estatísticas

Esta parte é a meta principal do exercício. Você deve documentar as informações importantes no seu relatório. Para isto você precisará escolher um programa do pacote MiBench para executar. O pacote inteiro, compilado para MIPS, está no meu homedir do IC-3. Reserve o seu pacote e a versão do teste nesta planilha.

Você deve editar o código da plataforma da Parte 1 para que, ao final da simulação, ela imprima o número de acessos de leitura e escrita (separadamente) feitos na memória.

Você deve editar o código da Parte 2 para que, ao final da simulação, ela imprima o número de vezes que as instruções add, lw e sw foram executadas. Não conte as variações, apenas estas instruções.

Dicas:

Entrega

Enviar um relatório de apenas 1 página descrevendo a atividade realizada e os resultados obtidos.