EXTENSÕES DO MULTIPROCESSADOR MINIMALISTA COM MEMÓRIA COMPARTILHADA

Aluno de Iniciação Científica: Giuliano Teodoro Bertoncello (IC-Voluntária)
Curso: Ciência da Computação - Bacharelado
Orientador: Roberto Hexsel
Colaborador: Lucas Manika Koeb
Departamento: Informática
Setor: Ciências Exatas
Palavras-chave: processador , MIPS32 , VHDL
Área de Conhecimento: 10304029 - ARQUITETURA DE SISTEMAS DE COMPUTAÇÃO

Após extensões e melhorias em uma implementação simples de um processador MIPS segmentado de 5 estágios descrita em VHDL (MiniMIPS), empregamos esta nova implementação no projeto de um multiprocessador que foi desenvolvido em um projeto de Mestrado no PPGInf. O objetivo deste trabalho é estender o projeto do MMCC, criando um ambiente de compilação e testes de aplicativos, além da implementação de semáforos no nível de hardware, para então disponibilizar a versão estendida do multiprocessador para uso em aplicações embarcadas. O Multiprocessador Minimalista com Memória Compartilhada (MMCC) está descrito em VHDL e pode conter de 1 a 8 processadores, sendo configurado em tempo de compilação. Outras propriedades também configuradas em tempo de compilação, como tamanho de memória, estão definidas em arquivos de configuração. Para facilitar sua utilização, definimos um script de configuração, um arquivo de inicialização escrito em assembly que inicializa corretamente a execução do multiprocessador, bem como o script de compilação do projeto. O código VHDL do MMCC foi portado para ser compilado e simulado com as ferramentas ghdl e gtkwave e programas de teste podem ser escritos em linguagem C e compilados com o gcc. O MMCC possui seus processadores interligados por um barramento multiplexado e cada processador possui sua cache de dados e de instruções, mantidas coerentes por um protocolo MESI modificado. Cada processador possui ainda duas unidades de controle de memória, que implementam uma versão primitiva de memória virtual. O sistema de memória virtual do MMCC permite, além da verificação de permissões de escrita e execução nas páginas de memória, definir se determinada página pode ou não ser armazenada em cache. Os controladores das caches permitiam o acesso direto à memória apenas para escritas. Os projetos dos controladores de cache foram alterados para permitir também leituras não-cacheáveis, pois esta funcionalidade era um requisito para a implementação de semáforos em hardware. Após a adição do periférico no qual são implementados os semáforos, adicionamos ao projeto uma biblioteca para facilitar o uso de semáforos para sincronização dos processos que executam nos núcleos. Com estas adaptações, utilizamos um programa de testes que realiza uma multiplicação de matrizes, sincronizada por esta biblioteca e observamos resultados corretos. Como próximas etapas deste trabalho, faremos testes com aplicações reais, para verificar corretude das modificações que introduzimos, e então avaliar seu desempenho, comparando-se com semáforos implementados em software.

 

0055