ENGENHARIA DE COMPUTAÇÃO
IVE CARDOSO RODRIGUES
PARALELIZAÇÃO DE UM ALGORITMO DE CÁLCULO DE MAPAS
LOGÍSTICOS USADO PARA ESTUDO DO LIMIAR DO CAOS
Feira de Santana 2010
PARALELIZAÇÃO DE UM ALGORITMO DE CÁLCULO DE
MAPAS LOGÍSTICOS USADO PARA ESTUDO DO LIMIAR DO CAOS
Trabalho de Conclusão de Curso apresentada ao Departamento de Tecnologia, Curso de Engenharia de Computação da Universidade Estadual de Feira de Santana, como requisito parcial para a obtenção do título de Bacharel em Engenharia de Computação.
Orientador: Prof. Ângelo Amâncio Duarte
Feira de Santana 2010
Dedico este trabalho aos meus pais, minha irmã Carol, minha prima Bárbara e minha amada afilhada Bia.
O grande desenvolvimento dos computadores pessoais acompanhado do seu barateamento possibilitou a sua massiva popularização. Em 2008 estas máquinas já passavam de 1 bilhão segundo a empresa Gartner e em 2010 eles terão um crescimento de 20% segundo pesquisa realizada pela empresa International Data Group (IDC). Buscando suprir demandas por poder de processamento cada vez maiores, recursos computacionais de máquinas pessoais são disponibilizados através de um conjunto de computadores, que trabalham juntos para realizar uma mesma tarefa, denominado cluster. Neste contexto este trabalho tem como objetivo a paralelização da equação do mapa logístico, usado em sistemas dinâmicos discretos para determinar o limiar do caos, para viabilizar sua execução em um cluster Beowulf. Para tanto três estratégias de paralelização serão comparadas buscando estabelecer qual delas é a mais adequada para a solução do problema. O estudo demonstrou que quanto maior o fator de potência, o número de iterações, melhores os benefícios obtidos com a paralelização.
The great development of personal computers with its cheapness made possible its massive popularity. In 2008 1 billion of these machines have already been sold according to Gartner and in 2010 they would have a growth of 20%, according to market research company International Data Group (IDC). Seeking to provide increasing demands for power processing, the computational resources of personal machines are available through a set of computers, that work together to perform the same task, called cluster. Therefore, this work aims to create a parallel solution of the equation of the logistic map, used in discrete dynamical systems to determine the threshold of chaos, to enable its implementation in a cluster Beowulf. Thus three parallel strategies are compared attempting to establish which one is more suitable for solving this problem. The study showed that the higher the power factor, the number of iterations, the better the benefits of the parallelization.
LISTA DE FIGURAS
Figura 1 - Diagrama de uma execução da classe SISD. ... 15
Figura 2 - Diagrama da classe MISD. ... 15
Figura 3 - Diagrama da classe SIMD. ... 16
Figura 4 - Diagrama da classe MIMD. ... 17
Figura 5 - Máquina com memória compartilhada. ... 18
Figura 6 - Máquina com memória distribuída. ... 18
Figura 7 - Máquina com memória centralizada. ... 19
Figura 8 - PCAM. ... 22
Figura 9 - Algoritmo para o cálculo do mapa logístico. ... 30
Figura 10 - Distribuição de carga entre os processadores. ... 33
Figura 11 - Determinação e envio das tarefas no particionamento estático. ... 34
Figura 12 - Envio da média local no particionamento estático ... 35
Figura 13 - Envio da média global para todos os nós workers ... 35
Figura 14 - Seqüencia de operações do particionamento estático. ... 36
Figura 15 - Diagrama de tempo de execução do particionamento estático. ... 37
Figura 16 - Gráfico de speedup do paradigma manager/worker com particionamento estático. ... 47
Figura 17 - Gráfico de eficiência do paradigma manager/worker com particionamento estático. ... 48
Figura 18 - Gráfico de speedup do paradigma manager/worker com particionamento dinâmico (Tarefa 1). ... 50
Figura 19 - Gráfico de eficiência do paradigma manager/worker com particionamento dinâmico (Tarefa 1). ... 51
Figura 21 - Gráfico de speedup do paradigma manager/worker com particionamento dinâmico (Tarefa 2). ... 53
Figura 22 - Gráfico de eficiência do paradigma manager/worker com particionamento
dinâmico (Tarefa 2). ... 54
Figura 23 - Gráfico de speedup do paradigma manager/worker com particionamento dinâmico (Tarefa 3). ... 56
Figura 24 - Gráfico de eficiência do paradigma manager/worker com particionamento dinâmico (Tarefa 3). ... 57
Figura 25 - Gráfico de speedup do paradigma manager/worker com particionamento dinâmico (Tarefa 4). ... 59
Figura 26 - Gráfico de eficiência do paradigma manager/worker com particionamento dinâmico (Tarefa 4). ... 60
Figura 27 - Gráfico de speedup do paradigma manager/worker com particionamento dinâmico (Tarefa 5). ... 62
Figura 28 - Gráfico de eficiência do paradigma manager/worker com particionamento dinâmico (Tarefa 5). ... 63
Figura 29 - Gráfico de speedup do paradigma SPMD. ... 65
Figura 30 - Gráfico de eficiência do paradigma SPMD. ... 65
Figura 31 - Speedup total. ... 67
LISTA DE TABELAS
Tabela 1 - Classificação de acordo com Flynn. ... 14 Tabela 2 - Valores das variáveis da equação do mapa logístico... 29 Tabela 3 - Resultados coletados na execução do paradigma manager/worker com
particionamento estático. ... 46
Tabela 4 - Resultados coletados na execução do paradigma manager/worker com
particionamento dinâmico (Tarefa 1). ... 49
Tabela 5 - Resultados coletados na execução do paradigma manager/worker com
particionamento dinâmico (Tarefa 2). ... 51
Tabela 6 - Resultados coletados na execução do paradigma manager/worker com
particionamento dinâmico (Tarefa 3). ... 54
Tabela 7 - Resultados coletados na execução do paradigma manager/worker com
particionamento dinâmico (Tarefa 4). ... 57
Tabela 8 - Resultados coletados na execução do paradigma manager/worker com
particionamento dinâmico (Tarefa 5). ... 60
LISTA DE SIGLAS
CESDIS - Center of Excellence in Space Data and Information Sciences CPU - Central Processing Unit
GNU - General Public License
MIMD - Multiple Instruction Multiple Data MISD - Multiple Instruction Single Data MPI - Message Passing Interface
NOWs - Network of Workstations
PCAM - Partitioning, Communication, Agglomeration e Mapping SIMD - Single Instruction Multiple Data
SPMD - Single Program Multiple Data SISD - Single Instruction Single Data
UEFS - Universidade Estadual de Feira de Santana UFBA - Universidade Federal da Bahia
SUMÁRIO
1 Introdução ... 12
2 FUNDAMENTAÇÃO TEÓRICA ... 14
2.1 Arquiteturas Paralelas ... 14
2.1.1 Taxonomia clássica de Flynn ... 14
2.1.1.1 Single Instruction Single Data (SISD)... 15
2.1.1.2 Multiple Instruction Single Data (MISD) ... 15
2.1.1.3 Single Instruction Multiple Data (SIMD) ... 16
2.1.1.4 Multiple Instruction Multiple Data (MIMD) ... 16
2.1.2 Arquiteturas de memórias paralelas ... 17
2.1.2.1 Classificação de máquinas paralelas... 17
2.1.2.1.1 Memória Compartilhada/Não Compartilhada ... 17
2.1.2.1.2 Memória Distribuída/Centralizada... 18
2.1.3 Medidas de desempenho ... 19
2.1.3.1 Speedup ... 19
2.1.3.2 Eficiência ... 20
2.1.3.3 Lei de Amdahl ... 21
2.2 Elaboração de algoritmos paralelos ... 21
2.2.1 Particionamento ... 22 2.2.2 Comunicação ... 23 2.2.3 Aglomeração ... 24 2.2.4 Mapeamento ... 24 2.3 Paradigmas de paralelismo ... 25 2.3.1 Paradigma manager/worker ... 25 2.3.1.1 Particionamento estático ... 25 2.3.1.2 Particionamento dinâmico ... 26
2.3.2 Paradigma Single Program Multiple Data (SPMD) ... 27
2.4 Paradigmas de troca de mensagens ... 27
2.4.1 Interface de troca de mensagens (Message Passing Interface - MPI) ... 27
3 Metodologia ... 29
3.2 Implementação do algoritmo serial ... 30
3.3 Comparação de estratégias ... 31
3.4 Seleção de estratégias de paralelização ... 32
3.4.1 Paradigma manager/worker com particionamento estático do mapa logístico ... 34
4 EXPERIMENTOS E ANÁLISE DE RESULTADOS ... 42
4.1 Experimentos realizados ... 42
4.2 Resultados ... 45
4.2.1 Paradigma Manager/Worker com Particionamento Estático. ... 46
4.2.2 Paradigma Manager/Worker com Particionamento Dinâmico. ... 48
4.2.2.1 Paradigma Manager/Worker com Particionamento Dinâmico – Tarefa 1. ... 49
4.2.2.2 Paradigma Manager/Worker com Particionamento Dinâmico – Tarefa 2. ... 51
4.2.2.3 Paradigma Manager/Worker com Particionamento Dinâmico – Tarefa 3. ... 54
4.2.2.4 Paradigma Manager/Worker com Particionamento Dinâmico – Tarefa 4. ... 57
4.2.2.5 Paradigma Manager/Worker com Particionamento Dinâmico – Tarefa 5. ... 60
4.2.3 Paradigma SPMD. ... 63
4.3 Discussão ... 66
5 CONSIDERAÇÕES FINAIS ... 69
1
I
NTRODUÇÃOA fim de suprir a demanda pelo alto poder de processamento, algumas instituições disponibilizam parte de seus recursos computacionais na forma de clusters (PITANGA, 2003). Tais sistemas possuem características como: disponibilidade, desempenho, balanceamento de carga, escalabilidade, baixo custo e o uso maciço de software livre.
Um caso particular de problema que exige um alto poder de processamento e grandes volumes de memória é o cálculo do mapa logístico, bastante estudado por físicos e usado em sistemas dinâmicos discretos para determinar o limiar do caos cuja teoria reside no Teorema do Limite Central (TIRNAKLI; TSALLIS; BECK, 2009).
O estudo sistemático de fenômenos não-lineares, em particular os caóticos, tem sua origem por volta da década de 1960, conseqüência do cenário de análise de sistemas ser dominado por técnicas lineares e estas necessitarem de um grande poder de processamento que não estava disponível até então (MENEZES JÚNIOR, 2006). Portanto, o comportamento irregular de certos sistemas determinísticos não-lineares não era avaliado em sua totalidade e quando tal comportamento era manifestado em observações, era explicado tipicamente como estocástico, isto é, determinado pelas leis da probabilidade ou atribuída a alguma entrada externa aleatória ao sistema (KUGIUMTZIS; LILLEKJENDLIE; CHRISTOPHERSEN, 1994). Atualmente, a teoria do caos afirma que não apenas as entradas aleatórias resultam em comportamentos irregulares, estes também podem ser originados a partir de equações não-lineares puramente determinísticas (KANTZ; SCHREIBER, 2004).
Um sistema dinâmico é formado por um conjunto de estados denominado de espaço de estados que junto com uma regra determina o estado presente em função dos estados passados. Este sistema pode ser modelado através de um mapa que nada mais é do que um sistema dinâmico que evolui no tempo de uma forma discreta e que possui uma característica recursiva (FIEDLER-FERRARA; PRADO, 1994). O mapa logístico é um exemplo de mapa que modela um sistema não-linear bastante simples com apenas um parâmetro de entrada e que produz uma série temporal. Ele é definido pela Equação recursiva:
(1)
na qual x é a variável que está sendo mapeada (variável dinâmica) e a é o parâmetro do mapa. Segundo o Teorema do Limite Central a soma de muitas variáveis independentes aleatórias e com mesma distribuição de probabilidade sempre tende a uma distribuição normal.
2 FUNDAMENTAÇÃO
TEÓRICA
2.1 Arquiteturas Paralelas
Este capítulo aborda os conceitos referentes a arquiteturas paralelas, mostrando a taxonomia de Flynn bem como as medidas de desempenho referentes a este assunto, um método utilizado para o desenvolvimento de aplicações paralelas, principalmente em arquiteturas com memória distribuída, e os paradigmas usados na implementação deste projeto.
2.1.1 Taxonomia clássica de Flynn
Uma das classificações mais comumente usada é a classificação genérica de Flynn (FLYNN, 1972) que apesar de ter sua origem no início dos anos 70 ainda é válida. Esta taxonomia distingue as arquiteturas paralelas de acordo com duas dimensões independentes: instruções e dados. Os fluxos de instruções ou de dados podem ser múltiplos ou não e assim se combinam formando quatro classes distintas. A organização das classes é mostrada na Tabela 1.
Tabela 1 - Classificação de acordo com Flynn.
2.1.1.1 Single Instruction Single Data (SISD)
A classe SISD é caracterizada por um único fluxo de instruções atuar sobre um único fluxo de dados. Nesta classe se enquadram os computadores seriais que possuem execuções determinísticas, o tipo mais antigo e ainda hoje mais comum de computadores, como os microcomputadores pessoais e as estações de trabalho. Como é mostrado na Figura 1, em uma execução o fluxo de instruções (1) alimenta uma unidade de controle que ativa a unidade central de processamento, esta atua sobre um único fluxo de dados (2), que é lido, processado e reescrito na memória (ROSE; NAVAUX, 2008).
Figura 1 - Diagrama de uma execução da classe SISD.
Fonte: Rose e Navaux (2008).
2.1.1.2 Multiple Instruction Single Data (MISD)
Na classe MISD, múltiplos fluxos de instruções são alimentados por um único fluxo de dados (PATTERSON; HENNESSY, 1995), como visto na Figura 2. Isto
significa que várias unidades de processamento (P), cada uma contendo um fluxo de instruções próprio, atuam sobre um mesmo fluxo de dados. Apenas algumas poucas máquinas deste tipo foram implementadas.
Figura 2 - Diagrama da classe MISD.
2.1.1.3 Single Instruction Multiple Data (SIMD)
Nas máquinas da classe SIMD uma única instrução é executada ao mesmo tempo sobre múltiplos dados (ROSE; NAVAUX, 2008), como pode ser observado na Figura 3. Nesta classe o processamento é centralizado em uma única unidade de controle (C) composta por um único fluxo de instruções. Todos os processadores (P) recebem a mesma instrução e são capazes de executá-las de forma síncrona sobre um fluxo de dados, sendo que cada um executará um pedaço deste fluxo, em resumo, a mesma instrução será executada sobre diferentes dados. Neste caso, a unidade de memória (M) deve ser implementada como vários módulos de memórias independentes para que o processamento ocorra sobre várias posições de memória diferentes. Esta classe é mais adequada para problemas caracterizados por um elevado grau de regularidade, tais como gráficos e/ou processamento de imagem.
Figura 3 - Diagrama da classe SIMD.
Fonte: Rose e Navaux (2008).
2.1.1.4 Multiple Instruction Multiple Data (MIMD)
A classe MIMD engloba as máquinas que executam várias instruções em um fluxo de dados próprio, como mostrado na Figura 4. Isto quer dizer que, cada unidade central (C) recebe um fluxo de instruções específico que é enviado para cada unidade de processamento (P) para que o mesmo seja executado. Neste caso, cada processador pode executar o seu fluxo de instruções sobre um fluxo de dados próprio, podendo as execuções serem síncronas ou assíncronas, determinísticas ou não determinísticas.
Figura 4 - Diagrama da classe MIMD.
Fonte: Rose e Navaux (2008).
2.1.2 Arquiteturas de memórias paralelas
As máquinas paralelas concentram-se nas classes SIMD e MIMD, porém, para que elas realmente existam, a unidade de memória dessas máquinas não pode ser implementada como um único módulo de memória (ROSE; NAVAUX, 2008). Vários módulos de memória permitem que mais de uma operação seja executada por vez, o que garante o funcionamento destas máquinas.
2.1.2.1 Classificação de máquinas paralelas
As máquinas paralelas podem ser divididas em duas classes de acordo com a organização da sua memória (PATTERSON; HENNESSY, 1995; ROSE; NAVAUX, 2008):
2.1.2.1.1 Memória Compartilhada/Não Compartilhada
Memória compartilhada diz respeito a um único espaço de endereçamento em que todos os processadores têm acesso ao mesmo módulo de memória, que é compartilhado entre todos eles, como mostrado na Figura 5. Neste caso, todos os processadores acessam
a memória como um espaço de memória global, e as mudanças efetuadas por um processador são visíveis a todos os outros (ROSE; NAVAUX, 2008).
Figura 5 - Máquina com memória compartilhada.
Fonte: Rose e Navaux (2008).
Na memória não compartilhada cada processador possui o seu próprio espaço de endereçamento privado (cache), o que acarreta numa independência quanto a manipulação dos dados. Mudanças efetuadas por um processador não são visíveis aos outros, implicando numa comunicação explícita através de troca de mensagens (ROSE; NAVAUX, 2008).
2.1.2.1.2 Memória Distribuída/Centralizada
A distribuição de memória está relacionada com a localização física da memória. Uma memória distribuída é implementada em vários módulos e cada módulo deve estar fisicamente perto de um processador (ROSE; NAVAUX, 2008), como ilustrado na
Figura 6.
Figura 6 - Máquina com memória distribuída.
Memória centralizada é quando a memória encontra-se à mesma distância de todos os processadores, independentemente de ter sido implementada com um ou mais módulos, Figura 7 (PATTERSON; HENNESSY, 1995).
Figura 7 - Máquina com memória centralizada.
Fonte: Rose e Navaux (2008).
2.1.3 Medidas de desempenho
Alguns índices foram definidos com a finalidade de analisar e comparar o desempenho de programas e arquiteturas paralelas (CARVALHO JUNIOR, 2003). Existem diferentes índices que se dispõem a medir diferentes aspectos (MORRISON, 2003), porém nesta seção serão discutidos speedup e eficiência, os dois índices mais comuns, bem como a lei de Amdahl.
2.1.3.1 Speedup
O speedup (Sp) é definido como a relação entre o tempo gasto em uma execução
seqüencial ( ) de um programa e o tempo gasto em uma execução paralela ( ), com um número definido de processadores, do mesmo programa (FOSTER, 1995; MOLDOVAN, 1993):
O speedup deve ser um valor compreendido entre 1 e o número de processadores, considerando o tempo gasto com sincronização, comunicação e outros processos pertinentes à execução paralela (MORRISON, 2003):
(2)
Embora esta seja a situação esperada, nem sempre ela acontece. Quando a versão seqüencial de um programa é melhor do que a sua versão paralela o valor do speedup é menor do que 1, isto geralmente ocorre quando a quantidade de processos paralelos é grande a ponto de ser gasto muito tempo com o gerenciamento do processo paralelo e conseqüentemente aumentar em muito o tempo total da execução (CARVALHO JUNIOR, 2003).
O speedup ideal ou linear acontece quando o tempo de execução do programa seqüencial é igualmente distribuído entre os processadores. Isto quer dizer que as perdas relativas ao gerenciamento do paralelismo deixam de existir, e conseqüentemente o valor do speedup é igual a (MORRISON, 2003).
2.1.3.2 Eficiência
Eficiência ( ) é a relação entre o speedup e o número de processadores que participam de uma execução (MORRISON, 2003), como mostrado na Equação 3:
(3)
Um programa com speedup linear possui uma eficiência de 100%, o que equivale a dizer que os processadores estiveram ocupados com computação efetiva durante todo o tempo de execução, não gastando tempo com sincronização e controle de processos (CARVALHO JUNIOR, 2003).
2.1.3.3 Lei de Amdahl
Gene Amdahl (1967) propôs que o aumento de desempenho real, em termos de processamento de um sistema multiprocessador, depende de quanto o programa pode ser paralelizado e do número de processadores utilizados. Isto quer dizer que existe um limitante superior para ganho de desempenho de sistemas independente do número de processadores adicionados: a quantidade de código que precisa ser executado serialmente.
Fundamentado em dados experimentais, no final da década de 80, Gustafson (1988), propôs uma reformulação na Lei de Amdahl, baseado na idéia de que a proporção entre as porções seqüencial e paralelizável de um programa em geral varia de acordo com o tamanho do problema a ser resolvido. Em situações reais, o programador não fixa o tamanho do problema para execução em quantidades diferentes de processadores, a não ser em uma pesquisa acadêmica. Na prática, o tamanho do problema aumenta de acordo com os recursos disponíveis no sistema (número de processadores) visando obter resultados mais aperfeiçoados (GUSTAFSON, 1988).
2.2 Elaboração de algoritmos paralelos
Uma boa parte dos problemas de programação possuem diversas soluções paralelas e muitas vezes a solução seqüencial do problema, se esta existir, não é a melhor a ser paralelizada. Desta forma, Foster (1995) propõe um método para o desenvolvimento de programas paralelos chamado Partitioning, Communication, Agglomeration e Mapping (PCAM).
Como o próprio nome diz o PCAM é composto por quatro estágios: particionamento, comunicação, aglomeração e mapeamento. Nos dois primeiros, o foco é quanto a escalabilidade e concorrência, nos dois últimos o foco muda pra localidade e outros aspectos relacionados com o desempenho. Os quatro estágios podem ser vistos na Figura 8 e serão descritos a seguir.
Figura 8 - PCAM.
Fonte: Foster (1995).
Esta metodologia se propõe a tratar, primeiramente, questões que são independentes da arquitetura de máquina, como concorrência, e posteriormente aspectos específicos da arquitetura, visando maximizar a gama de possibilidades de paralelismo, fornecer embasamento para a avaliação das alternativas e reduzir os custos com os retrocessos causados pelas más escolhas.
2.2.1 Particionamento
A etapa de particionamento de um projeto destina-se a expor as várias alternativas de execução paralela. Um bom particionamento divide em pedaços pequenos, tanto o processamento associado a um problema como os dados a que este processamento está relacionado (FOSTER, 1995). Existem duas abordagens de particionamento paralelo: decomposição de domínio e decomposição funcional.
Na decomposição de domínio os dados associados ao problema são primeiramente decompostos. Dentro desta abordagem existem duas formas de balanceamento possíveis: o balanceamento estático e o dinâmico. No balanceamento estático os dados são divididos em pedaços pequenos, de tamanhos aproximadamente iguais, levando em consideração a quantidade de nós usados. Conseqüentemente cada nó sabe, ao iniciar uma execução, a
quantidade de dados que deve manipular. No balanceamento dinâmico um montante de dados que deve ser executado é determinado, e cada nó deve executá-los, cada operação é associada ao dado que deve ser executado. Este tipo de particionamento produz um número de tarefas associada a uma quantidade de dados e um conjunto de operações.
Na decomposição funcional o foco inicial está na computação que deve ser feita, e não no dado que tem que ser manipulado. Deve-se dividir o processamento em tarefas distintas, e depois examinar os dados necessários para realizar tais tarefas, estes também devem ser desmembrados.
As tarefas geradas pelo particionamento devem ser executadas concorrentemente, porém muitas vezes elas não conseguem ser executadas todas independentemente, pois a execução de uma tarefa pode necessitar de dados associados a uma outra tarefa. Então, para que uma determinada tarefa não fique parada, impedindo a execução total da aplicação, dados devem ser transferidos entre as tarefas. Este fluxo de informações é especificado na fase de comunicação.
2.2.2 Comunicação
A natureza do problema e o método de decomposição determinam, juntos, o padrão a ser utilizado entre as várias tarefas de um problema. Os padrões seguidos nesta fase são: local ou global, estruturado ou não estruturado, estático ou dinâmico, síncrono ou assíncrono.
Nas comunicações locais cada tarefa se comunica com um pequeno grupo de tarefas vizinho. Na global, cada tarefa deve se comunicar com muitas tarefas.
Nas comunicações estruturadas, uma tarefa e seus vizinhos formam uma estrutura regular como, por exemplo, uma árvore. Nas comunicações não estruturadas as redes de comunicação podem ser grafos arbitrários.
Nas comunicações estáticas a identidade dos parceiros de uma comunicação não muda, enquanto que, nas comunicações dinâmicas a identidade dos parceiros de uma comunicação deve ser determinada pelos dados executados no momento da computação e podem ser altamente variáveis.
Nas comunicações síncronas os pares de produtores (quem produz o dado) e consumidores (quem requer o dado) cooperam nas transferências. Nas assíncronas um consumidor pode obter um dado sem a cooperação de um produtor.
2.2.3 Aglomeração
Neste estágio, as decisões tomadas anteriormente, nos estágios de particionamento e comunicação, são revistas e avaliadas em termos de desempenho e custos de implementação. Havendo a necessidade de mudanças, visando a otimização do programa paralelo, as tarefas identificadas na primeira fase podem ser reagrupadas ainda mais havendo assim menos tarefas de maior tamanho. As comunicações também podem ser fundidas em uma super comunicação (FOSTER,1995).
2.2.4 Mapeamento
Nesta fase é especificado o nó em que cada tarefa deve executar. Cada tarefa é endereçada a um processador buscando maximizar a utilização de cada nó, ao mesmo tempo em que os custos com as comunicações são minimizados. O objetivo maior desta etapa é minimizar o tempo de execução total. Para tanto, duas estratégias são utilizadas (FOSTER, 1995):
• Tarefas que podem ser executadas concorrentemente são alocadas em diferentes processadores.
• Tarefas que se comunicam freqüentemente são colocadas em um mesmo processador. O mapeamento pode ser especificado de forma estática, antes da execução do programa ou determinado em tempo de execução por algoritmos de balanceamento de carga, explicado mais profundamente em BRANCO (2004).
2.3 Paradigmas de paralelismo
Esta seção aborda os conceitos das estratégias de paralelização usados na implementação deste projeto, os paradigmas aqui explicados são os mais citados na literatura.
2.3.1 Paradigma manager/worker
Como cada aplicação em paralelo é única, ao longo dos anos foi desenvolvido um grande número de paradigmas altamente aplicáveis, dos quais muitos algoritmos paralelos são derivados. Dentre essas abordagens, uma das mais populares é a “Manager/Worker” ou “paralelismo por tarefas” cuja idéia consiste em imputar a um manager ou gerente a divisão da tarefa em pedaços separados que podem ser atribuídos a workers individuais. Assim, o processo manager executa um algoritmo diferente daquele dos processos trabalhadores, mas todos os trabalhadores executam o mesmo algoritmo (GROPP; LUSK; STERLING, 2003).
O problema desta abordagem é que nem sempre haverá um número de workers para atender a todo o número de tarefas solicitadas. Desta forma, é necessária a criação de uma estrutura flexível para armazenar o número de tarefas que excederam a quantidade de trabalhadores disponível e atribuir dinamicamente uma nova tarefa a um trabalhador recém desocupado (GROPP; LUSK; STERLING, 2003).
O paradigma manager/worker possui duas formas de particionamento: particionamento estático e o particionamento dinâmico. As duas abordagens são explicadas a seguir.
2.3.1.1 Particionamento estático
O particionamento estático é caracterizado pela presença de um nó manager responsável pela divisão de tarefas entre os demais nós workers. Dados o número de nós trabalhadores e a tarefa inicial, o nó principal distribui faixas de trabalho da tarefa inicial
de mesmo tamanho, ou tamanho muito próximo, entre os nós workers. Cada nó worker recebe uma fatia fixa da população inicial, sobre a qual ele executa o seu cálculo.
Uma desvantagem deste método é que o nó manager fica subutilizado em relação aos demais nós, pois, todo o cômputo é realizado por eles. Uma vantagem, porém, é a reduzida comunicação entre os processos visto que todos os nós workers se comunicam apenas com o nó manager não havendo a necessidade de comunicação entre eles.
2.3.1.2 Particionamento dinâmico
No particionamento dinâmico o tamanho da tarefa é definido aleatoriamente, a tarefa não leva em conta o tamanho da população inicial nem a quantidade de nós workers que participarão da execução. Assim como no particionamento estático o nó manager também é responsável por determinar o tamanho da tarefa e posterior distribuição entre os demais nós até que toda a tarefa inicial tenha sido computada.
O nó manager envia a cada nó worker uma fatia da tarefa inicial e assim que um nó worker termina as interações de cômputo, ele envia uma nova requisição ao nó manager, solicitando mais uma região da tarefa inicial que ainda não participou da execução. Enquanto toda a tarefa inicial não for computada, o nó manager responde a estas solicitações enviando mais tarefas de tamanho fixo aos nós workers que fazem requisições.
Dependendo do tamanho escolhido para a carga alguns processadores podem ficar ociosos durante a execução ou mesmo não receber nenhuma tarefa, caso o número de tarefas seja inferior ao número de processadores.
O particionamento dinâmico acarreta um maior custo de comunicação, mas permite ao usuário especificar exatamente o tamanho da tarefa de cada processo, possibilitando experimentar um número muito maior de combinações de parâmetros. Esta possibilidade de avaliar combinações pode contribuir para a adaptação do problema a diferentes cenários e ambientes computacionais.
2.3.2 Paradigma Single Program Multiple Data (SPMD)
O paradigma SPMD permite apenas o particionamento estático. Ele difere do paradigma manager/worker por não destacar um nó manager para distribuir a tarefa de trabalho entre os demais nós. Os blocos de tarefas são divididos pelos próprios nós, cada nó operando sobre uma determinada faixa da tarefa inicial. Cada processador tem um identificador inteiro e a divisão da tarefa inicial é feita de acordo com a quantidade total de identificadores. O processo com identificador zero fica com a primeira região, o de identificador 1 fica com a segunda e assim por diante. Como não é preciso destacar um nó para distribuição de tarefas todas as máquinas são igualmente aproveitadas para o cômputo. Nesta abordagem os nós se comunicam entre si não havendo uma centralização das comunicações.
2.4 Paradigmas de troca de mensagens
A passagem de mensagens é um paradigma de programação paralela amplamente difundido em computação de alto desempenho e seu conceito básico consiste na comunicação de processos independentes através da troca de mensagens.
2.4.1 Interface de troca de mensagens (Message Passing Interface - MPI)
O principal objetivo do MPI é prover um padrão para o desenvolvimento de programas caracterizados pela passagem de mensagens de forma que a interface deve estabelecer mecanismos práticos, portáveis e eficientes para a troca de mensagens entre diferentes processos (SNIR et al.,1998). O padrão MPI, publicado em Junho de 1994, oferece topologia virtual com mecanismos de sincronização e comunicação entre processos de forma independente de linguagem.
Um outro importante objetivo do MPI, assim como o de outros padrões, é prover um grau de portabilidade entre diferentes plataformas e máquinas possibilitando que o mesmo código de passagem de mensagens possa ser executado em diferentes plataformas, desde que uma biblioteca MPI esteja disponível (SNIR et al., 1998). Mesmo que os
problemas de troca de mensagens sejam freqüentemente vistos no contexto de computadores paralelos de memória distribuída, um mesmo código MPI deve executar bem em uma máquina paralela de memória compartilhada, ou Network of Workstations (NOWs), rede de estações de trabalho interligados por uma rede local, ou ainda em vários processos em um computador pessoal.
Uma outra importante característica de projeto do MPI é permitir implementações eficientes para máquinas com diferentes características de performance e comunicação. O MPI evita especificar como as diversas operações devem ser feitas, indicando apenas como elas devem acontecer logicamente. Escondendo os detalhes sobre como entidades específicas do MPI devem ser representados, o padrão possibilita que cada implementação escolha a melhor arquitetura para diferentes circunstâncias.
O padrão MPI é direcionado a programadores que desejam desenvolver programas baseados em passagem de mensagens nas linguagens Fortran, C/C++. O padrão oferece uma interface de programação concisa e relativamente simples para o usuário familiarizado, mantendo ao mesmo tempo características de alto desempenho em troca de mensagens.
Atualmente o padrão apresenta algumas versões populares, como a versão 1.2 (MPI-1) (MPI FORUM, 2003a), a qual enfatiza especialmente as funcionalidades de troca de mensagens; a versão 2.1 (MPI-2) (MPI FORUM, 2003b), que inclui características como entrada e saída paralelas, gerenciamento dinâmico de processos, operações de memória remotas.
Programas MPI funcionam como processos e são normalmente associados de forma unívoca a cada núcleo em sistemas multicore ou Central Processing Unit (CPU) do sistema, com o objetivo de obter máximo desempenho (SNIR et al., 1998). A associação entre processos e CPUs é feita em tempo de execução por um agente que inicia o programa, normalmente chamado de mpirun ou mpiexec.
Nesse capítulo foram apresentados os conceitos de programação paralela mostrando o método de desenvolvimento de programas paralelos chamado PCAM. Este foi o método utilizado na implementação das estratégias de paralelização propostas neste trabalho.
3 M
ETODOLOGIANeste capítulo, serão discutidos os métodos empregados na implementação e comparação das estratégias de paralelização.
Neste trabalho, foram realizadas as seguintes etapas:
Reuniões com Robson Wilson Pessoa e seleção dos dados das execuções; Implementação do algoritmo serial;
Seleção de estratégias de paralelização e implementação dos algoritmos paralelos; Realização dos experimentos.
3.1 Definição dos parâmetros das execuções
A variável a da equação do mapa logístico define o tipo de resposta que o sistema terá como resultado. Um conjunto de valores foi considerado as execuções. Para cada valor da variável a foi associado uma quantidade de iterações 2pot que o algoritmo deve realizar. Os pares a e pot utilizados são mostrados na Tabela 2 (TIRNAKLI; TSALLIS;
BECK, 2009).
Tabela 2 - Valores das variáveis da equação do mapa logístico.
a pot 1.40209 9 1.401588 10 1.401354 11 1.401248 12 1.401198 13 1.401175 14 1.4011644 15 1.40115945 16
Foi definido que os tempos coletados em cada execução é a soma total dos tempos de cada par de variáveis a e pot.
3.2 Implementação do algoritmo serial
Segundo a equação do mapa logístico mostrada no Capítulo 1 foi implementado um algoritmo que executa o seu cálculo. O algoritmo é explicado através do fluxograma mostrado na Figura 9 - Algoritmo para o cálculo do mapa logístico.
Figura 9 - Algoritmo para o cálculo do mapa logístico.
Como pode ser visto no algoritmo primeiramente uma população de números randômicos deve ser gerada. Cada elemento da população inicial (xt) juntamente com os
valores definidos para a variável a na Seção 3.1 são calculados segundo a equação do mapa logístico 4096 (512) vezes com o objetivo de descartar os estados estacionários, estados estes que não interessam para a execução do mapa logístico (TIRNAKLI; TSALLIS; BECK, 2009). Para cada valor resultante (xt) é calculado N (2pot) vezes de
acordo com os valores de potência determinados na Seção 3.1 e esses valores são capturados. Todos os valores resultantes do cálculo são somados para realização do cálculo da média global. Para cada valor previamente capturado de um elemento da população inicial é subtraído o valor da média global, buscando com isso fazer um ajuste da população final.
3.3 Comparação de estratégias
A metodologia de comparação entre os diferentes tipos de particionamento e mapeamento consiste basicamente em observar qual deles proporciona um maior ganho em tempo de execução (speedup), associando esta informação à eficiência obtida com a paralelização. Com estas medidas é possível estimar qual estratégia é mais adequada para o problema, sob quais condições iniciais e a quantidade de processadores.
Para o mesmo conjunto de parâmetros iniciais (i.e. tamanho de população, parâmetro "a" e parâmetro "pot"), cada estratégia de paralelização é executada várias vezes, sendo coletados os tempos de execução, comunicação entre processos e de operações de entrada e saída de dados. Os tempos de execução paralela são, por sua vez, comparados ao tempo de execução seqüencial para a obtenção da medida de ganho (speedup). Finalmente, os tempos de comunicação e entrada e saída de cada metodologia são comparados ao tempo principal de execução como forma de obter medidas secundárias para avaliação.
Vale observar que, para o caso específico do particionamento dinâmico, cada execução é realizada também para diferentes tamanhos de blocos de dados (task sizes), com o intuito de verificar qual valor maximiza o ganho associado a estratégia.
3.4 Seleção de estratégias de paralelização
O problema computacional associado ao cálculo do mapa logístico decorre do grande volume de dados e iterações necessários para sua resolução. Embora o cômputo principal seja relativamente simples, de acordo com o hardware que será utilizado, este grande número de iterações exige um tempo de execução da ordem de semanas, ou meses, a depender do tamanho da população inicial utilizada.
Uma estratégia de paralelização deste problema consiste em decompor o volume de dados em "blocos" ou regiões menores e distribuir o cômputo em diferentes processadores de um cluster. No contexto da implementação proposta neste trabalho, o cálculo do mapa logístico deve ser feito sobre uma grande "população inicial" de números aleatórios sendo que esta população é inicialmente mantida em um arquivo de dados. A distribuição de carga é feita dividindo-se o arquivo em regiões, e cada nó recebe a informação de qual região do arquivo de números randômicos ele deve retirar o conteúdo para a sua execução. Cada nó carrega a sua região da população para a memória, coloca e executa o seu cálculo.
Desta forma, os blocos de trabalho são representados por regiões do arquivo inicial de números randômicos. Cada processador realiza exatamente as mesmas operações que os demais, porém sobre uma região diferente do espaço de dados. Pouca, ou nenhuma comunicação entre os processos é necessária para a realização das tarefas, como ilustrado na Figura 10.
Figura 10 - Distribuição de carga entre os processadores.
Fonte: Elaborada pelo próprio autor.
O resultado esperado consiste numa redução do tempo total de cômputo necessário para o cálculo do mapa logístico para grandes volumes de dados. A partir destas considerações, e dado um número limitado de processadores disponíveis para a paralelização, surgem os seguintes questionamentos:
a) Qual a melhor forma de dividir o espaço de dados entre as tarefas?
b) Qual a redução no tempo de execução diante de diferentes formas de decomposição?
c) A redução é linear, ou seja, quanto mais se decompor o espaço de dados, menor será o tempo de execução?
d) No caso da redução não ser linear, qual o limite máximo de decomposição para se obter o menor tempo de execução?
Com base nestes questionamentos este trabalho apresenta a implementação e comparação de dois paradigmas de paralelização: Manager/Worker (usando particionamento estático e dinâmico) e SPMD; a primeira destaca um processo específico, chamado manager, para a decomposição e distribuição dos limites de dados entre as demais tarefas, diferindo apenas com relação a determinação do volume de dados
delimitado para cada processo. A segunda, SPMD, que possui apenas o particionamento estático propõe um mecanismo onde todas as tarefas coordenam-se para obter a melhor divisão dos dados, sem o intermédio de um processo centralizado. As três estratégias de paralelização são descritas adiante.
3.4.1 Paradigma manager/worker com particionamento estático do mapa logístico
O particionamento estático é caracterizado pela presença de um nó principal chamado de manager responsável pela divisão de tarefas entre os demais nós chamados de workers de acordo com o tamanho da tarefa inicial e da quantidade de processadores que participarão da execução. Cada nó trabalhador recebe uma fatia fixa da população inicial, sobre a qual ele executa as iterações da equação do mapa logístico, como é mostrado na Figura 11.
Figura 11 - Determinação e envio das tarefas no particionamento estático.
Fonte: Elaborada pelo próprio autor.
Após o cômputo do mapa logístico usando os elementos da população inicial recebidos, o nó worker retorna o valor da média local obtida ao nó manager, mostrado na
Figura 12 - Envio da média local no particionamento estático
Fonte: Elaborada pelo próprio autor.
O nó manager, por sua vez, calcula a média global da execução após receber todas as médias locais e envia para cada nó worker o valor da média global que será usada para realizar o ajuste de toda população. Ao final das iterações, cada nó salva os dados gerados no diretório de saída ilustrado na Figura 13.
Figura 13 - Envio da média global para todos os nós workers
Fonte: Elaborada pelo próprio autor.
Toda comunicação entre o nó manager e os nós workers é feita em dois momentos:
2. No envio das médias locais e global.
Uma desvantagem deste método é que o nó principal fica subutilizado em relação aos demais nós, pois, todo o cômputo é realizado por eles. A Figura 14 apresenta um diagrama de seqüencia do particionamento estático. Esta figura revela uma segunda desvantagem desta estratégia: o ajuste dos dados nos nós trabalhadores só pode ser feito depois que o nó principal calcula a média global, o que, por sua vez, só pode ser feito quando todos os nós realizam o cálculo das médias locais. Mesmo que um determinado processo termine mais rápido que os demais, ele deve esperar até que todos os nós terminem o seu cálculo parcial e o nó manager envie para todos os nós workers a média global calculada. Este intervalo de espera pode causar ociosidade de processadores.
Figura 14 - Seqüencia de operações do particionamento estático.
Fonte: Elaborada pelo próprio autor.
A Figura 15 ilustra as diferentes etapas do cômputo realizado entre os nós em função do tempo de execução.
Figura 15 - Diagrama de tempo de execução do particionamento estático.
Fonte: Elaborada pelo próprio autor.
3.4.2 Particionamento Dinâmico
No particionamento dinâmico o tamanho de carga é definido aleatoriamente, a carga não leva em conta o tamanho da população inicial nem a quantidade de nós workers que participarão da execução. Assim como no particionamento estático o nó manager também é responsável determinar o tamanho da tarefa e posterior distribuição entre os demais nós até que toda a população inicial tenha sido computada. A Figura 16 ilustra a determinação de carga entre os nós trabalhadores no particionamento dinâmico.
Figura 16 - Modelo de determinação de carga do particionamento dinâmico.
As diferentes etapas do cômputo realizado entre os nós em função do tempo de execução para o particionamento dinâmico de cargas.
3.4.3. Paradigma SPMD para o cálculo do mapa logístico
Após o cálculo do mapa logístico, as médias locais são inundadas na rede (broadcast). Como cada nó têm ciência do número total de processos, é possível determinar quando todas as médias locais foram recebidas. Os vários broadcasts realizados, por sua vez, podem aumentar significativamente o custo de comunicação entre
os processos com relação aos demais métodos de balanceamento. A figura resume a seqüencia de operações do paradigma SPMD, mostra a seqüencia de operações para um nó qualquer dentro do processo SPMD. A etapa de "Posicionamento" corresponde a distribuição de faixas do arquivo de números aleatórios (população inicial) de acordo com o identificador de cada processo.
Após o broadcast das médias locais, cada processo realiza o ajuste da população final e armazena os resultados no diretório de saída de dados. A Figura 26 ilustra o diagrama de tempo de execução do balanceamento SPMD.
4 EXPERIMENTOS
E
ANÁLISE
DE
RESULTADOS
Cada estratégia de paralelização foi observada em diferentes cenários. Foram variados parâmetros como número de processadores, quantidade de iterações e tamanho da população inicial, com o objetivo de estimar qual estratégia mais adequada. Ao todo foram realizados 1184 execuções para cada tamanho de população inicial. Este capítulo apresenta os parâmetros de execução necessários para a realização dos experimentos bem como os seus resultados.
4.1 Experimentos realizados
Utilizando a metodologia PCAM de implementação de algoritmos paralelos foram desenvolvidas três estratégias de paralelização para a resolução do mapa logístico. O objetivo deste estudo foi estimar qual o melhor método de paralelização da equação do mapa logístico, baseado nas informações de ganho em tempo de execução (speedup) e eficiência deste ganho com relação ao número de processos utilizados. Para realizar esta análise, os métodos de paralelização foram executados sob diferentes condições iniciais e comparados entre si.
Ao todo foram realizadas 1184 (mil cento e oitenta e quatro) execuções, sendo 8 (oito) de forma serial, cada uma usando um parâmetro de potência, 1176 (mil cento e
setenta e seis) de forma paralela, para cada parâmetro de potência uma execução usando de 3 a 23 nós de cômputo. Dentre as execuções paralelas, 168 (cento e sessenta e oito) foram feitas com particionamento Estático do paradigma manager/worker, 168 com o paradigma SPMD, e 840 (oitocentos e quarenta) com o particionamento dinâmico. A razão pela qual o particionamento dinâmico demandou cinco vezes mais execuções é por que foram avaliados cinco tamanhos de carga diferentes para cada conjunto de parâmetros iniciais da execução. A Tabela 3 apresenta os parâmetros iniciais do software de paralelização, enquanto a Tabela 4 apresenta os parâmetros de saída de cada experimento.
Tabela 3 - Parâmetros iniciais de execução.
Parâmetros Descrição Tipo de
Execução Número de processos Número de processos da execução utilizados na paralelização Paralelo População inicial
Tamanho da população a ser tratada pela equação
Paralelo/Serial Potência Representa o expoente da
equação do mapa logístico
Paralelo/Serial Fator a Representa o fator a da equação
do mapa logístico
Paralelo/Serial
Tipo de
execução
Diferencia entre as execuções serial ou paralela
Paralelo/Serial
Tipo de
particionamen to
Diferencia entre os três tipos de particionamento
Paralelo
Tamanho da carga
Estabelece o tamanho da tarefa para o particionamento dinâmico Paralelo (Dinâmico) Diretório de Relatórios
Diretório onde são salvos os dados estatísticos
Paralelo/Serial Diretório de
dados
Diretório onde são salvos os dados da execução
Paralelo/Serial
Fonte: Elaborada pelo próprio autor.
Parâmetro Descrição
Tempo de Execução Tempo de execução (cômputo) do algoritmo
Tempo de
Comunicação
Tempo consumido nas trocas de mensagens entre os processos
Tempo de Entrada e Saída
Tempo consumido pelos procedimentos de entrada e saída de dados
Quantidade de Dados (bytes)
Tamanho do arquivo de dados gerado
Fonte: Elaborada pelo próprio autor.
O parâmetro a da equação do mapa logístico define o tipo de resposta que o sistema terá como resultado. Um conjunto de valores foi considerado para experimentos serial e paralelo. Para cada valor do parâmetro a foi associado uma quantidade de iterações 2pot que o algoritmo deve realizar. Os pares a e pot utilizados são mostrados na Tabela 5. Para cada combinação de parâmetros iniciais foi feita uma execução e coletados os parâmetros de saída. Os tamanhos de carga para o particionamento dinâmico foram definidos com relação ao tamanho da população inicial sendo o tamanho máximo da carga o valor do quociente inteiro entre o tamanho da população e o número máximo de processos.
Tabela 5 - Valores dos parâmetros da equação do mapa logístico
a pot 1.40209 9 1.401588 10 1.401354 11 1.401248 12 1.401198 13 1.401175 14 1.4011644 15
1.40115945 16
Fonte: Tirnakli, Tsallis e Beck (2009).
A Tabela 6 resume alguns valores de carga utilizados para diferentes tamanhos de população.
Tabela 6 - Tamanhos de Carga do Particionamento Dinâmico. Populaç ão Tarefa 1 Tarefa 2 Tarefa 3 Tarefa 4 Tarefa 5 48 × 102 25 50 100 150 200 48 × 103 250 500 1000 1500 2000 48 × 104 2500 5000 10000 15000 20000
Fonte: Elaborada pelo próprio autor.
Nas execuções paralelas foram utilizados de três a vinte e três máquinas em cada combinação de parâmetros iniciais. Esses valores justificam-se pela necessidade de haver um nó manager e pelo menos dois nós de cômputo para que pudesse haver um mínimo de nós em uma execução. Ao serem realizados os experimentos não foram usadas as vinte e quatro máquinas pois um dos nós back-end do cluster (palma0102) estava muito instável durante as execuções.
Na próxima seção serão discutidos os resultados obtidos nas execuções com os valores de população inicial mostrados nesta seção na Tabela 6.
4.2 Resultados
Nesta seção serão mostrados os resultados obtidos com os experimentos citados na Seção 5.1. Para todas as execuções realizadas foram coletados os tempos de execução e comunicação e posteriormente gerados os gráficos pertinentes ao estudo (speedup e eficiência), porém aqui só serão mostrados os gráficos pertinentes a execução específica de 12 × 105 números randômicos.
4.2.1 Paradigma Manager/Worker com Particionamento Estático.
O tempo de execução, o valor do speedup e eficiência para o paradigma manager/worker com particionamento estático são mostrados na Erro! Fonte de referência não encontrada..
Tabela 3 - Resultados coletados na execução do paradigma manager/worker com particionamento estático. Tipo de execução Processadores Tempo de execução (s) Speedup Eficiência (%) Estático 3 1256,478 1,998 66,6 Estático 4 837,649 2,997 74,925 Estático 5 629,06 3,991 79,82 Estático 6 502,666 4,995 83,25 Estático 7 418,913 5,994 85,628 Estático 8 359,126 6,991 87,387 Estático 9 314,248 7,99 88,777 Estático 10 279,333 8,989 89,89 Estático 11 251,532 9,982 90,745 Estático 12 228,625 10,983 91,525 Estático 13 209,584 11,98 92,153 Estático 14 193,481 12,978 92,7 Estático 15 179,77 13,967 93,113 Estático 16 176,458 14,23 88,937 Estático 17 158,238 15,868 93,341 Estático 18 149,913 16,749 93,05 Estático 19 139,823 17,958 94,515 Estático 20 132,707 18,921 94,605 Estático 21 125,925 19,94 94,952 Estático 22 119,83 20,954 95,245 Estático 23 117,359 21,395 93,021
A Figura 16 apresenta o gráfico de speedup da execução do paradigma manager/worker com o particionamento estático.
Figura 16 - Gráfico de speedup do paradigma manager/worker com particionamento estático.
Fonte: Elaborada pelo autor.
Para este paradigma o ganho em speedup cresce quase que linear com o aumento do número de processadores. O maior ganho em tempo de execução foi obtido na execução com 23 processadores, cujo valor de speedup foi cerca de 10 vezes maior que a execução com apenas 3 processadores.
0 5 10 15 20 25 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 S p ee d u p Processadores
Paradigma Manager/Worker com
Particionamento Estático
Figura 17 - Gráfico de eficiência do paradigma manager/worker com particionamento estático. Fonte: Elaborada pelo autor.
No paradigma manager/worker com particionamento estático a eficiência começou relativamente baixa, em torno de 66,6%, mas ao se acrescentar processadores a eficiência aumentou bastante e para a execução com 23 processadores o seu valor alcançou 93,021%.
4.2.2 Paradigma Manager/Worker com Particionamento Dinâmico.
Como já foi explicado na seção 5.1 foram definidos 5 tamanhos de tarefas para cada cenário no paradigma manager/worker com particionamento dinâmico. A seguir são mostrados os resultados colhidos para cada tarefa.
50 55 60 65 70 75 80 85 90 95 100 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 E fici ência (% ) Processadores
Paradigma Manager/Worker com
Particionamento Estático
4.2.2.1 Paradigma Manager/Worker com Particionamento Dinâmico – Tarefa 1.
O tempo de execução, o valor do speedup e eficiência para o paradigma manager/worker com particionamento dinâmico são mostrados na Tabela 4. Neste cenário o tamanho da tarefa foi definido em 2500 elementos.
Tabela 4 - Resultados coletados na execução do paradigma manager/worker com particionamento dinâmico (Tarefa 1).
Tipo de execução
Tamanho da
tarefa Processadores
Tempo de
execução (s) Speedup Eficiência (%)
Dinâmico 2500 3 1257,039 1,997 66,566 Dinâmico 2500 4 838,073 2,996 74,9 Dinâmico 2500 5 628,728 3,993 79,86 Dinâmico 2500 6 502,892 4,993 83,216 Dinâmico 2500 7 419,097 5,991 85,585 Dinâmico 2500 8 361,446 6,947 86,837 Dinâmico 2500 9 314,354 7,987 88,744 Dinâmico 2500 10 282,878 8,876 88,76 Dinâmico 2500 11 251,524 9,983 90,754 Dinâmico 2500 12 230,536 10,892 90,766 Dinâmico 2500 13 209,627 11,978 92,138 Dinâmico 2500 14 193,917 12,948 92,485 Dinâmico 2500 15 183,384 13,692 91,28 Dinâmico 2500 16 167,749 14,968 93,55 Dinâmico 2500 17 157,294 15,963 93,9 Dinâmico 2500 18 151,978 16,522 91,788 Dinâmico 2500 19 141,551 17,739 93,363 Dinâmico 2500 20 136,263 18,427 92,135 Dinâmico 2500 21 125,881 19,947 94,985 Dinâmico 2500 22 120,605 20,82 94,636 Dinâmico 2500 23 115,382 21,762 94,617
Fonte: Elaborada pelo autor.
A Figura 18 apresenta o gráfico de speedup da execução do paradigma manager/worker com o particionamento dinâmico. Observa-se que o crescimento do speedup é linear e que o valor do speedup da execução com 23 processadores é cerca de 10 vezes maior que o valor do speedup da execução com apenas 3 processadores.
Figura 18 - Gráfico de speedup do paradigma manager/worker com particionamento dinâmico (Tarefa 1).
Fonte: Elaborada pelo autor.
A Figura 19 mostra o crescimento da eficiência em relação ao número de processadores que participam de uma execução. A eficiência é mediana numa execução com apenas 3 processadores e aumenta a medida que o número de processadores disponíveis numa execução também aumenta.
0 5 10 15 20 25 3 5 7 9 11 13 15 17 19 21 23 S p ee d u p Processadores
Paradigma Manager/Worker com
Particionamento Dinâmico
Tarefa 1
Figura 19 - Gráfico de eficiência do paradigma manager/worker com particionamento dinâmico (Tarefa 1).
Fonte: Elaborada pelo autor.
4.2.2.2 Paradigma Manager/Worker com Particionamento Dinâmico – Tarefa 2.
O tempo de execução, o valor do speedup e eficiência para o paradigma manager/worker com particionamento dinâmico são mostrados na Tabela 5. Para este cenário o tamanho da tarefa foi definido em 5000 elementos gerados aleatoriamente.
Tabela 5 - Resultados coletados na execução do paradigma manager/worker com particionamento dinâmico (Tarefa 2).
Tipo de execução Tamanho da tarefa Processadores Tempo de execução (s) Speedup Eficiência (%) Dinâmico 5000 3 1256,24 1,998 66,6 Dinâmico 5000 4 837,559 2,997 74,925 Dinâmico 5000 5 628,204 3,997 79,94 Dinâmico 5000 6 502,574 4,996 83,266 Dinâmico 5000 7 418,83 5,995 85,642 50 55 60 65 70 75 80 85 90 95 100 3 5 7 9 11 13 15 17 19 21 23 E fici ência (% ) Processadores
Paradigma Manager/Worker com
Particionamento Dinâmico
Tarefa 1
Dinâmico 5000 8 366,439 6,852 85,65 Dinâmico 5000 9 314,164 7,992 88,8 Dinâmico 5000 10 282,737 8,881 88,81 Dinâmico 5000 11 251,38 9,988 90,8 Dinâmico 5000 12 230,427 10,897 90,808 Dinâmico 5000 13 209,523 11,984 92,184 Dinâmico 5000 14 198,99 12,618 90,128 Dinâmico 5000 15 188,493 13,321 88,806 Dinâmico 5000 16 167,647 14,977 93,606 Dinâmico 5000 17 157,183 15,975 93,97 Dinâmico 5000 18 157,09 15,984 88,8 Dinâmico 5000 19 146,649 17,122 90,115 Dinâmico 5000 20 136,206 18,435 92,175 Dinâmico 5000 21 125,795 19,961 95,052 Dinâmico 5000 22 125,728 19,971 90,777 Dinâmico 5000 23 115,326 21,773 94,665
Fonte: Elaborada pelo autor.
A Figura 20 apresenta o crescimento do speedup para as execuções paralelas baseadas no paradigma manager/worker com particionamento dinâmico com o tamanho de tarefa de 50000 elementos gerados aleatoriamente. Observa-se que com o aumento do número de processadores numa mesma execução o ganho em tempo de execução cresce linear quase ficando constante em algumas execuções, por exemplo nas execuções com 21 e 22 processadores. Nota-se que a execução com 23 e 3 processadores possuem o melhor e o pior speedup, respectivamente, deste cenário.
Figura 20 - Gráfico de speedup do paradigma manager/worker com particionamento dinâmico (Tarefa 2).
Fonte: Elaborada pelo autor.
A curva de eficiência também cresce com o aumento do número de processadores numa mesma execução. Ela passa de 66,6% numa execução com 3 processadores para 94,665% numa execução com 23 processadores.
0 5 10 15 20 25 3 5 7 9 11 13 15 17 19 21 23 S p ee d u p Processadores
Paradigma Manager/Worker com
Particionamento Dinâmico
Tarefa 2
Figura 21 - Gráfico de eficiência do paradigma manager/worker com particionamento dinâmico (Tarefa 2).
Fonte: Elaborada pelo autor.
4.2.2.3 Paradigma Manager/Worker com Particionamento Dinâmico – Tarefa 3.
A Tabela 6 apresenta os resultados colhidos para as execuções baseadas no paradigma manager/worker com particionamento dinâmico no qual o tamanho da tarefa foi definido em 10000 elementos.
Tabela 6 - Resultados coletados na execução do paradigma manager/worker com particionamento dinâmico (Tarefa 3).
Tipo de execução Tamanho da tarefa Processadores Tempo de execução (s) Speedup Eficiência (%) Dinâmico 10000 3 1255,854 1,999 66,633 Dinâmico 10000 4 837,304 2,998 74,95 Dinâmico 10000 5 627,998 3,998 79,96 Dinâmico 10000 6 502,43 4,997 83,283 Dinâmico 10000 7 418,687 5,997 85,671 50 55 60 65 70 75 80 85 90 95 100 3 4 5 6 7 8 9 101112 13141516171819202122 23 E fici ência (% ) Processadores
Paradigma Manager/Worker com
Particionamento Dinâmico
Tarefa 2
Dinâmico 10000 8 376,767 6,664 83,3 Dinâmico 10000 9 314,074 7,994 88,822 Dinâmico 10000 10 293,09 8,567 85,67 Dinâmico 10000 11 251,284 9,992 90,836 Dinâmico 10000 12 230,354 10,9 90,833 Dinâmico 10000 13 209,438 11,989 92,223 Dinâmico 10000 14 209,379 11,992 85,657 Dinâmico 10000 15 188,476 13,322 88,813 Dinâmico 10000 16 167,599 14,982 93,637 Dinâmico 10000 17 167,544 14,987 88,158 Dinâmico 10000 18 167,448 14,995 83,305 Dinâmico 10000 19 146,633 17,124 90,126 Dinâmico 10000 20 146,6 17,128 85,64 Dinâmico 10000 21 125,756 19,967 95,08 Dinâmico 10000 22 125,713 19,974 90,79 Dinâmico 10000 23 125,706 19,975 86,847
Fonte: Elaborada pelo autor.
A Figura 22 apresenta a linha de speedup das execuções paralelas baseadas neste paradigma. Observa-se que o speedup cresce linearmente ficando quase constante em apenas alguns pontos, execuções com 13 e 14 processadores, 16, 17 e 18 processadores e 21, 22, e 23 processadores. O maior valor de speedup foi a execução com 23 processadores, 19,975, e a menor foi a execução com apenas 3 processadores, 1,999.
Figura 22 - Gráfico de speedup do paradigma manager/worker com particionamento dinâmico (Tarefa 3).
Fonte: Elaborada pelo autor.
Na Figura 23 observa-se que os valores de eficiência apresentam-se bastante inconstantes, possuindo alguns picos de eficiência. A maior eficiência, 95,08%, é alcançada na execução com 21 processadores e a pior, 66,633%, com apenas 3 processadores. 0 5 10 15 20 25 3 4 5 6 7 8 9 1011121314151617181920212223 S p ee d u p Processadores
Paradigma Manager/Worker com
Particionamento Dinâmico
Tarefa 3
Figura 23 - Gráfico de eficiência do paradigma manager/worker com particionamento dinâmico (Tarefa 3).
Fonte: Elaborada pelo autor.
4.2.2.4 Paradigma Manager/Worker com Particionamento Dinâmico – Tarefa 4.
A Tabela 7 apresenta os resultados colhidos para as execuções baseadas no paradigma manager/worker com particionamento dinâmico no qual o tamanho da tarefa foi definido em 25000 elementos.
Tabela 7 - Resultados coletados na execução do paradigma manager/worker com particionamento dinâmico (Tarefa 4).
Tipo de execução
Tamanho da
tarefa Processadores
Tempo de
execução (s) Speedup Eficiência (%)
Dinâmico 25000 3 1255,618 1,999 66,633 Dinâmico 25000 4 837,119 2,999 74,975 Dinâmico 25000 5 627,883 3,999 79,98 50 55 60 65 70 75 80 85 90 95 100 3 5 7 9 11 13 15 17 19 21 23 E fici ência (% ) Processadores
Paradigma Manager/Worker com
Particionamento Dinâmico
Tarefa 3
Dinâmico 25000 6 523,199 4,799 79,983 Dinâmico 25000 7 418,616 5,998 85,685 Dinâmico 25000 8 366,299 6,855 85,687 Dinâmico 25000 9 313,996 7,996 88,844 Dinâmico 25000 10 313,949 7,998 79,98 Dinâmico 25000 11 261,669 9,596 87,236 Dinâmico 25000 12 261,656 9,596 79,966 Dinâmico 25000 13 209,41 11,99 92,23 Dinâmico 25000 14 209,371 11,993 85,664 Dinâmico 25000 15 209,348 11,994 79,96 Dinâmico 25000 16 209,336 11,995 74,968 Dinâmico 25000 17 157,086 15,984 94,023 Dinâmico 25000 18 157,074 15,986 88,811 Dinâmico 25000 19 157,066 15,986 84,136 Dinâmico 25000 20 157,044 15,989 79,945 Dinâmico 25000 21 157,047 15,988 76,133 Dinâmico 25000 22 157,046 15,988 72,672 Dinâmico 25000 23 157,023 15,991 69,526
Fonte: Elaborada pelo autor.
A Figura 24 apresenta o gráfico de speedup da execução baseada no paradigma manager/worker com particionamento dinâmico com o tamanho da tarefa definida em 25000 elementos gerados randomicamente. Observa-se que o gráfico possui alguns pontos de estagnação e o valor do speedup máximo alcançado é de 15,991 e o mínimo é de 1,999.