Subconjunto de instruções de comunicação e sincronização entre processos em uma arquitetura multicore Laysson Oliveira Luz 1, Ivan Saraiva Silva 2 1 Departamento de Computação Universidade Federal do Piauí (UFPI) Caixa Postal 15.064 91.501-970 Teresina PI Brazil 2 Departamento de Computação Universidade Federal do Piauí (UFPI) Caixa Postal 15.064 91.501-970 Teresina PI Brazil {layssonluz,ivan}@edu.ufpi.br Abstract. Multicore programming model and multicore programming support becomes an important key on the industry and research centers. Actually, it is expected that with the increase of processing cores in a single chip, the number of process/threads executing concurrently increase proportionally. For many reasons this does not necessarily happen. This paper presents the design and implementation of a multicore architecture that integrates the communication and synchronization instruction set of IPNoSys programming model. The design was implemented in VHDL language and synthesized to FPGA technology. A programming methodology and environment were developed and tuned for programmers. Resumo. Modelo de programação e suporte a programação multicore tornaram-se chave importante na indústria e centros de pesquisa. Atualmente, espera-se que o número de processos/threads executando concorrentemente, aumente proporcionalmente com o aumento do número de núcleos. Por muitas razões isto não necessariamente acontece. Este artigo apresenta o projeto e implementação de uma arquitetura multicore baseada em MIPS que integra instruções de comunicação e sincronização do modelo de programação IPNoSys. O projeto foi implementado em VHDL e sintetizado em FPGA (Field-Programable Gate Array). Uma metodologia e um ambiente de programação foram desenvolvidos e disponibilizados para programadores. 1. Introdução O desenvolvimento de arquiteturas multicore evoluiu mais rápido que modelos de programação para este tipo de arquiteturas, dessa forma os programadores só com dificuldade conseguem explorar ao máximo tais arquiteturas. A partir de então, têm-se focado no desenvolvimento de programas paralelos, isto é, o desenvolvimento de aplicações destinadas a processadores multicore. O que exige compiladores, linguagens de programação e frameworks [McCool 2008] destinados a arquiteturas multicore, ao passo que, estas mesmas devem fornecer suporte a tais linguagens de programação paralela. Em arquiteturas multicore o modelo de memória é determinante quando se trata de programação paralela, pois isso determina se a comunicação inter-processos ocorre
por meio de troca de mensagens (memória distribuída) ou se ocorre por meio de variáveis compartilhadas (memória compartilhada)[diaz et al. 2012]. O subconjunto de instruções de comunicação e sincronização apresentado neste artigo foi implementado em um processador multicore que dispõe de uma memória compartilhada, tais instruções se baseiam, portanto, no compartilhamento de variáveis, o subconjunto de instruções basea-se no modelo de programação IPNoSys [de Araujo 2012] e inclui ordens de execução síncronas e assíncronas, sinais de sincronização, além de envio e recepção de dados. 2. Modelo de Programação IPNoSys IPNoSys é um acrônimo para Integrated Processing NoC System. É uma arquitetura de computador não convencional e modelo de programação baseado em características de rede em chip, onde os roteadores, além da função de rotear, podem também executar instruções lógico-aritméticas. Estes roteadores, denominados Routing and Processing Unit (RPU), estão conectados por intermedio de uma topologia em malha-2d e são responsáveis pela execução das aplicações. Além da malha-2d, a arquitetura IPNoSys inclui quatro Memory Access Units (MAU), distribuídas nos cantos da NoC (Network-on-Chip), as quais são responsávieis pelo gerenciamento dos acessos à memória e por injetar as aplicações na rede de RPU s. Uma das MAUs é responsável por entradas e saídas, e portanto é chamada de IOMAU. Figura 1 mostra a Arquitetura IPNoSys [de Araujo 2012]. Figura 1. Arquitetura IPNoSys Na arquitetura IPNoSys as aplicações são compiladas como um conjunto de pacotes. Cada pacote representa um processo de aplicação que deve ser executado. Cada pacote tem um par identificador (Program_ID, Packet_ID) no seu cabeçalho. A (ISA) Instruction Set Architecture de IPNoSys inclui 6 instruções de sincronização e acesso à memória (LOAD,STORE,SEND,EXEC,SYNEXEC e SYNC), as quais são executadas somente por MAU s. Portanto, quando RPU s decodificam estas instruções, elas enviam, através de um pacote de controle, para uma MAU alvo. As operações realizadas por tais instruções são: LOAD/STORE: Carrega ou grava dados da/para a memória de dados do/para o pacote atualmente sendo executado; SEND: Esta instrução é usada para enviar dados gerados pelo pacote atualmente sendo executado para o pacote esperando execução;
EXEC: Ordena uma execução assíncrona de um pacote. O pacote deve ser injetado tão logo seja possível, pela MAU recebendo a instrução EXEC; SYNEXEC: Ordena uma execução síncrona de um pacote. A execução do pacote depende do sinal de sincronização que será enviado por um número de pacotes específico, pela instrução SYNEXEC; SYNC: Sinaliza que um pacote alcançou um ponto de sincronização. O evento de sincronização é enviado para a MAU que está esperando eventos de sincronização para injetar um pacote para execução; Com tais instruções é possível desenvolver aplicações onde o programador indica o paralelismo explicitamente. Figura 2 mostra o design de uma aplicação (execução paralela de Run Length Encoding Algorithm - decodificando processo). Figura 2. Representação esquemática de uma aplicação para IPNoSys Seis pacotes compõem esta aplicação, um pacote de inicialização, quatro de execução e um pacote de finalização da aplicação. As instruçãos de comunicação e sincronização controlam o fluxo de execução e a troca de dados. O subconjunto de instruções apresentado nesta seção foi implementado em um microprocessador MIPS usando linguagem VHDL e tal microprocessador foi usado para o projeto de uma arquitetura multicore. Esta implementação será apresentada na próxima seção. 3. Arquitetura Proposta 3.1. MIPNoSys A arquitetura multicore, MIPNoSys, esquematizada na figura 3, inclui cinco núcleos de processamento. Um núcleo de processamento é definido como núcleo mestre e é responsável pelo gerenciamento de tarefas, os demais núcleos, denominados escravos, são responsáveis pela execução de tarefas (threads) enviadas pelo mestre. Os núcleos são conectados entre si e com a memória compartilhada por meio de uma rede de interconexão crossbar, por intermédio da qual dados são enviados quando instruções SEND e RECEIVE são executadas. Na memória local do núcleo mestre é armazenado o programa de inicialização da aplicação. Além da memória local, o mestre possui ainda três ROM s, cada uma contendo
um código da rotina de tratamento da trap gerada por uma das instruções de sincronização EXEC, SYNC ou SYNEXEC. MIPNoSys inclui também uma unidade de gerenciamento de trap. Esta unidade recebe os sinais de trap gerados nos núcleos escravos e, apropriadamente, interrompe o núcleo mestre. Além das traps geradas pelas instruções de sincronização, a arquitetura reconhece a trap gerada pela instrução HALT. Tal instrução é usada para indicar que um núcleo escravo terminou suas tarefas e espera uma nova do núcleo mestre. Figura 3. Arquitetura MIPNoSys 3.2. Implementação do Subconjunto de Instruções As instruções do modelo de programação IPNoSys que foram implementadas no microprocessador MIPS foram SEND, EXEC, SYNC e SYNEXEC. Estas instruções IPNoSys foram implementadas como segue: SEND : Foi implementada como um par de instruções, uma instrução SEND nãobloqueante, que coloca um dado em registrador X, e uma instrução RECEIVE bloqueante, que lê o dado armazenado no registrador X; EXEC : Esta instrução é uma ordem de execução assíncrona de uma thread ou processo, ou seja, a thread ou processo deve ser executado tão rapidamente quanto possível; SYNEXEC : Esta instrução é uma ordem de execução síncrona de uma thread ou processo, ou seja, a execução da thread ou processo depende de sinal de sincronização enviados por outras threads ou processos; SYNC : Esta instrução sinaliza que a thread ou processo atual encontraram um ponto de sincronização; Todas as instruções de sincronização geram traps e necessitam do gerenciador de traps para serem executadas. A próxima seção explica o ambiente de programação da arquitetura proposta. 4. Ambiente de programação O ambiente de desenvolvimento de aplicações para uma arquitetura ainda em fase de projeto representa um grande desafio. No caso da arquitetura apresentada neste artigo o desafio apresentou peculiaridades devido aos seguintes aspectos: O microprocessador MIPS foi utilizado como núcleo e este já apresenta características próprias referentes a programação; Foram acrescentadas instruções a este microprocessador, oriundas de uma
outra arquitetura com modelo de programação paralelo; As instruções acrescentadas intrinsecamente fazem referência a threads ou processos, requerendo portanto auxílio de um sistema operacional; A arquitetura deve ser validada não só funcionalmente, mas também quanto a sua programabilidade visando o desenvolvimento de aplicações paralelas. Tais peculiaridades conduziram ao desenvolvimento de um ambiente e metodologia de desenvolvimento de aplicações que: Utiliza software pré existente tal como o Cross-Compiler C to MIPS disponível no GCC da GNU; Utiliza software desenvolvido no escopo deste trabalho como o conversor ELF2mif; Considera a existência de múltiplas threads ou processos onde cada um deles pode ser desenvolvido separadamente em um arquivo.c ; Dispensa o uso de um sistema operacional (SO), mas considera a existência de funções de SO representadas na forma de um arquivo.h ; possibilita a configuração da memória compartilhada por intermédio de um script. Como resultado da compilação de cada arquivo C, o Cross-Compiler gera um arquivo ELF (Executable and Linking Format), que pode ser ligado á outro arquivo para executar. Entretanto, neste caso, interessa a simulação da arquitetura em dispositivos reconfiguráveis, que é uma tecnologia que permite o desenvolvimento de protótipos de hardware. Assim faz-se necessário converter os arquivos ELF para arquivos MIF (Memory Initialization File), utilizável nesta tecnologia. Portanto, desenvolveu-se uma ferramenta para transformar este arquivo em um MIF, o qual é suportado pelos softwares de compilação e simulação da Altera, Quartus II e ModelSim. 5. Experimentos e Resultados Afim de avaliar o subconjunto de instruções implementado e explorar ao máximo a capacidade do processador, foram escolhidas duas aplicações: Multiplicação de Matrizes e o algotimo de alinhamento de cadeias genéticas chamado Smith-Walterman [Zhang et al. 2002]. Essas aplicações são distintas no que diz respeito ao paralelismo. Na multiplicação de matrizes o cálculo de cada elemento da matriz resultante é completamente independente do cálculo dos demais elementos. O algoritmo de Smith-Waterman também calcula uma matriz de similaridades, entretanto, o cálculo do elemento H(i,j) depende do cálculo dos elementos H(i-1,j), H(i,j-1) e H(i-1, j-1). Nas figuras 4 e 5, a execução do algoritmo de Smith-Waterman demora quase 350000 ciclos, enquanto que a multiplicação de matrizes leva 400000. Em Smith- Waterman um núcleo espera por outros processadores para calcular um elemento da matriz de similaridades, o que ocorre de modo sistemático sem um sincronismo baseado em interrupções, como na multiplicação de matrizes, devido a isso, o algoritmo de multiplicação de matrizes demora um pouco mais para disparar a tarefa final, mas ambos demonstram a eficiência do sistema de comunicação e sincronização. 6. Conclusão Este trabalho tem como objetivo apresentar um subconjunto de instruções de comunicação e sincronização inter-processos em uma arquitetura multicore, MIPNoSys, e por meio dos experimentos e resultados obtidos observa-se, além da funcionalidade, a facilita para desenvolver aplicações para MIPNoSys, com a metodologia e o ambiente de programação desenvolvidos.
Figura 4. Gráfico da simulação de multiplicação de matrizes Figura 5. Gráfico da simulação de Smith-Walterman Como projeto futuro, fica o compromisso de aumentar a quantidade de escravos da arquitetura MIPNoSys, afim de obter melhor desempenho durante a execução das aplicações e aprimorar a comunicação entre os núcleos. Os experimentos mostram grande ociosidade do núcleo mestre, períodos de tempo nos quais o poder de processamento do núcleo mestre será melhor explorado. Referências de Araujo, S. R. F. (2012). Projeto De Sistemas Integrados De Proposito Geral Baseados Em Redes Em Chip - Expandindo As Funcionalidades Dos Roteadores Para Execucao De Operacoes: A Plataforma Ipnosys. PhD thesis, Universidade Federal do Rio Grande do Norte. Diaz, J., Munoz-Caro, C., and Nino, A. (2012). A survey of parallel programming models and tools in the multi and many-core era. Parallel and Distributed Systems, IEEE Transactions on, 23(8):1369 1386. McCool, M. (2008). Scalable programming models for massively multicore processors. Proceedings of the IEEE, 96(5):816 831. Zhang, F., Qiao, X.-Z., and Liu, Z.-Y. (2002). A parallel smith-waterman algorithm based on divide and conquer. In Algorithms and Architectures for Parallel Processing, 2002. Proceedings. Fifth International Conference on, pages 162 169.