• Nenhum resultado encontrado

Podemos dizer que a implementa¸c˜ao Gamma-Base foi um trabalho bem sucedido, e cumpriu sua principal aspira¸c˜ao, que foi realizar uma implementa¸c˜ao paralela e dis- tribu´ıda do formalismo Gamma, com suporte a programas com mais de uma rea¸c˜ao do tipo n-´aria. Entretanto, assim como em outras implementa¸c˜oes de Gamma reali- zadas, foram constatados problemas de eficiˆencia na execu¸c˜ao dos programas, uma vez que os modelos de escalonamento de tarefas eram muito simples, n˜ao suportando execu¸c˜ao concomitante entre v´arias rea¸c˜oes, ou ainda pelo fato de n˜ao haver, uma explora¸c˜ao adequada do potencial paralelismo no acesso ao multiconjunto, mesmo no escopo de uma ´unica rea¸c˜ao.

Tendo exposto o fato acima, foi proposto em [45, 48], um novo modelo de esca- lonamento para Gamma, no qual levou-se em conta a existˆencia de rea¸c˜oes n-´arias,

podendo estar presentes em qualquer n´umero, e todas atuando sobre o mesmo mul- ticonjunto. Nesta proposta foram discutidos trˆes relevantes problemas relacionados a este aspecto, que s˜ao: a sele¸c˜ao dos elementos do multiconjunto para teste das condi¸c˜oes de rea¸c˜oes; como distribuir esses testes entre os elementos de processa- mento; e como distribuir os processos no sistema f´ısico que executar´a os programas Gamma. A ideia era que o escalonador atuasse em tempo de compila¸c˜ao e execu¸c˜ao, de modo que elementos do multiconjunto pudessem ser adicionados ou removidos, incorrendo na poss´ıvel cria¸c˜ao de novos processos em tempo de execu¸c˜ao.

O algoritmo proposto para o novo modelo de escalonador teve como base o tra- balho desenvolvido em [49], que aborda o mapeamento ´otimo de sistemas com res- tri¸c˜oes sobre a vizinhan¸ca. Este mapeamento por sua vez, utiliza como representa¸c˜ao dos recursos compartilhados, grafos orientados finitos, al´em de t´ecnicas conhecidas como SER(Scheduling by Edge Reversal ) e MCC(Minimum Clique Covering) [50]. A dinˆamica b´asica do algoritmo consiste em partir de um grafo orientado ac´ıclico, e encontrar um n´o sink3, o qual poder´a executar. Depois, a cada passo, a revers˜ao de

arestas ´e aplicada, causando o surgimento de novos sinks. O n´umero de orienta¸c˜oes ac´ıclicas poss´ıveis do grafo, chamado per´ıodo, ´e finito, e por essa raz˜ao, em algum momento, tais orienta¸c˜oes come¸cam a se repetir, fazendo com que os respectivos sinks executem novamente. Isso faz com que n˜ao ocorram problemas como dead- locks ou starvation [10], visto que fica garantida a exclus˜ao m´utua no acesso aos recursos compartilhados, e tamb´em fica a garantia de que um n´o qualquer ser´a sink, e portanto executar´a, ao menos uma vez dentro do per´ıodo.

A implementa¸c˜ao deste novo escalonador poderia realmente trazer ganhos de eficiˆencia para a execu¸c˜ao de programas Gamma, mas por outro lado, devido a sua pol´ıtica mais elaborada, alguns custos adicionais poderiam aparecer, como por exemplo, custos de comunica¸c˜ao e sincroniza¸c˜ao entre os processos que representam os n´os do grafo, introduzidos pela pr´opria l´ogica necess´aria para manter a correta execu¸c˜ao do algoritmo de revers˜ao de arestas (SER+MCC). Para descobrir se os custos seriam superados pelo ganho de desempenho, seria preciso experimentar o escalonador, todavia, esta etapa n˜ao foi realizada, tendo o trabalho ficado somente como uma proposta para implementa¸c˜ao futura.

´

E nesse contexto que surgiu a ideia da solu¸c˜ao desenvolvida nesta disserta¸c˜ao (Gamma-GPU ), descrita no cap´ıtulo seguinte, na qual buscamos aumentar a eficiˆencia da execu¸c˜ao de programas Gamma, atrav´es de uma melhor explora¸c˜ao do paralelismo intr´ınseco ao formalismo, fazendo uso das Unidades Gr´aficas de Pro- cessamento (GPUs).

3sink ´e um v´ertice do grafo, onde todas as arestas que est˜ao conectadas ao mesmo, s˜ao direci- onadas a seu favor.

Cap´ıtulo 5

Gamma-GPU (Solu¸c˜ao

Desenvolvida)

Ap´os termos exposto no cap´ıtulo anterior, a implementa¸c˜ao de Gamma chamada de Gamma-Base, dedicaremos o presente cap´ıtulo para a solu¸c˜ao desenvolvida nesta disserta¸c˜ao, batizada de Gamma-GPU, que estendeu a solu¸c˜ao base, adicionando `a arquitetura do modelo uma nova e poderosa unidade de processamento paralelo, a GPU.

5.1

Proposta

Podemos sintetizar a proposta deste trabalho na seguinte senten¸ca:

“Mapear e implementar o paradigma de reescrita de multiconjuntos Gamma em uma arquitetura heterogˆenea de processamento paralelo, baseando-se em uma implementa¸c˜ao distribu´ıda j´a existente, e adicionando suporte ao uso das GPUs”.

Em outras palavras, o desafio foi estudar uma implementa¸c˜ao j´a existente de Gamma, e estender a mesma, de modo que passasse a ser capaz de utilizar a capaci- dade de processamento das GPUs, visando um potencial ganho de desempenho para os programas escritos em Gamma. Adicionalmente, o trabalho almejou fornecer uma abstra¸c˜ao para a programa¸c˜ao de GPUs, uma vez que o programador Gamma n˜ao precisa ter nenhum conhecimento sobre os detalhes de programa¸c˜ao das mesmas, pois esta tarefa fica a cargo do compilador Gamma-GPU, sendo transparente ao usu´ario.

A ideia de unificar estes dois conceitos em um mesmo escopo, ou seja, aliar o mo- delo computacional Gamma ao processamento das GPUs, surgiu de uma constata¸c˜ao que remete `a met´afora de rea¸c˜oes qu´ımicas de Gamma e ao modelo de paralelismo

adotado nas GPUs. Como vimos no Cap´ıtulo 3, a computa¸c˜ao das GPUs pode ser classificada como sendo do tipo SIMD (Single-Instruction, Multiple-Data) ou SIMT (Single-Instruction, Multiple-Threads), e consiste basicamente em aplicar um mesmo fluxo de instru¸c˜oes sobre fluxos de dados distintos, geralmente dispostos na forma de um array. Tal abordagem nos faz pensar em uma analogia direta com o para- digma do formalismo Gamma, no qual uma mesma rea¸c˜ao (instru¸c˜ao) pode ocorrer simultaneamente sobre mol´eculas distintas (dados), de modo que a verifica¸c˜ao da condi¸c˜ao de rea¸c˜ao pode ser realizada paralelamente sobre os elementos do multi- conjunto (array), e aquelas que satisfizerem tal condi¸c˜ao, poder˜ao ent˜ao executar a a¸c˜ao, que consiste na reescrita do multiconjunto.

As demais se¸c˜oes deste capitulo ser˜ao utilizadas para descrevermos a solu¸c˜ao Gamma-GPU, abordando temas como sua arquitetura, as modifica¸c˜oes realizadas no compilador Gamma, os detalhes da implementa¸c˜ao, e a an´alise de complexidade. Finalizaremos com a cita¸c˜ao de alguns trabalhos correlatos ao desenvolvido nesta disserta¸c˜ao.