MC723: Laboratório de Projeto de Sistemas Computacionais

19/06: Notas finais.

22/05: Tutorial sobre Plataformas Virtuais para o Projeto 3.

20/02: Acompanhamento e Notas.

19/02: Não perca das datas importantes do Calendário de graduação.

Aprimorar os conceitos aprendidos no curso de Projeto de Sistemas Computacionais. Reforçar conceitos de programação em grandes bases de código. Ao final desta disciplina, o aluno deverá ser capaz de:

  • Definir e usar um benchmark para avaliar o desempenho de sistemas computacionais, comparando o resultado de múltiplos equipamentos;
  • Modelar um processador em linguagem de alto nível, considerando informações de temporização e desempenho;
  • Modelar um sistema computacional multi-processado em linguagem de alto nível, considerando mecanismos de interconexão, periféricos e software a ser executado.

A bibliografia recomendada para as atividades desta disciplina é:

  • David A. Patterson and John L. Hennessy. Computer Organization Design, The Hardware/Software Interface. Morgan Kaufmann
  • Sandro Rigo, Rodolfo Azevedo, Luiz Santos. Electronic System Level Design: An Open-Source Approach Springer, 2011
  • Linguagem SystemC. Existem livros na biblioteca sobre SystemC.
  • Linguagem ArchC (endereço alternativo).

Esta disciplina é composta por três projetos, a serem realizados durante o semestre. A nota final será a média geométrica das notas dos três projetos.

Os projetos serão realizados em grupos em torno de 3 participantes (ajustados pelo tamanho da turma). A composição e o tamanho dos grupos serão definidos pelo professor.

Qualquer tentativa de fraude durante o semestre será punida até o limite da minha autoridade, incluindo nota zero na disciplina para todos os envolvidos.

Os atendimentos acontecerão às segundas, das 18h-19h, na sala 3 do IC e às quartas, das 18h-19h, pelo monitor da disciplina (Thiago Santiago) na sala 361 do IC. Caso precise de atendimento em outro horário, basta combinar por email. Neste caso, envie o email já com uma sugestão de dia e horário para facilitar o atendimento.

Lembre-se que estarei em sala de aula durante todas as aulas do semestre.

Serão 3 projetos durante o semestre, cada um com 5 semanas para serem realizados. Os projetos devem ser realizados em grupo, onde todos os componentes do grupo devem estar cientes de todas as decisões tomadas, sendo capazes de justifica-las. Os projetos serão avaliados através de:

  • Relatório final entregue antes da última aula do período do projeto;
  • Apresentação de até 15 minutos que será feita na última aula do período do projeto. As respostas às perguntas serão consideradas nas notas;
  • Código fonte entregue antes da última aula do período do projeto;
  • Participação de cada aluno do grupo;
  • Entrega do roteiro conforme solicitado por projeto;

P1: Avaliação de desempenho

Objetivo: Desenvolver um benchmark com, ao menos, 5 componentes, para avaliar o desempenho de, ao menos, 5 equipamentos computacionais (ou parte deles) distintos.

Decisões de projeto: O que avaliar, como avaliar, que garantias este benchmark fornece, quais são as condições de contorno, etc.

Entregas: Este primeiro projeto tem uma exigência de acompanhamento mais de perto do professor, para auxiliar no desenvolvimento da metodologia. Espera-se um relatório parcial durante o período e um relatório final.

  • O primeiro dele contendo a metodologia a ser seguida, em uma página, entregue impresso até o final da primeira aula, para comentários durante o período da aula pelo professor. Este será o roteiro do experimento que será feito nas demais aulas pelo grupo. Aproveitem a oportunidade da aula para tirarem dúvidas. Este roteiro terá peso de 20% na nota do projeto.
  • O relatório final, de até 5 páginas, deve conter todos os resultados do projeto e ser entregue antes da última aula do projeto, que terá a apresentação. Este relatório terá peso de 80% na nota do projeto.

Critérios de avaliação: Clareza na definição dos critérios de avaliação de desempenho (O que você mediu? Como? Por que?). Capacidade de reproduzir os resultados obtidos nos computadores informados e também de adicionar novos computadores.

Relatório Final e Apresentação: 21/03, durante o período da aula.

P2: Desempenho do Processador

Objetivo: Várias características de implementação afetam o desempenho de um processador, o objetivo deste projeto é avaliar o impacto de uma gama de características na execução de alguns programas. Para isto, vocês devem usar um simulador comportamental do processador e projetar o código referente à contabilização do impacto das características de implementação desejadas. Vamos utilizar o processador MIPS, o mesmo visto na disciplina teórica.

Decisões de projeto: Quais características de implementação afetam o desempenho do processador? Abaixo temos uma lista não exaustiva para servir de base.

  • Tamanho do pipeline: 5, 7 e (13) estágios
  • Processador escalar vs (superescalar)
  • Hazard: dados e controle
  • Branch predictor: 2 tipos reais ao menos
  • (Cache: 4 configurações distintas)

Vocês devem utilizar o simulador MIPS baseado em ArchC (veja um tutorial), disponível no IC-3 e também para instalação na sua casa/notebook. Este simulador executa programas, compilados para MIPS, uma instrução por vez. Faz parte da sua tarefa implementar toda a contabilidade para prever o comportamento de uma execução conforme as funcionalidades acima. Não é esperado nem desejado que você implemente a execução em pipeline, apenas que consiga contabilizar os efeitos do pipeline.

Critérios de avaliação: Capacidade de implementar a contabilidade das funcionalidades acima. Você pode remover um dos 3 itens marcados entre parênteses na listagem anterior. Coerência entre os dados obtidos e um sistema real (os dados fazem sentido?). Capacidade de entender uma base grande de código e realizar pequenas modificações nela.

Roteiro: contendo a metodologia a ser seguida, em uma página, entregue impresso até o final da primeira aula, para comentários durante o período da aula pelo professor. Este será o roteiro do experimento que será feito nas demais aulas pelo grupo. Aproveitem a oportunidade da aula para tirarem dúvidas. Este roteiro terá peso de 20% na nota do projeto.

Relatório Final e Apresentação: 09/05, durante o período da aula. Enviar o relatório por email antes do período da aula. Limite de 5 páginas.

Ao final do seu relatório, inclua uma seção de resultados com uma tabela da forma:

Config. 1Config. 2...
Prog 1Prog 2Prog 3P1P2P3...
Evento 1
Evento 2
Evento 3
...
Ciclos
Tempo

onde Config. 1, Config. 2, ..., representam as configurações que você avaliou e Evento 1, Evento 2, ..., representam os eventos analisados. Ao final, totalize o número de ciclos e também a estimativa de tempo conforme conversado na entrega do Roteiro. Você deve ter as descrições e características das Configurações e Eventos no seu relatório. Note que não deve ser possível colocar todas as configurações nesta tabela, você terá que escolher as configurações mais relevantes. Como exemplo, depois de testar diversas configurações de cache, você pode escolher apenas uma (a melhor) e colocar nesta tabela, deixando os dados das outras apenas nas seções anteriores do relatório. Uma leitura da tabela na vertical, com alguns exemplos, pode ser: "Usando o processador com a configuração 1, descrita no texto, executando o programa xyz, utiliza X instruções (Evento 1), 200 cache misses (Evento 2), 150 hazzard de dados (Evento 3), ..., o que totaliza 1487 ciclos (número fictício) e equivale a um tempo de execução de 1ms."

Para a entrega, você deve ter respostas para as seguintes perguntas:

  1. Para seu Pipeline de 7 e 13 estágios (se escolheu 13), quais são os atrasos dos hazzards e branch prediction?
  2. Explique um passo a passo sobre como funciona seu branch prediction supondo PC=1000.
  3. Em que estágio do pipeline fica o branch predictor e quais são os subcomponentes que você está considerando para ele funcionar?
  4. Quais são as melhores configurações de cache para cada programa?

P3: Sistemas Multicore e Offload para Hardware

Neste projeto, cada grupo deverá modelar um sistema com até 8 cores, executar um software que tire proveito de paralelismo nele. Além disto, um módulo de hardware extra deverá ser criado (software offloading) para acelerar o desempenho deste software.

No roteiro, os grupos devem responder 3 perguntas:

  1. Como um processador multicore é iniciado?
  2. Como é feito (implementado) o controle de concorrência em hardware?
  3. Como escolher o melhor trecho de código para implementar em hardware?

Os grupos serão formados durante a aula como no Projeto 2.

Relatório Final e Apresentação: 13/06, durante o período da aula. Enviar o relatório por email antes do período da aula. Limite de 5 páginas.

DataAtividade
21/fevRoteiro do Projeto 1
28/fev
07/mar
14/mar
21/marEntrega do Projeto 1
28/marRoteiro do Projeto 2
04/abr
11/abr
18/abrNão haverá atividades
25/abr
02/maiNão haverá atividades
09/maiEntrega do Projeto 2
16/maiRoteiro do Projeto 3
23/mai
30/mai
06/jun
13/junEntrega do Projeto 3