MPSoC HeMPS Guilherme Castilhos guilherme.castilhos@acad.pucrs.br Fernando Moraes fernando.moares@pucrs.br
Outline Visão Geral do Sistema Camadas Envolvidas na Comunicação Serviços do Microkernel Integração Processador à NoC Gerência Distribuída de Recursos
Visão Geral do Sistema MPSoC HeMPS MPSoC Homegêneo baseado em NoC HERMES NoC Plasma-IP (Plasma, Interface de Rede, DMA e RAM) So, HeMPS is a homogeneous NoC-based MPSoC Its main hardware components are the HERMES NoC and the Plasma-IP, which wraps a mostly-MIPS processor called Plasma, a NI, a DMA module and a private RAM memory This is a 2x3 HeMPS instance Here are the Hermes NoC and the Plasma-IPs connected to the NoC routers. This is an internal view of the Plasma-IP exposing its components The task repository is a memory which stores the object code of the tasks that will be loaded in the system
Visão Geral do Sistema HERMES NoC Topologia 2D mesh Router North Local West South East ControlLogic F HERMES NoC Topologia 2D mesh Router Controle Lógico Centralizado Até cinco portas bi-direcionais Buffers de entrada The Hermes NoC employs a 2D mesh topology. Its main component is the Hermes router which has a centralized logic control, responsible for the arbitration of incoming packets (RR) and routing (XY) Supports up to five bi-directional ports, with input buffer for temporary flit storage The local port is used to connect the Plasma-Ips and The remainig ports are used to connect the router to its neighbours
Visão Geral do Sistema (controle centralizado) Plasma-IP Separação entre comunicação e computação NI/DMA: envia e recebe pacotes PLASMA: executa a tarefa RAM: true dual port memory arquitetura MIPS código aberto pipeline 3 estágios compilador gcc interrupções To achieve high performance in the processing elements, the Plasma-IP architecture targets the separation between communication and computation. The network interface and DMA modules send and receive packets while the Plasma processor performs task computation and wrapper management. The local RAM is a true dual port memory supporting simultaneous processor and DMA accesses
Visão Geral do Sistema (controle distribuído) O MPSoC contém três tipos de PEs: Mestre Global (GMP) : contém todas as funções do LMP, e as funções relacionadas com a gerência global do sistema Acesso ao Repositório de Aplicações Mestres Locais (LMP) : responsáveis pelo controle dos clusters Escravos (SP) : responsáveis pela execução das tarefas The system contains a master processor (Plasma-IP MP), which is the system resources manager. It is the only processor having access to the task repository. During the system execution, tasks are dynamically loaded from the task repository to slave processors on demand. And when a given task finishes its execution the a system resource becomes available again. Such/This dynamic behavior enables smaller systems, since only required tasks are loaded into the system at any given moment. - The remainig processors are slave processors - Each one runs a microkernel supporting multitasking and task communication - The slave processors main function is to execute the application tasks
Visão Geral do Sistema Memória de cada processador Organizada em páginas A primeira página contém o microkernel multitarefa microkernel task
Visão Geral do Sistema Aplicações modeladas através de grafo de tarefas Cada aplicação possue seu próprio grafo de tarefas Tarefas iniciais não possuem dependências
MPSoC HeMPS Características relevantes do MPSoC HeMPS: Processamento homogêneo Utilização de rede intrachip (NoC) Memória distribuída Comunicação por troca de mensagens Organização de memória paginada
Outline Visão Geral do Sistema Camadas Envolvidas na Comunicação Serviços do Microkernel Integração Processador à NoC Gerência Distribuída de Recursos
Camadas envolvidas na comunicação Aplicação (software) Composta por tarefas Comunica-se com o microkernel através de chamadas de sistema (envio e recebimento de mensagens) Ex: Envio de mensagem para outro processador Aplicação Aplicação Microkernel Microkernel Wrapper Processador NoC Wrapper Processador NoC Meio de Interconexão - NoC
Camadas envolvidas na comunicação Microkernel (software) Gerenciamento das tarefas Trata interrupções, chamadas de sistema e escalona tarefas Monta pacotes com mensagens e envia ao wrapper Aplicação Aplicação Microkernel Microkernel Wrapper Processador NoC Wrapper Processador NoC Meio de Interconexão - NoC
Camadas envolvidas na comunicação Wrapper (hardware) Interface de comunicação entre o processador e a NoC Recebe o pacote do MicroKernel armazenando-o em um buffer Envia o pacote através da NoC dividindo-o em flits Wrapper realiza segmentação/remontagem Aplicação Aplicação Microkernel Microkernel Wrapper Processador NoC Wrapper Processador NoC Meio de Interconexão - NoC
Camadas envolvidas na comunicação NoC (hardware) Realiza a interconexão dos processadores Encaminha os flits dos pacotes ao processador destino Aplicação Aplicação Microkernel Microkernel Wrapper Processador NoC Wrapper Processador NoC Meio de Interconexão - NoC
Camadas envolvidas na comunicação Wrapper Recebe da NoC flits referentes ao pacote Armazena-os no buffer de recebimento Interrompe o processador para passar o pacote ao microkernel Aplicação Aplicação Microkernel Microkernel Wrapper Processador NoC Wrapper Processador NoC Meio de Interconexão - NoC
Camadas envolvidas na comunicação Microkernel Lê o pacote do wrapper Identifica a tarefa Escreve na memória da aplicação Aplicação Aplicação Microkernel Microkernel Wrapper Processador NoC Wrapper Processador NoC Meio de Interconexão - NoC
Camadas envolvidas na comunicação Aplicação Recebe a mensagem através do pedido de leitura da mensagem Aplicação Aplicação Microkernel Microkernel Wrapper Processador NoC Wrapper Processador NoC Meio de Interconexão - NoC
Outline Visão Geral do Sistema Camadas Envolvidas na Comunicação Serviços do Microkernel Integração Processador à NoC Gerência Distribuída de Recursos
Serviços do Microkernel Carregamento de códigos-objeto A microkernel e as tarefas são implementados em linguagem C e Assembly Cada código objeto é carregado em uma página
Serviços do Microkernel Múltiplas tarefas: organizadas em páginas Instrução no mkernel executada após interrupção ou escalonamento: mtc0 offset,$10
Serviços do Microkernel Task Control Blocks (TCBs) Informações da tarefa necessárias para seu controle typedef struct{ unsigned int reg[30]; unsigned int pc; unsigned int offset; unsigned int id; unsigned int status; }TCB; Registradores da tarefa Argumentos Retorno Temporários Salvos
Serviços do Microkernel Task Control Blocks (TCBs) Informações da tarefa necessárias para seu controle typedef struct{ unsigned int reg[30]; unsigned int pc; unsigned int offset; unsigned int id; unsigned int status; }TCB; Program Counter Última instrução executada
Serviços do Microkernel Task Control Blocks (TCBs) Informações da tarefa necessárias para seu controle typedef struct{ unsigned int reg[30]; unsigned int pc; unsigned int offset; unsigned int id; unsigned int status; }TCB; Endereço da memória onde inicia a tarefa Indica a página
Serviços do Microkernel Task Control Blocks (TCBs) Informações da tarefa necessárias para seu controle typedef struct{ unsigned int reg[30]; unsigned int pc; unsigned int offset; unsigned int id; unsigned int status; }TCB; Identificador da tarefa Numérico Global
Serviços do Microkernel Task Control Blocks (TCBs) Informações da tarefa necessárias para seu controle typedef struct{ unsigned int reg[30]; unsigned int pc; unsigned int offset; unsigned int id; unsigned int status; }TCB; Estado da Tarefa ready running waiting terminated
Serviços do Microkernel Escalonamento preemptivo sem prioridades algoritmo Round Robin somente tarefas no estado ready são escalonadas Controlado por interrupção um timer define o momento do escalonamento o tempo por tarefa é denominado timeslice (parametrizável) tx ty tz
Serviços do Microkernel Tratamento de interrupções interrupções advindas do contador de timeslice da NoC (chegada de pacotes) do software (chamadas de sistema) Exemplo: operações de escrita/leitura nos pipes de mensagens rotina de tratamento: endereço fixo 0x3C para contador de timeslice e chegada de pacotes 0x4C para chamadas de sistema
Serviços do Microkernel Para fim de timeslice e interrupções da NoC 1º passo: salvamento dos registradores e pc no TCB da tarefa suspensa 2º passo: Identificar a interrupção ocorrida e tratá-la Fim de timeslice: escalonamento Interrupção da NoC (chegada de pacotes): driver de comunicação 3º passo: Carregamento do TCB da tarefa escalonada (escalonamento) ou suspensa (chegada de pacotes)
Serviços do Microkernel Comunicação entre tarefas ocorre através de pipes Espaço de memória reservada para armazenamento de mensagens primitivas que geram chamadas de sistema WritePipe(&mensagem, id_destino) ReadPipe(&mensagem, id_fonte)
Serviços do Microkernel typedef struct { unsigned int remote_addr; /* Remote processor address */ unsigned int pkt_size; /* NoC packet size (flits) */ unsigned int service; /* Service identifier */ unsigned int local_addr; /* Local processor address */ unsigned int target; /* Target task */ unsigned int source; /* Source task */ unsigned int length; /* Message lenght (32 bits words)*/ unsigned int message[MSG_SIZE]; enum PipeSlotStatus status; } PipeSlot; PipeSlotStatus {EMPTY, LOCKED, USED};
Serviços do Microkernel Comunicação Local Tarefas da mesma CPU t3 tenta enviar msg para t2
Serviços do Microkernel Comunicação Local Tarefas da mesma CPU t3 tenta enviar msg para t2 Microkernel tem espaço no pipe? Copia msg para o pipe
Serviços do Microkernel Comunicação Local Tarefas da mesma CPU t2 tenta receber a msg de t3
Serviços do Microkernel Comunicação Local Tarefas da mesma CPU t2 tenta receber a msg de t3 Microkernel t3 é local?
Serviços do Microkernel Comunicação Local Tarefas da mesma CPU t2 tenta receber a msg de t3 Microkernel t3 é local? tem msg de t3 para t2? Copia msg do pipe para página da tarefa
Serviços do Microkernel Comunicação Remota t2 tenta enviar msg para t5
Serviços do Microkernel Comunicação Remota t2 tenta enviar msg para t5 Microkernel tem espaço no pipe? Copia msg para o pipe
Serviços do Microkernel Comunicação Remota t5 tenta receber msg de t2 Microkernel t2 é local?
Serviços do Microkernel Comunicação Remota t5 tenta receber msg de t2 Microkernel t2 é local? Requisita mensagem
Serviços do Microkernel Comunicação Remota t5 tenta receber msg de t2 Microkernel t2 é local? Requisita mensagem Destino recebe requisição Tem msg para t5?
Serviços do Microkernel Comunicação Remota t5 tenta receber msg de t2 Microkernel t2 é local? Requisita mensagem Destino recebe requisição Tem msg para t5? Envia msg para t5 Driver recebe msg
Serviços do Microkernel Comunicação Remota t5 tenta receber msg de t2 Microkernel t2 é local? Requisita mensagem Destino recebe requisição Tem msg para t5? Envia msg para t5 Driver recebe msg Copia para a página de t5
Serviços do Microkernel Estrutura dos pacotes de Aplicações e Tarefas typedef struct { int id; int code_size; int initial_address; int proc; int dependences_number; DependencePackage dependences[10]; } TaskPackage; int size; TaskPackage tasks[MAX_APP_SIZE]; } ApplicationPackage;
Serviços do Microkernel Lista de Serviços MESSAGE_REQUEST 0x00000010 MESSAGE_DELIVERY 0x00000020 TASK_ALLOCATION 0x00000040 TASK_ALLOCATED 0x00000050 TASK_REQUEST 0x00000060 TASK_TERMINATED 0x00000070 TASK_DEALLOCATED 0x00000080 LOAN_PROCESSOR_RELEASE 0x00000090 DEBUG_MESSAGE 0x00000100 LOCATION_REQUEST 0x00000120 NEW_TASK 0x00000130 APP_TERMINATED 0x00000140 NEW_APP 0x00000150 INITIALIZE_CLUSTER 0x00000160 INITIALIZE_SLAVE 0x00000170 TASK_TERMINATED_OTHER_CLUSTER 0x00000180 LOAN_PROCESSOR_REQUEST 0x00000190 LOAN_PROCESSOR_DELIVERY 0x00000200
Outline Visão Geral do Sistema Camadas Envolvidas na Comunicação Serviços do Microkernel Integração Processador à NoC Gerência Distribuída de Recursos
Integração do Processor à NoC Envolve: Wrapper – hardware de interface Drivers – software de comunicação
Integração do Processor à NoC Wrapper Interface entre o processador e a NoC Receber dados do processador e enviar para a NoC Dividindo os dados em flits Receber dados da NoC e entregar ao processador
Integração do Processor à NoC Wrapper Interface com a NoC – envio de dados tx: informa à NoC que tem dados a enviar data_out: dado a ser enviado credit_i: informa se a NoC pode receber dados
Integração do Processor à NoC Wrapper Interface com a NoC – recebimento de dados rx: é informado pela NoC que tem dados para receber data_in: dado recebido credit_o: informa à NoC se pode receber dados
Integração do Processor à NoC Wrapper Como o processador “conversa” com o wrapper Instruções de leitura/escrita em memória Enviando dados ao wrapper: la $9, ADDR_WRITE sw $4, 0($9)
Integração do Processor à NoC Wrapper Como o processador “conversa” com o wrapper Instruções de leitura/escrita em memória Lendo dados ao wrapper: la $9, ADDR_READ lw $13, 0($9)
Integração do Processor à NoC Wrapper Os dados recebidos da NoC são armazenados em um buffer circular LAST LAST: Escreve no buffer um dado (flit) proveniente da NoC 16 bits 16 bits
Integração do Processor à NoC Wrapper Os dados recebidos da NoC são armazenados em um buffer circular LAST LAST: Escreve no buffer um dado (flit) proveniente da NoC 16 bits 16 bits
Integração do Processor à NoC Wrapper Os dados recebidos da NoC são armazenados em um buffer circular LAST LAST: Escreve no buffer um dado (flit) proveniente da NoC 16 bits 16 bits
Integração do Processor à NoC Wrapper Os dados recebidos da NoC são armazenados em um buffer circular LAST LAST: Escreve no buffer um dado (flit) proveniente da NoC 16 bits 16 bits
Integração do Processor à NoC Wrapper Os dados recebidos da NoC são armazenados em um buffer circular LAST LAST: Escreve no buffer um dado (flit) proveniente da NoC 16 bits 16 bits
Integração do Processor à NoC Wrapper Os dados recebidos da NoC são armazenados em um buffer circular LAST LAST: Escreve no buffer um dado (flit) proveniente da NoC 16 bits 16 bits
Integração do Processor à NoC Wrapper Os dados recebidos da NoC são armazenados em um buffer circular LAST LAST: Escreve no buffer um dado (flit) proveniente da NoC 16 bits 16 bits
Integração do Processor à NoC Wrapper Os dados recebidos da NoC são armazenados em um buffer circular LAST LAST: Escreve no buffer um dado (flit) proveniente da NoC 16 bits 16 bits
Integração do Processor à NoC Wrapper Os dados recebidos da NoC são armazenados em um buffer circular LAST LAST: Escreve no buffer um dado (flit) proveniente da NoC 16 bits 16 bits
Integração do Processor à NoC Wrapper Quando houver um pacote completo ou o buffer estiver cheio o wrapper interrompe a CPU FIRST: Lê do buffer um dado e o transfere para o processador FIRST 16 bits 16 bits
Integração do Processor à NoC Wrapper CPU lê 32-bits FIRST: Lê do buffer um dado e o transfere para o processador FIRST 16 bits 16 bits
Integração do Processor à NoC Wrapper CPU lê 32-bits FIRST: Lê do buffer um dado e o transfere para o processador FIRST 16 bits 16 bits
Integração do Processor à NoC Wrapper CPU lê 32-bits FIRST: Lê do buffer um dado e o transfere para o processador FIRST 16 bits 16 bits
Integração do Processor à NoC Driver de comunicação localizado no microkernel envio e recebimento de pacotes monta pacotes Serviços: Message_Request Message_Deliver
Integração do Processor à NoC Wrapper segmenta o pacote em flits Exemplo: O código C ReadPipe(&msg,5) da tarefa 1 gera um pacote de requisição de dados: Processador destino: 0010 Tamanho do pacote: 8 Serviço: Message_Request (00000010) Processador fonte: 0011 Tarefa destino: 1 Tarefa fonte: 5 NoC com flit de 16 bits
Outline Visão Geral do Sistema Camadas Envolvidas na Comunicação Serviços do Microkernel Integração Processador à NoC Gerência Distribuída de Recursos
Gerência Distribuída de Recursos Divide o MPSoC em n clusters com tamanhos iguais, definidos em tempo de projeto.
Gerência Distribuída de Recursos Vantagens dessa abordagem: O número de PEs dedicados à função de gerência é limitado ao número de clusters. A abordagem clusterizada reduz o número de hops entre tarefas pertencentes a uma mesma aplicação Não é necessário criar/destruir agentes toda a vez que uma nova aplicação entra/deixa o sistema MORAES: aqui dizer que é em relação ao estado da arte
Inicialização dos Clusters CADA LMP INFORMA PARA SEUS SPS, QUE ELE IRA SER SEU GERENTE GMP INFORMA TODOS OS LMPs QUAL REGIÃO ELE IRA GERENCIAR
Inserção de uma Nova Aplicação LMP procura um SP para Mapear as Tarefas Inicias da Aplicação GMP obtém o código objeto da Tarefa no Repositório de Aplicações GMP programa o módulo de DMA para alocar a Tarefa no SP selecionado LMP encontra um SP disponível LMP envia uma mensagem para o GMP mapear a Tarefa GMP obtem a Descrição da Aplicação no Repositório de Aplicações GMP programa o módulo de DMA para enviar para o LMP do Cluster escolhido GMP encontra uma Cluster para a Aplicação Requisição de uma nova Aplicação GMP executa a heurística de “Seleção de Cluster” app
Processo de Mapeamento de Tarefas LMP executa a heurística de Mapeamento de Tarefas LMP escolhe um PE para mapear a Tarefa SP requesita uma Tarefa para o seu LMP O LMP informa para os PES as posições das Tarefas O GMP aloca a Tarefa no PE selecionado O GMP obtém o código-objeto da Tarefa LMP requisite a alocação da Tarefa para o GMP
Gerência com Regiões Dinamicamente Adaptadas às Aplicações Processo de Reclusterização: Ajuste em tempo de execução do tamanho de um determinado cluster. aumento do tamanho do cluster, por indisponibilidade de recursos migrar tarefas que foram mapeadas em clusters vizinhos, com o objetivo de melhorar o desempenho das aplicações MORAES: aqui dizer que é em relação ao estado da arte
Aumento Dinâmico do Tamanho do Cluster O LMP recebe todas as mensagens e escolhe qual recurso irá usar O LMP libera os recursos que não utilizará O LMP requisite para o GMP a alocação da Tarefa O GMP aloca a Tarefa no SP selecionado Os LMPs vizinhos respondem a “Requisição de Empréstimo” Os LMPs vizinhos buscam recursos em seus clusters SP requesita uma Tarefa para o seu LMP LMP executa a heurística de Mapeamento de Tarefas LMP não encontrou recursos disponíveis em seu Cluster LMP envia uma “Requisição de Empréstimo” para seus Clusters vizinhos Os LMPs reservam seus recursos
Migração de Tarefas É condicionado não apenas à existência de recursos livres, mas também ao ganho de desempenho pela redução do número de hops entre as tarefas comunicantes Características da Migração de tarefas: As tarefas podem ser migradas a qualquer momento Migração de tarefa completa, incluindo contexto, código e dados Mensagens são entregues em ordem, conforme foram criadas
Migração de Tarefas
Migração de Tarefas
Migração de Tarefas
Migração de Tarefas
Perguntas?