• Nenhum resultado encontrado

2 Fundamentação Teórica

2.2 Mapeamento de Tarefas

Um conceito que permeia todo o trabalho é o de aplicação. Uma aplicação é um programa que irá executar no MPSoC. Neste contexto, representa-se uma aplicação por um grafo dirigido e ponderado G = (V, A), composto por |V | vértices e |A| arestas. Os vértices de G representam as tarefas da aplicação e as arestas correspondem às comunicações realizadas entre cada par de tarefas. Cada aresta ai, 1 ≤ i ≤ |A|, está associada a um

valor vi, que se refere à quantidade de informação transferida entre as tarefas conectadas

por ai.

O mapeamento de tarefas aqui estudado consiste em encontrar a melhor configuração de alocação das tarefas de uma determinada aplicação com o objetivo de prover melhora de desempenho. O termo desempenho pode ser entendido como qualquer métrica de avaliação de performance (latência, consumo de energia, dissipação de potência, etc) que se esteja otimizando, sendo ela para o processamento das tarefas ou para as comunicações. Contudo, como já mencionado, neste trabalho, objetivamos otimizar latência de comunicação. A Figura 5 apresenta a representação gráfica de uma aplicação, onde cada uma de suas tarefas está sendo mapeada a um núcleo diferente do MPSoC.

O problema de alocação de tarefas já é bastante estudado na literatura de otimiza- ção de MPSoCs baseados em NoC e é conhecido como Problema de Mapeamento (PM) (BOKHARI, 1981). A sua ampla exploração se dá pela sua grande importância do projeto dos MPSoCs assim também como a sua complexidade. Por se caracterizar como um pro- blema NP -Difícil, conforme o número de tarefas das aplicações e a quantidade de núcleos do sistema cresce, a exploração do espaço de busca se torna exponencial, sendo impossível encontrar soluções exatas para aplicações e MPSoCs baseados em NoC com mais do que 25 tarefas e núcleos, respectivamente (TOSUN et al., 2015).

Na literatura de otimização combinatória, existe outro problema NP -Difícil bastante explorado que é o Problema Quadrático de Alocação (do inglês, Quadratic Assignment Problem - QAP), formulado em 1957 por (KOOPMANS; BECKMANN, 1957). Esse problema

Figura 5: Representação do mapeamento de uma aplicação nos núcleos de um MPSoC baseado em NoC com topologia mesh 2D.

trata da alocação de facilidades em localidades objetivando a minimização do fluxo entre facilidades vezes a distância entre as respectivas localidades (FINKE; BURKARD; RENDL, 1987). O QAP é um problema clássico de otimização que possui diversas aplicações na vida real, como por exemplo modelagem do custo de transporte de materiais entre várias indústrias situadas em locais diferentes; layout de salas de hospitais baseando-se no fluxo de pessoas (pacientes, médicos e enfermeiros); comunicações de aeronaves; definição de layout de circuitos integrados; entre muitos outros. O grande interesse dos pesquisadores da área de otimização por esse problema vem da sua complexidade, pois como demons- trado no trabalho de (SAHNI; GONZALEZ, 1976), esse problema é tão difícil, que encontrar uma solução aproximada sob algum fator constante da solução ótima não pode ser feito em tempo polinomial a menos que P = N P .

Para o PM, um dos fatores determinantes para a minimização da latência é a mi- nimização do fluxo de comunicações na rede. Isso pode ser entendido como a soma da quantidade de informação trocada entre cada um dos pares de tarefas multiplicado pela quantidade de canais efetivamente usados nas respectivas comunicações (que interconec- tam os núcleos nos quais as tarefas foram alocadas). Neste sentido, se considerarmos que todas as comunicações ocorrem simultaneamente, o PM, com critério de minimização da latência, se reduz a uma instância do QAP. O trabalho de (PASCUAL; LOZANO; ALONSO, 2010) apresenta a formulação do PM como sendo uma instância do QAP, considerando a latência como critério de avaliação de desempenho da rede.

2.2.1

Classificação

O mapeamento de tarefas pode ser classificado de acordo com vários critérios, dentre eles temos com relação ao tempo em que é realizado e pela quantidade de tarefas mape- adas por núcleo (CARVALHO, 2009) (MANDELLI, 2011). Considerando o tempo em que o mapeamento é realizado, podemos classificá-lo em:

• Estático (ou offline): Usa-se essa técnica quando se tem conhecimento do compor- tamento de execução da aplicação. Na alocação estática, a otimização é aplicada em tempo de compilação, ou seja, antes da aplicação começar a executar, logo pode-se fazer uso de estratégias de otimização que fazem uma melhor exploração no espaço de busca de soluções, obtendo soluções muito próximas da solução ótima (ou mesmo a ótima).

• Dinâmico (online): Usa-se essa técnica quando não se tem conhecimento do com- portamento de execução da aplicação. Na alocação dinâmica a otimização é feita em tempo de execução, logo o tempo da otimização é um fator que influencia bastante na execução das aplicações. Nesta técnica é feito o uso de estratégias simples e rápi- das que consigam entregar ao sistema soluções de alocações de qualidade conforme a demanda de requisição de alocação de tarefas no sistema varia.

Com relação à classificação considerando a quantidade de tarefas mapeadas por núcleo, temos as seguintes:

• Monotarefa: Quando cada núcleo executa apenas uma única tarefa por vez. Essa otimização é mais simples e menos custosa, pois leva em consideração apenas a alocação de uma tarefa individualmente, não sendo necessário qualquer outra com- putação à priori.

• Multitarefa: Quando cada núcleo pode executar mais de uma tarefa. Para a apli- cação desta técnica torna-se necessária a divisão das tarefas a serem alocadas em vários grupos. As tarefas de cada grupo possuem alguma afinidade entre si, podendo essa afinidade ser definida em termos de troca de comunicação entre elas, o tempo de alocação e execução de cada uma delas, dentre outros. Note que, em termos de otimização, após a definição dos grupos o problema é tratado como uma alocação monotarefa, onde considera-se um grupo como sendo uma tarefa.

Além das classificações anteriormente descritas, quando se trabalha no contexto de alocação dinâmica de tarefas, pode-se classificar o mapeamento de acordo com a entidade responsável por realizar a alocação das tarefas em tempo de execução. São elas:

• Centralizado: Neste caso um único núcleo é responsável por receber as requisições de alocação de novas tarefas e aplicações no sistema, buscar o código da tarefa requisitada na memória, executar a estratégia de alocação dinâmica e aplicar a alocação nos locais (núcleos) especificados pela solução da otimização.

• Distribuído: Nesta abordagem o sistema é dividido em cluster. Cada cluster tem um único núcleo que é responsável por receber as requisições de alocação de novas tarefas e aplicações no sistema, buscar o código da tarefa requisitada na memória, executar a estratégia de alocação dinâmica e aplicar a alocação nos locais (núcleos) especificados pela solução da otimização.

2.3

Roteamento

O roteamento é a definição do caminho percorrido entre cada comunicação dos pares de tarefas que se comunicam em uma aplicação (ZEFERINO, 2003a). Existem vários tipos de roteamentos diferentes. Uma classificação mais abrangente considera a previsibilidade dos caminhos percorridos. Neste caso, classificamos por determinísticas as estratégias nas quais sabe-se, deterministicamente, quais caminhos uma determinada comunicação irá percorrer, e classificamos por não determinístico, quando não se sabe esses caminhos, podendo eles variarem de acordo com o desempenho do sistema. Roteamentos não de- terminísticos podem ser subdivididos em totalmente não determinísticos ou adaptativos, que são aqueles onde qualquer caminho pode ser tomado, incluindo os que se afastam do destino, e semi-determinísticos ou semi-adaptativos, que são aqueles onde apenas os caminhos que se aproximam do destino podem ser tomados (MANDELLI, 2011).

De acordo com (HU; MARCULESCU, 2003b), roteamentos determinísticos são mais indi- cados para compor o projeto de NoCs regulares. Isso pelo fato de o roteamento adaptativo necessitar de mais recursos, pois como os pacotes podem ser enviados fora de ordem, para poder ordená-los é requerido mais espaço de bufferização nos roteadores da NoC. Além disso, tem-se maior atraso na entrega dos pacotes devido ao custo vinculado aos protoco- los de comunicação. Contudo, os não determinísticos têm a vantagem de conseguir evitar grandes congestionamentos na rede, pois as rotas podem ser definidas baseando-se em métricas de desempenho.

Existem alguns algoritmos de roteamento determinísticos para NoCs com topologia mesh 2D bastante usados na literatura, dentre eles podemos citar o XY e Odd-Even, os quais usam a abstração de coordenadas cartesianas. A Figura 6 ilustra como é a abstração por coordenadas cartesianas de um MPSoC baseado em mesh 2D.

Figura 6: Representação de um MPSoC baseado em NoC com topologia mesh 2D abstraído como coordenadas cartesianas.

O algoritmo XY, partindo da origem, toma o caminho da coordenada X até a coluna onde está o destino e então toma a coordenada Y até chegar ao destino. Já o Odd- Even, similar ao XY, também considera a representação por coordenadas cartesianas, porém restringe os caminhos que podem ser tomados. Esse algoritmo considera as direções Norte, Sul, Leste e Oeste e se baseia nas seguintes regras: nenhum pacote pode percorrer o caminho Leste → Norte, se ele parte de um roteador de coordenada X par; nenhum pacote pode percorrer o caminho Norte → Oeste, se ele parte de um roteador de coordenada X ímpar; nenhum pacote pode percorrer o caminho Leste → Sul, se ele parte de um roteador de coordenada X par e, por fim, nenhum pacote pode percorrer o caminho Sul → Oeste, se ele parte de um roteador de coordenada X ímpar (SHRIMAWALE; GAIKWAD, 2013).

Contrário aos algoritmos determinísticos anteriormente citados, quando se considera os roteamentos não determinísticos pode-se fazer uso de heurísticas que avaliam todos os pares de tarefas comunicantes tentando encontrar a melhor configuração de roteamento para cada uma delas. Os algoritmos que podem ser usados são os amplamente estudados em teoria dos grafos, como o de Dijkstra, Floyd-Warshall, dentre outros (CORMEN et al., 2009).

2.3.1

Desafios de Projeto

Alguns cuidados devem ser tomados quando se trabalha com roteamento de tarefas, para que as mensagens sejam entregues ao destino. Esses cuidados se resumem em evi- tar problemas como starvation, livelock e deadlock. Detalhes sobre esses problemas são descritos a seguir:

• Starvation: Ocorre devido às políticas de prioridade aplicadas pelos árbitros dos roteadores. Em situações de tráfego intenso, várias requisições são enviadas ao ár- bitro e este, por sua vez, aplica o critério de prioridade para a escolha de quais requisições atender. Caso essa política não seja justa, alguns pacotes podem ficar presos nos buffers dos roteadores por um tempo indefinido, não sendo entregue ao seu destinatário, causando a situação de starvation.

• Livelock : Pode ocorrer no uso de estratégias de roteamento não determinísticas, onde um pacote pode trafegar indefinidamente na rede, e não ser entregue ao seu destinatário.

• Deadlock : É o problema mais grave, pois ele pode ocasionar a paralisação das co- municações na rede. Esse problema ocorre em casos de dependências cíclicas, quando mensagens que já estão sendo transferidas por canais (já alocaram recursos), requi- sitam a transferência por outros canais que também já estão trafegando mensagens (recursos já alocados).

Em geral, o problema de starvation é resolvido através dos mecanismos de arbitragem, já o livelock e o deadlock são resolvidos exclusivamente pelos algoritmos de roteamento adotados (ZEFERINO, 2003a).

De acordo com (HU; MARCULESCU, 2003b), o roteamento mais apropriado para uma NoC deve ser determinístico, deadlock-free, mínimo e que use chaveamento por pacote do tipo wormhole (MOHAPATRA, 1998). O roteamento que é proposto neste trabalho, no modelo do Problema de Mapeamento e Roteamento (PMR) apresentado na seção 4.1, se baseia nesta argumentação. O algoritmo é determinístico, pois depois de traçado caminho ele não é modificado, é mínimo, o que é garantido pela função objetivo, e se baseia no chaveamento por pacote do tipo wormhole. A parte de roteamento do modelo do PMR não garante o roteamento gerado seja deadlock-free. Contudo, como será visto nos resultados experimentais usando o roteamento do modelo (roteamento Math apresentado na seção 5.3) não houveram problemas com deadlock para as propostas deste trabalho. Além disso,

as soluções geradas pelas math-heurísticas propostas, as quais usam a parte de roteamento do modelo do PMR em sua otimização, demonstraram um melhor escoamento do fluxo de informações na rede (ver seção 5.3.4.1).