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.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, recomendo que vocês comecem 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?

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

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?

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 - Qual a melhor cache para cada programa?

Utilizando um dos dois simuladores (da parte 1 ou parte 2, escolha livre), modifique o código para listar todos os acessos à memória durante a execução de um programa. Com base nestes acessos, você deve avaliar cinco configurações de cache possíveis. Novamente, esta é uma atividade colaborativa onde cada aluno deverá fazer sua parte e colocar o resultado no wiki. No entanto, o relatório final não precisa utilizar todos os dados do wiki, apenas os que estiverem disponíveis no dia da sua escrita. Sintam-se fortemente estimulados a conversarem sobre a escolha dos programas e parâmetros de forma a maximizar o número de variações num mesmo programa. Não compartilhem código algum.

Os programas disponíveis são os do mibench_mips1.tgz (como todos os demais arquivos, disponível no meu homedir do IC3 em /home/staff/rodolfo/mc723/download). Cada programa tem uma versão large e uma small de entrada de dados, você deve escolher uma delas.

As configurações de cache a serem avaliadas são:

Use a primeira letra de cada parâmetro para representar sua configuração. Exemplo: 1V2L1B = 1 via, 2 linhas e bloco de 1 palavra. Indique no wiki os resultados para cada execução, colocando seu RA junto dos seus resultados. Como resultados, vocês devem pegar o número de hits e de misses. O número de misses deve ser dividido nas 3 categorias (Compulsório, Capacidade e Conflito). Utilizem os resultados de uma simulação para decidir quais parâmetros avaliar (vocês não devem decidir as 5 configurações antes das simulações e sim sob demanda).

Para avaliar as caches, vocês podem escrever um pequeno programa externo, adicionar alguma funcionalidade no simulador ou mesmo usar um programa pronto e gerar as entradas para ele. As três alternativas são plenamente válidas. Como sugestão de programa pronto existe o dinero. Novamente, você não é obrigado a utilizar o dinero.

Comente no seu relatório os resultados obtidos para o programa que você escolheu. Não precisa comentar para nenhum outro programa, apenas o seu. Explique como fez para calcular os hits e misses das caches.

Entrega

Enviar um relatório de, no máximo, 2 páginas, descrevendo a atividade realizada e os resultados obtidos.