ANÁLISE COMPARATIVA DE SIMULAÇÕES DE DINÂMICA MOLECULAR EM AMBIENTES DE ALTO DESEMPENHO

Tamanho: px
Começar a partir da página:

Download "ANÁLISE COMPARATIVA DE SIMULAÇÕES DE DINÂMICA MOLECULAR EM AMBIENTES DE ALTO DESEMPENHO"

Transcrição

1 INPE TDI/1146 ANÁLISE COMPARATIVA DE SIMULAÇÕES DE DINÂMICA MOLECULAR EM AMBIENTES DE ALTO DESEMPENHO José Alexandre Junqueira Ribeiro Dissertação de Mestrado do Curso de Pós-Graduação em Computação Aplicada, orientada pelos Drs. Airam Jônatas Preto e Stephan Stephany, aprovada em 19 de fevereiro de INPE São José dos Campos 2007

2 539.2: Ribeiro, J.A.J. Análise comparativa de simulações de dinâmica molecular em ambientes de alto desempenho. / José Alexandre Junqueira Ribeiro. São José dos Campos: INPE, p.; - (INPE TDI/1146). 1.Dinâmica molecular. 2.Simulação de algoritmos computadorizados. 3.Computação paralela. 4.Forças intramoleculares. 5.Estrutura molecular. I.Título.

3

4

5 À Madeleine, esposa e companheira, que soube compreender e ajudar a vencer os vários momentos difíceis que passei nestes últimos tempos.

6

7 AGRADECIMENTOS A meus pais, Paulo e Célia, pelo incentivo e apoio em todas as fases de minha vida. Aos Drs. Airam J. Preto e Stephan Stephany, que orientaram este trabalho de modo seguro, paciente e amigo. Aos amigos e companheiros: José Vilela e Hermenegildo, pela ajuda em minha formação pessoal e profissional; aos compadres (para sempre), Adriana Nakahara e Marcio Sant Ana, pela ajuda em minha adaptação e realização profissional; Mario Truffa pelo bom humor e por mostrar que as dificuldades podem e devem ser vencidas; Ricardo Varela e Oscar, pela fundamental ajuda e incentivo no início dos trabalhos; Sérgio, Alex, Ailton, Saulo, Jair, Vagner, Luiz, Odorico, Hemitério, Cardoso, D. Cida, André, Sr. David e Jeliarth, pelos bons e prazerosos momentos vividos juntos. Ao Centro de Desenvolvimento e Tecnologia (CDT) na pessoa de José Antônio Dias de Carvalho, pelo apoio e recursos fornecidos e aos colegas de lá que, direta ou indiretamente, contribuíram para o enriquecimento deste trabalho. À Fundação de Amparo à Pesquisa do Estado de São Paulo (FAPESP), pela liberação de recursos financeiros para o projeto 01/ : Paralelização de Aplicações em Física dos Materiais num Ambiente de Memória Distribuída, viabilizando o desenvolvimento desta dissertação.

8

9 RESUMO Simulações em dinâmica molecular são utilizados em experimentos computacionais para reproduzir propriedades de líquidos, sólidos ou moléculas. Os N átomos ou moléculas são tratados como massas pontuais e as equações de Newton são integradas a cada passo de tempo para calcular seu movimento. A carga computacional é alta devido à necessidade de calcular forças de interação entre todos os pares de partículas e com complexidade algorítmica O(N 2 ). No caso deste trabalho, as N partículas estão confinadas num domínio bidimensional com condições de contorno periódicas, tendo sido adotado o potencial de Lennard-Jones. O código sequencial em Fortran 90 foi paralelizado usando a biblioteca de comunicação Message Passing Interface (MPI). Um esquema de decomposição por partículas foi adotado de forma a distribuir o domínio, e os cálculos redundantes foram drasticamente reduzidos, utilizando-se a 3 ª Lei de Newton. Foi definido um anel lógico, no qual cada processador recebe dados de seu vizinho à esquerda e envia dados para o da direita. Mesmo considerando um potencial que requer o cálculo das interações entre todos os pares de partículas, esse esquema permite uma paralelização eficiente. Resultados de desempenho apresentaram bons speed-ups para até partículas, para simulação em ambas as máquinas paralelas de memória distribuída. Como esperado, o tempo de comunicação aumenta com N mas, ainda assim, a versão paralela proporcionou uma significativa redução do tempo de execução em relação à versão sequencial. Largura de banda e latência de comunicação também foram analisadas para ambas as arquiteturas.

10

11 COMPARATIVE ANALYSIS OF MOLECULAR DYNAMIC IN HIGH PERFORMANCE COMPUTING ENVIRONMENTS. ABSTRACT Molecular dynamics algorithms are used in computational experiments simulating the properties of liquids, solids and molecules. The N atoms or molecules in the simulation are treated as point masses and Newton's equations are integrated to compute their motion at each time step. The processing load is heavy due to the need of calculating interaction forces between pairs of particles and therefore the algorithmic complexity scales as O(N 2 ). In the case of this work, the N particles are bound to a 2D domain with periodical boundary conditions and the Lennard-Jones potential was adopted. The Fortran 90 sequential code was parallelized using the Message Passing Interface (MPI) communication library. A particle decomposition scheme was adopted in order to decompose the domain and redundant calculations were drastically reduced with the use of the Newton 3 rd law. A logical ring is defined in which each processor receives data from its left neighbor and sends data to the right neighbor. Even considering a potential which requires the calculation of the interactions between all pairs of particles, the scheme yields an efficient parallelization. Performance results for up to particles show good speed-ups running on both distributed memory parallel machines. As it would be expected, communication time tends to increase for larger N, but still the parallel version yields a significant reduction of the total time, compared with the sequential version. Communication latency and bandwidth for both architectures were analysed.

12

13 SUMÁRIO LISTA DE FIGURAS LISTA DE TABELAS Pág. CAPÍTULO 1 - INTRODUÇÃO CAPÍTU LO 2 - A SIMULAÇÃO DE DINÂMICA MOLECULAR Funcionamento do Programa de Dinâmica Molecular CAPÍTULO 3 - COMPUTAÇÃO PARALELA Arquiteturas Paralelas Arquiteturas de Memória Compartilhada Arquiteturas de Memória Distribuída Uso do Cluster em Computação Paralela Influência da Latência e Largura de Banda em Sistemas Clusters CAPÍTULO 4 - PROGRAMAÇÃO PARALELA Paradigmas da Computação Paralela Ferramentas de Programação Paralela Linguagem Explicitamente Paralela Programação por Biblioteca Via Troca de Mensagem A Especificação MPI Métricas de Desempenho Instrumentação do Código CAPÍTULO 5 - SIMULAÇÕES REALIZADAS USANDO O HPF Desempenho Obtido com o Programa Original Portando o Código Fortran 77 para Fortran

14 5.3 - Paralelização Usando o HPF CAPÍTULO 6 - SIMULAÇÕES REALIZADAS EM MPI Paralelização Usando o MPI Algoritmo do Anel Circular Modelo de Desempenho Resultados Obtidos com o Uso do Anel Circular Resultados do Cluster AMD Comparando os Resultados o Cluster AMD e Intel CAPÍTULO 7 - CONCLUSÕES E TRABALHOS FUTUROS REFERÊNCIAS BIBLIOGRÁFICAS

15 LISTA DE FIGURAS Pág Potencial de Lennard-Jones Módulos do Programa de Simulação All Pairs Cell Subdivision Neighbour-list Esquema de cálculo das forças Saída do Programa / Posições das Moléculas Taxonomia de Flynn Organização Lógica de uma máquina SIMD Sistema de Memória Centralizada Estrutura Lógica de uma máquina UMA Estrutura Lógica de uma máquina NUMA Sistema de Memória Distribuída Estrutura Lógica de uma máquina de memória distribuída Layout de um Cluster Layout de um Cluster AMD Layout de um Cluster Intel Representação gráfica do tempo de comunicação Funcionamento do programa PingPong Latência entre os Clusters Intel e AMD Largura de Banda entre os Clusters Intel x AMD Exemplo de uso do Rank Exemplo de paralelismo de dados Parte de uma código OpemMP... 54

16 4.4 - Layout da execução de um código PVM Exemplo de transferência de mensagens Estrutura básica de um programa MPI Funcionamento das Rotinas de Comunicação Coletiva Operações Globais de Redução Curvas de Speed-Up Curvas de Eficiência Funcionamento do MPI_Barrier( ) Funcionamento do MPI_Reduce ( ) Resultado obtido versão serial Saída da Profile da Portland Visualização da distribuição em bloco Visualização da distribuição em Cyclic Cálculo de forças entre as partículas Distribuição das 50 Moléculas entre os 5 Processadores Relação de forças que cada processador deverá calcular Comparação entre a versão seqüencial e paralela Variação de speed-up para várias quantidades de partículas Esquema de cálculo das forças locais Comunicação entre os processadores para troca de forças Status dos processadores após a primeira volta do anel Cálculo das forças remotas de seus vizinhos próximos não repetido Comunicação entre processadores vizinhos não repetidos Status dos processadores após a segunda volta do anel Tempo de execução nos diferentes casos simulados Execução para pequenas quantidades de partículas... 94

17 Speed-Up x Número de Partículas no Cluster AMD Comportamento do Speed-up para pequenas quantidades de partículas Eficiência x Número de Partículas no Cluster AMD Speed-up x Processadores no Cluster AMD Tempo de Processamento x Comunicação para 2 Processadores Tempo de Processamento x Comunicação para 10 Processadores Tempo de Execução da versão seqüencial entre AMD e Intel Comparação dos tempos de execução dos clusters Comparação de speed-up entre os clusters para partículas

18

19 LISTA DE TABELAS Pág Resultados de Latência e Largura de Banda Comparação das simulações Resultados da Paralelização usando HPF Valores de Speed-up para diferentes quantidades de partículas para 5 proc Speed-up para nos clusters Tempo gasto na comunicação nos diversos casos de simulação

20

21 CAPÍTULO 1 INTRODUÇÃO Desde o surgimento do primeiro computador digital eletrônico, a computação passou por um processo evolutivo intenso, em nível de hardware e software, a fim de proporcionar maior desempenho e ampliar o leque de aplicações que podem ser computacionalmente resolvidas de maneira eficiente. No desenvolvimento de aplicações científicas, muitas vezes não se busca como objetivo primário a eficiência na aplicação e sim o resultado final que ela gera. A rara utilização de técnicas de otimização, acrescida do emprego de chamadas intensivas à subrotinas, produz normalmente uma aplicação com baixo rendimento. As técnicas de simulações podem ser usadas para substituir um experimento real na obtenção de resultados numéricos e do comportamento dos materiais sob determinadas condições, tais como: temperatura, energia, entre outras. Para tanto é necessário criar modelos matemáticos que podem representar, o comportamento em nível molecular de uma substância específica. Estas simulações são muito importantes para obtenção de resultados reais sem que necessariamente devemos estar num laboratório, pois certas condições poderiam acarretar dificuldades em nível de equipamentos, matéria prima e recursos humanos especializados para certos casos. Aplicando os modelos matemáticos nos recursos computacionais existentes poderemos obter resultados satisfatórios sobre o comportamento dos materiais, em nível molecular, nos diversos casos experimentais. 19

22 A teoria da dinâmica molecular (Molecular Dynamics MD) pode ser usada para calcularmos as propriedades de um sistema clássico qualquer. O grande problema nestas simulações é o tempo gasto na execução do programa, que dependendo do caso (na quantidade de partículas a serem simuladas ou então na quantidade de passos a serem executados na simulação) pode-se gastar alguns minutos e em outros casos semanas de execução. Este tempo excessivo gasto tem sido uma das dificuldades encontradas neste campo da física de partículas o que acaba por desestimular novas e diferentes possibilidades de simulações em casos adversos. A necessidade de se produzir aplicações científicas com maior desempenho justifica a análise detalhada de um programa. Esta análise deve levar em conta a estrutura do programa (seu algoritmo) e identificação dos gargalos de desempenho. A computação paralela pode ser aplicada nestes casos para se obter o ganho de desempenho que implica na divisão do domínio de dados do problema ou na divisão de tarefas de maneira que esta possa ser executada por vários processadores, que por sua vez deverão cooperar entre si (em comunicação e sincronismo) na execução do programa. No estudo da Dinâmica Molecular existem casos de simulação em sistema equilibrados, onde não existem forças externas atuando sobre o material a ser simulado, o que gera programas menos complexos e com resultados mais rápidos. No caso da simulação em sistemas fora do equilíbrio, a maior complexidade do modelo e a maior quantidade de passos a serem executados na simulação tornam o sistema mais demorado em sua execução. Assim, o uso das técnicas de paralelização neste caso torna-se algo realmente necessário e importante. 20

23 A metodologia apresentada nesta dissertação tem como objetivo fornecer informações mais detalhadas sobre as técnicas de paralelização de um programa de simulação MD. A localização de pontos específicos da aplicação onde existam gargalos de consumo de tempo, bem como as formas de se conseguir paralelizar este sistema, viabilizará assim a simulação de um sistema fora de equilíbrio numa quantidade de partículas maior sem gastar tanto tempo na sua execução. Para tanto será usada a biblioteca de troca de mensagens numa arquitetura de memória distribuída, o que será explicado no decorrer da dissertação. O uso dos atuais paradigmas de computação paralela requer que o programador desenvolva um código que contenha chamadas ou diretivas com informações que permitam ao compilador estabelecer o paralelismo da aplicação. Assim, é possível se chegar à solução do problema em menor tempo com diversos processadores trabalhando em conjunto na solução deste. No Capítulo 2 é abordada a teoria sobre a Simulação de Dinâmica Molecular, suas principais características e como ela deve ser usada para simular um comportamento de conjunto de partículas. Em especial falamos sobre o Potencial de Lennard-Jones que melhor representa, para a simulação pretendida, o potencial existente entre pares de partículas. É explanado sobre as técnicas usadas para criar um programa MD e o funcionamento do software de simulação usado nesta dissertação (na sua versão seqüencial). No Capítulo 3 é explicada a computação paralela, levantando suas principais características e arquiteturas de hardware existentes. É comentado o uso de clusters em computação paralela como forma de implementação de baixo custo e alta escalabilidade, inclusive aqueles utilizados na dissertação. Termina com a explicação e testes de performance dos equipamentos usados nas simulações, avaliando a influência da latência e da largura de banda da rede de interconexão. 21

24 No Capítulo 4 é explicado como é implementada a programação paralela, seus paradigmas de programação e quais ferramentas podem ser utilizadas para este fim. Dentre destas ferramentas é falado sobre o HPF, OpenMP, MPI e PVM, dando uma ênfase maior sobre o MPI. É comentado sobre as métricas de desempenho que podem ser utilizadas, entre elas o speed-up e a eficiência. O capítulo é finalizado com a explicação de como foi feita a instrumentação de temporização do código. A implementação do programa de simulação MD no equilíbrio usando a ferramenta de programação HPF é demonstrado no Capítulo 5. É dada também uma explicação geral sobre as diretivas do HPF e depois analisado os resultados obtidos com o uso desta ferramenta na paralelização do programa MD. É mostrado no Capítulo 6 o resultado obtido com o programa de simulação de dinâmica molecular no equilíbrio e fora do equilíbrio, onde serão mostrados os métodos usados na otimização do código, levantando o gargalo do programa, mostrando os tempos gastos na execução da simulação e o posteriormente o ganho conseguido com estas técnicas. Foi usada a biblioteca de comunicação MPI para implementar a versão paralela do programa original, é feita uma comparação entre a versão seqüencial e a paralela, fazendo uma análise de desempenho e levantando os principais problemas nesta versão paralela implementada. O uso do anel circular como forma de otimizar e melhorar a primeira versão paralela do programa é explicado aqui e depois temos uma comparação dos resultados entre os clusters utilizados nas simulações. 22

25 CAPÍTULO 2 A SIMULAÇÃO DE DINÂMICA MOLECULAR A Dinâmica molecular clássica (MD) é uma ferramenta computacional comumente usada para simular as propriedades de líquidos, sólidos, e moléculas. Cada partícula usada na simulação é tratada como uma massa pontual e as equações de Newton são integradas para computar o movimento destas [1]. Na simulação de dinâmica molecular são calculadas as propriedades de equilíbrio e de transporte de um sistema clássico de muitos corpos (N-Body). Dado um sistema de N- corpos poderemos encontrar uma solução numérica que possa perfeitamente representálo [1]. Computacionalmente, as simulações se tornam maiores e demoradas em duas grandezas: o número de partículas e o número de passos executados na simulação. Uma questão importante é a relação entre as propriedades da matéria - seja no estado sólido, líquido ou gasoso - e a interação entre as partículas que constituem este material. Ao invés de tentar deduzir o comportamento microscópico diretamente do experimento, o método de dinâmica molecular tentar reproduzir o comportamento por meio de um modelo matemático. Em muitos aspectos uma simulação em dinâmica molecular é muito semelhante a um experimento real. Quando iniciamos um experimento preparamos a amostra do material que desejamos estudar. A essa amostra conectamos um aparelho de medida e verificamos as propriedades de interesse por um certo tempo. Se o experimento estiver sujeito a interferências externas, e quanto maior for o tempo de amostragem, mais acurada será nossas medidas. Em dinâmica molecular seguimos a mesma abordagem. Primeiro preparamos a amostra: selecionamos um modelo consistindo de N partículas e 23

26 resolvemos as equações de Newton para este sistema durante uma quantidade de passos de simulação e então fazemos as medidas de interesse. A dinâmica molecular trata do movimento molecular, este movimento é inerente a todo processo químico. Reações químicas e outros processos estão associados com muitas formas de movimento intra e intermoleculares e, em princípio, podem ser tratadas via dinâmica molecular. Os N átomos ou moléculas numa simulação são tratados como massa pontual e as equações de Newton são integradas para computar o movimento para cada tempo de passo da simulação [2]. Toda substância é constituída por várias partículas que interagem entre si, a interação que ocorre é feita entre pares de partículas que podemos chamar de força interatomica que possui duas características principais: a resistência para comprimir, portanto existe uma faixa de repulsão entre elas e outra que obriga as partículas a ficarem juntas (atração). As partículas movem-se de acordo com condições iniciais que podem ser escolhidas livremente e com forças baseadas no potencial de Lennard-Jones (Figura 2.1) [3]. Apesar de se tratar de uma visão simplificada da realidade, este método é muito usado nas simulações que envolvem a dinâmica molecular. Abaixo temos a curva que representa o potencial de Lennard-Jones (LJ): 24

27 FIGURA 2.1 Potencial de Lennard-Jones. FONTE: Adaptada e modificada de [3] (p. 7). Para cada pares de partículas i e j, distantes entre si, temos a energia potencial representada pela equação de Lennard-Jones [2][4][5] (Equação 2.1): 12 6 σ σ ( r ) = 4ε, para r ij rc (2.1) rij rij V ij onde, r ij = distância entre os pares de átomos; ε = representa a força (resistência) de interação; σ = define o tamanho da escala (diâmetro molecular); rc = raio de corte (cut-off). A faixa de atração ou repulsão é limitada pelo raio de corte (rc). O potencial de LJ caracteriza-se por apresentar um valor que pode ser considerado desprezível acima de uma certa distância entre as partículas, o que implica em forças de interação desprezíveis. Esta limitação é representada pelo raio de corte. O termo elevado a 6 caracteriza a atração de longo alcance entre duas partículas, enquanto que o termo elevado a 12 caracteriza a repulsão de curto alcance [4][2]. O potencial de Lennard-Jones constitui atualmente um modelo extremamente importante. Há uma enorme quantidade de trabalhos que investigam o comportamento 25

28 das partículas interagindo via um potencial LJ em uma variedade de geometrias (sólidos, líquidos, superfícies, aglomerados, sistemas bidimensionais, etc). No caso em estudo, os efeitos quânticos na dinâmica das partículas são tão pequenos que leis de Newton se revelam suficientemente realistas. As equações de Newton são resolvidas para cada uma das partículas da amostra, a partir de posições e velocidades iniciais e do conhecimento da força que atua em cada partícula num determinado instante. Calculam-se assim as posições e velocidades de cada partícula ao fim de intervalos de tempo sucessivos, ou seja, obtém-se a evolução temporal do sistema. O potencial total será a soma das energias potenciais (Vr ij ) das interações entre os pares de partículas, seja a Equação 2.2 abaixo [2][4]: E = N V ( ) POT r ij i< j (2.2) Com base nas leis de Newton (2a. e 3a.) calculamos as forças entre as partículas, bem como seu movimento. Para a integração da equação do movimento utilizaremos o método de Leapfrog [2]. Este método é muito utilizado nestes tipos de simulação. O nome Leapfrog vem do fato que as coordenadas e a velocidade são integradas em diferentes tempos. O nome é derivado do fato de que as informações da velocidade e da posição são derivadas de maneira alternada sucessivamente a intervalos de meio passo no intervalo de tempo. Obtemos todas as posições das partículas r i em todos os tempos t n (Equação 2.4) e todas as velocidades partículas v i (Equação 2.3) nos instantes 1 de tempo intermediários t n + [2][5][6]. 2 26

29 r v r ( ) = vi ( tn 1 ) t + 2 i n r r F + ( t ) i n 1 t (2.3) 2 mi r ( t n + 1) = r i ( t n ) + v i ( t n + 1 2) t r (2.4) O processo visualizado é executado continuamente de forma cíclica a partir do cálculo da aceleração até o cálculo da posição e desta novamente a aceleração e assim por diante. A vantagem deste método está no fato das posições dependerem das velocidades. Controlar as velocidades significa, em última instância, controlar a energia total do sistema, pois além da energia potencial ser em função das posições, agora dependem também da velocidade. A partir de um gerador de números aleatórios uma velocidade inicial é fornecida a cada partícula e a seguir, de acordo com as leis de Newton, temos o movimento de cada partícula pelo sistema. A partir de uma trajetória suficientemente longa (grande quantidade de passos a serem executados na simulação) as propriedades desejadas poderão ser calculadas. De acordo com a 2ª lei de Newton (F i = m i x a i ), podemos obter a aceleração a i da partícula. Por meio desta são calculadas as velocidades e as suas posições. Como cada partícula recebeu uma velocidade inicial, esta se ajusta à energia total do sistema e é influenciada pela temperatura usada na simulação. As equações que governam esta evolução temporal, chamadas de equações de movimento de Newton, não podem ser estendidas a um tempo infinito de computação, mas devem satisfazer a média sobre um longo tempo finito. Isto é exatamente o que faz simulação de dinâmica molecular. As equações de movimento são resolvidas passo a passo, isto é, um grande número finito de passos temporais, evita-se desta maneira saltos abruptos e garante-se uma continuidade da energia potencial em função das posições das partículas e estas variam suavemente com o tempo [7]. 27

30 As etapas para a criação de um programa MD podem ser descritas abaixo [5][7]: a) Inicialização das variáveis e constantes responsáveis por definirem o volume relativo à simulação tais como: o número N de partículas, a distância inicial entre estas, as variáveis de estados (temperatura, pressão, etc) e os parâmetros de entrada definidos para a simulação; b) Inicialização dos vetores relativos às posições e velocidades das partículas com o tamanho do sistema atual; c) Cálculo das distâncias entre partículas e o conseqüente cálculo da resultante das forças de interação entre todos os pares possíveis de partículas; d) Atualização dos vetores de velocidade e das posições (X, Y) das partículas em função do somatório das forças da etapa anterior; e) Repetição sucessiva das etapas anteriores (cálculo das forças e atualização de velocidade e posições) para cada passo executado na simulação; f) Mostrar os resultados dos vetores de posições X e Y obtidos após a simulação para posterior análise (em disco e/ou na tela); Nesta dissertação foi utilizado um programa de simulação de dinâmica molecular escrito em Fortran 77 [8][9]. Na Figura 2.2 temos o diagrama de módulos do sistema: Principal Config Gauss BCond MDStep Ran1 CForce FIGURA 2.2 Módulos do Programa de Simulação. 28

31 Analisando o programa seqüencial nota-se que a etapa do cálculo de força (que no programa é representado pelo módulo cforce Figura 2.2) representa o gargalo do sistema em relação ao tempo de processamento, pois devem ser calculadas as forças de interação entre todas as partículas. Cada uma das N partículas é analisada com todas as outras N partículas do sistema, esta etapa do algoritmo pode ser implementada através de vários métodos. O mais simples é conhecido como all pairs [1][2], este método é utilizado no programa de simulação desta dissertação e pode ser demonstrado na Figura 2.3. Neste, o algoritmo calcula a força de interação entre todas as partículas independentemente da distância entre elas e isto ocorre pois não se sabe quais partículas interagem realmente entre si, pois o rearranjo do sistema é constante. Este método leva a ser considerado ineficiente e demorado [4]. Uma possível redução do tempo de processamento seria deixar de calcular as forças de interação entre as partículas com distâncias maiores do que o raio de corte (cut-off), que já foi explicado neste capítulo. Ainda assim, o tempo para examinar todos os pares é proporcional a N 2 [1][10][11], tornando o sistema lento para grandes quantidades de partículas. FIGURA 2.3 All Pairs. Um segundo método conhecido como cell subdivision [2][7], divide o domínio do problema em células, sendo que as N partículas são inicialmente divididas entre as células (Figura 2.4). Para uma dada célula, é levada em conta apenas interações entre as partículas desta mesma célula e das células adjacentes, uma vez que o tamanho de cada célula é fixado conforme o raio de corte rc (cut-off). Com isto podemos conseguir reduzir o número total de comparações e cálculos feitos entre as partículas ao final de 29

32 cada passo de simulação, obtendo uma redução no tempo total de execução do programa. Obviamente de acordo com a resultante das forças de interação, partículas podem migrar de uma célula para outra, o que demanda o uso de um link list, que permite determinar quais partículas estão em quais células em um determinado instante da simulação e esta lista deve ser construída para cada célula. Este link list deve ser atualizado ao final de cada passo da simulação. Molécula Célula rc FIGURA 2.4 Cell Subdivision. Um terceiro método é o Neighbor-list [2][7] (Figura 2.5) que é uma variação do método de células. Neste método é criada uma lista (link list) de todos os pares encontrados nas células, do mesmo modo que no método cell subdivision, só que agora este esta limitado por R N e não por mais rc como era feito anteriormente. Deste modo esta lista contém as informações relativas a sua célula e também a de seus vizinhos (lista de vizinhos). Esta lista poderá ser então utilizada por vários passos usados na simulação (sem precisar ser atualizada constantemente) pois normalmente existe uma lenta alteração microscópica do meio, o que garante um sucesso desta aproximação. 30

33 FIGURA 2.5 Neighbour-List. O método All pairs foi implementado no programa utilizado em nossas simulações com o limitador cut-off (rc), com objetivo de otimizar o programa e conseguir uma melhor performance na versão seqüencial do mesmo. 2.1 Funcionamento do Programa de Dinâmica Molecular Analisando os módulos do sistema (Figura 2.2), o programa começa chamando a rotina de criação do vetor de posições X e Y (módulo config), gerando as posições iniciais das partículas. Depois de criado os vetores X e Y com as posições iniciais das partículas, é chamada a rotina Mdstep (Figura 2.2) que faz toda a simulação do sistema. Ela deve ser executada por um número de vezes definidas para a simulação. Ao final de cada execução da rotina Mdstep é feito uma atualização nas posições das partículas, observando os limites da área de simulação que é definida pela variável L no início do programa. Se por ventura alguma partícula sair da área de simulação ela deverá ser trazida de volta para uma nova posição, dentro da área de simulação, 31

34 mantendo a mesma influência sobre as outras partículas. Este remanejamento é feito usando a rotina chamada de bcond (onde são ajustadas as condições de bordas) [3][4][5]. As forças de interação do sistema deverão ser calculadas entre todas as partículas. Na subrotina cforce, onde são calculadas as forças de interação entre as partículas, são checadas as forças de todas as partículas com todas as outras (N x N, sendo N o número de partículas), ou seja, para cada partícula (N=1, por exemplo) é calculado a força de interação dela com todas as outras do sistema, depois a próxima partícula é testada novamente com todas as outras e assim por diante. Podemos perceber que quanto maior o número de N usado na simulação maior será o esforço computacional e isto torna o sistema muito lento para simulações de grandes quantidades de partículas. Uma otimização que foi feita neste método é o uso do raio de corte rc, ou seja, antes de calcular as forças de interação a distância entre elas deverá ser testada, caso esta distância seja menor que rc sua força de interação deverá ser calculada, caso isto não ocorra outra partícula deverá ser testada repetindo o ciclo novamente. Na Figura 2.6 temos um exemplo para N=5 de como os cálculos das forças entre as partículas (N) deverão ser processados, repare que devido a 3ª lei de Newton não há necessidade de calcular as forças repetidas (reduntantes) pois F ij = F ji. N FIGURA 2.6 Esquema de Cálculo das Forças. Depois de calculadas as forças de interação acham-se as velocidades e com elas as novas posições das partículas do sistema. Ao fim da rotina mdstep, temos os vetores de posições X e Y atualizados e poderemos voltar a executar um novo passo dentro da simulação, repetindo todo o processo descrito anteriormente até que o programa chegue 32

35 ao fim de sua execução. Quanto maior o número de passos usados na simulação, mais próximo da realidade se tornará a simulação. O programa deverá gerar os vetores X e Y que possuem as posições das partículas depois do fim da simulação. Visualizando estas coordenadas X e Y num gráfico de pontos podemos analisar o comportamento destas partículas após a simulação. Na Figura 2.7 temos a saída do programa num gráfico de pontos, repare que ao final da simulação o sistema esta equilibrado (para este caso de simulação específico). FIGURA 2.7 Saída do Programa / Posições das Partículas. No próximo capítulo serão apresentados conceitos sobre os diferentes hardwares que poderão ser usados na computação paralela e o uso de clusters de PCs como solução economicamente viável na construção de máquinas paralelas de memória distribuída. 33

36

37 CAPÍTULO 3 ARQUITETURAS PARALELAS O processamento paralelo tem se popularizado nos últimos anos motivado pela possibilidade de aumento do desempenho na execução de diferentes tipos de aplicações, quando comparadas com o desempenho obtido através da computação seqüencial. A computação paralela implica na divisão de uma determinada aplicação de tal modo que esta possa ser executada por vários elementos de processamento. Por sua vez, estas divisões deverão cooperar entre si (com comunicação e sincronismo) de modo a finalizar a execução do programa de forma mais rápida se comparada com a versão seqüencial. Vários fatores explicam a necessidade do processamento paralelo. Podemos citar o maior desempenho das execuções dos programas aliado ao menor custo possível envolvido. As diversas áreas nas quais a computação se aplica, seja científica, industrial ou militar, requer cada vez mais poder computacional, em virtude de alguns tipos de algoritmos utilizados e da quantidade de dados a serem processados. 3.1 Arquiteturas Paralelas De acordo com a taxonomia de Flynn (Figura 3.1) as arquiteturas de máquinas paralelas podem ser dividas em [12][13][14]: 35

38 FIGURA 3.1 Taxonomia de Flynn. Com fluxo de dados e instruções únicos, as arquiteturas da categoria Single Instruction / Single Data (SISD), possuem como representantes a maioria dos computadores pessoais disponíveis hoje em dia. A execução das instruções é seqüencial com supervisão de uma única unidade de processamento, chamadas de máquinas monoprocessadas. A categoria Single Instruction / Multiple Data (SIMD) possui um único fluxo de instrução que opera sobre vários fluxos de dados, isto é, vários elementos de processamento são supervisionados por uma única unidade de controle (veja Figura 3.2) [12][14]. A mesma instrução é enviada para os diversos processadores P envolvidos na execução, que executam suas instruções em paralelo de forma síncrona ou assíncrona sobre os diferentes fluxos de dados. Pode-se dizer que o mesmo programa esta sendo executado sobre diferentes partes do domínio de dados. 36

39 FIGURA 3.2 Organização Lógica de uma Máquina SIMD. Múltiplos fluxos de instruções que operam sobre múltiplos fluxos de dados caracterizam as arquiteturas Multiple Instruction / Multiple Data (MIMD). Cada unidade de controle executa instruções sobre um conjunto de dados, com a interação entre os processadores envolvidos no sistema [12][14]. São máquinas paralelas atuais capazes de implementar tanto o paralelismo de dados como o paralelismo de tarefas, que serão explicados no Capítulo 4. Hoje em dia pode-se pensar apenas em máquinas paralelas do tipo MIMD as quais podem ser divididas em duas categorias principais [13]: Máquinas paralelas de memória compartilhada (shared memory), nestas existe um único espaço de endereçamento de memória que deve ser compartilhado por todos elementos de processamento. Estas podem ser divididas em: o Espaço de endereçamento de memória fisicamente divido, neste caso o tempo de acesso à memória não será uniforme e a máquina será classificada como Non-Uniform Memory Access (NUMA); o Espaço de endereçamento de memória único, neste caso o tempo de acesso à memória será uniforme e esta máquina será classificada como Uniform Memory Access (UMA); 37

40 Máquinas paralelas de memória distribuída, neste caso há espaços de endereçamento de memória disjuntos e são máquinas independentes que estão interconectadas por uma rede e cada uma possui processador(es), cache(s) e memória principal; quando há dependência de dados entre os nós distintos, é necessário que exista uma comunicação entre eles via rede, por meio de troca de mensagens. Estas categorias (memória compartilhada e distribuída) serão explicadas com mais detalhes adiante (Item e 3.1.2). Não existentes na prática, as arquiteturas da categoria Multiple Instruction / Single Data (MISD) possuiriam múltiplos fluxos de instruções para um único fluxo de dados. Possíveis representantes dessa categoria seriam as máquinas com vários processadores recebendo instruções diferentes e operando sobre o mesmo fluxo de dados Arquiteturas de Memória Compartilhada Caracterizam-se pela existência de uma memória global e única, a qual é utilizada por todos os processadores e quando houver necessidade de comunicação entre os processos, irá ocorrer chamadas load/store nas posições de memória, veja Figura 3.3 para maiores detalhes [13]. 38

41 FIGURA 3.3 Sistema de Memória Centralizada. Para evitar que a memória se torne um gargalo do sistema, arquiteturas de memória compartilhada devem implementar mecanismos de cache, além de garantir a coerência dos dados, onde somente um processador poderá acessar uma posição de memória por vez, isto pode ser conseguido por meio de mecanismos de hardware e software. Esta memória pode ou não estar fisicamente dividida, por isso em relação ao tipo de acesso a memória, pode classificá-los como [13]: A Acesso Uniforme a Memória (Uniforme Memory Access - UMA): A memória usada nessas máquinas é centralizada e encontra-se à mesma distância de todos os processadores, fazendo com que a latência de acesso à memória seja igual para todos eles (uniforme a todos). Como o barramento interno é a rede de interconexão mais usada nessas máquinas e este suporta apenas uma transação por vez, a memória principal é normalmente implementada com um único bloco (veja Figura 3.4). 39

42 FIGURA Estrutura Lógica de uma Máquina UMA. Onde P x é a unidade de processamento. Muitas dessas máquinas utilizam-se de memórias cache nos processadores para amenizar a diferença de velocidade entre ele e a memória principal. A memória cache é uma memória especial que é mais rápida do que a memória principal e funciona como uma área intermediária de armazenamento para cada processador. Cada consulta feita à memória principal, é mantida uma cópia da mesma na memória cache, com o objetivo de diminuir o tempo de acesso ao mesmo endereço. Como todos os processadores podem endereçar toda a memória do sistema, várias cópias da mesma posição poderão existir em caches diferentes. Isso é um problema que precisa ser tratado, pois um processador pode trabalhar com a cópia em sua cache local, e esta pode não refletir mais o estado atual da mesma posição na memória principal. Como o ideal é que o conteúdo das memórias caches seja coerente, esse problema é chamado de coerência de cache (cache coherence) e normalmente é tratada via hardware [13]. Um caso particular de máquinas UMA são os sistemas denominados Symmetric MultiProcessor (SMP), que são sistemas constituídos de processadores comerciais conectados a uma memória compartilhada, por meio do barramento de alta velocidade da MotherBoard [13]. 40

43 O termo simétrico refere-se ao fato de que todos os processadores possuem acessos igualmente ao barramento e à memória, não ocorrendo privilégios por parte do sistema operacional a nenhum dos processadores no atendimento de requisições. O uso do barramento da MotherBoard como meio de interconexão entre as unidades de processamento, impede a construção de multiprocessadores simétricos com um grande número de processadores, pois este barramento só permite uma transação por vez. Isso faz com que o desempenho global das máquinas seja diminuído à medida em que se aumenta a disputa pelo acesso ao barramento. B Acesso Não Uniforme a Memória (Non-Uniform Memory Access NUMA): A memória usada nessas máquinas é implementada com múltiplos módulos onde são associados um módulo por processador (Figura 3.5). O espaço de endereçamento é único e cada processador pode então endereçar toda a memória do sistema. Se o endereço gerado pelo processador encontra-se no módulo de memória diretamente ligado a ele, dito local, o tempo de acesso a este será menor do que o tempo de acesso a um módulo que está diretamente ligado a outro processador, dito remoto, que só pode ser acessado através da rede de interconexão. Por esse motivo, essas máquinas possuem um acesso não uniforme à memória (a distância em relação a memória não é sempre a mesma e depende do endereço desejado). FIGURA 3.5 Estrutura Lógica de uma Máquina NUMA. 41

44 Duas vantagens da memória compartilhada podem ser citadas: A velocidade para a troca de dados entre as tarefas é muito rápida (compartilhamento de dados mais rápido); Pode haver simplicidade de programação, o que permite uma utilização mais eficiente. As desvantagens são: A memória pode se tornar um gargalo do sistema; O aumento do número de processadores implica em perda de desempenho se a largura de banda (BW) não for suficiente para atender a todos; Falta de escalabilidade do sistema (expansão) que é limitado pelo número de caminhos existentes entre os processadores e a memória (barramento). As máquinas que utilizam memória compartilhada são também denominadas multiprocessadores Arquiteturas de Memória Distribuída Cada processador possui sua própria memória local. A memória é distribuída fisicamente entre os processadores e cada memória local só pode ser acessada pelo processador ao qual ela está associada. Este tipo de organização é também conhecido como multicomputador. 42

45 FIGURA 3.6 Sistema de Memória Distribuída. São máquinas independentes interconectadas por uma rede e cada uma possui um sistema completo (processador, cache e memória). O acesso aos dados na memória local é feito por meio de chamadas load/store (read/write), enquanto que nos dados remotos ocorre por meio de troca de mensagens via comando send/receive, veja Figura 3.7: FIGURA 3.7 Estrutura Lógica de uma Máquina de Memória Distribuída. O envio e o recebimento de mensagens entre os processadores pode ser feito de duas formas, com bloqueio ou sem bloqueio. No envio com bloqueio a execução da tarefa que gerou o envio da mensagem é interrompida até que a mensagem seja recebida pelo 43

46 receptor. Já na forma sem bloqueio, inicia o processo de envio e continua sua execução sem aguardar a confirmação do recebimento da mensagem pelo receptor. No recebimento com bloqueio a tarefa é interrompida enquanto espera a chegada de uma determinada mensagem. Na forma sem bloqueio o processamento é continuado mesmo que não tenha chegado uma confirmação do recebimento dos dados. Como vantagens tem-se: A quantidade total de memória aumenta proporcionalmente com o aumento do número de processadores (nós de processamento); Fácil escalabilidade (pode ser expandido facilmente). Como desvantagem: O usuário é responsável por transmitir e receber dados entre os processos alocados nos elementos de processamento (processador e memória) distintos, o que implica em controle de fluxo, controle sobre mensagens e bufferização ; Quanto maior a dependência dos dados, maior será a comunicação entre os processadores, o que provoca um tempo maior na execução do programa. Um dos motivos principais para a criação e desenvolvimento de máquinas de memória distribuída é a facilidade para expansão do sistema. A perda de desempenho pode existir devido a baixa velocidade no meio de comunicação. Apesar de possuir um meio de comunicação mais lento, tais sistemas têm sido utilizados com sucesso para paralelizar aplicações. Normalmente este sistema é utilizado devido ao baixo custo de implantação se comparado com outros já existentes (máquinas de memória compartilhada). 44

47 Do ponto de vista de programação, a diferença básica destas duas classes reside nas primitivas de comunicação entre processos. A comunicação em memória compartilhada é baseada no compartilhamento de posições de memória, e para que os dados se mantenham coerente, é necessário um método de controle de acesso a essas variáveis compartilhadas e atualização dos dados de memória (controlado normalmente por hardware). No caso de memória distribuída, a comunicação é feita através de troca de mensagens, o que gera alguns ônus, entre elas, o controle de fluxo, bufferização e bloqueio de rotinas. Estas máquinas podem ser compostas por nós que são, por exemplo, máquinas monoprocessadas ou então multiprocessadas (SMP). 3.2 Uso de Cluster em Computação Paralela De uma maneira geral, um cluster pode ser definido como um aglomerado de qualquer elemento e na informática é usado como uma máquina paralela de memória distribuída. Um cluster é um sistema que compreende dois ou mais computadores (denominados nós) no qual trabalham em conjunto para executar aplicações ou realizar outras tarefas, dando a impressão que somente um único sistema existente. O Cluster aqui citado e usado na dissertação segue o projeto original Beowulf desenvolvido pela NASA [15]. O cluster Beowulf foi idealizado pelos seus desenvolvedores com o objetivo de suprir a crescente e elevada capacidade de processamento em diversas áreas cientificas, sendo portanto sistemas computacionais poderosos e economicamente viáveis. É claro que a evolução constante do desempenho dos processadores tem colaborado e muito na aproximação entre Personal Computer (PCs - linha IBM) e Workstations, a diminuição dos custos das tecnologias de rede e dos próprios processadores e o uso de sistema 45

48 operacional aberto e gratuito, como o Linux, tem e muito influenciado as pesquisas para melhoria desta nova filosofia de processamento de alto desempenho usando clusters como plataforma base [16]. O sistema é constituído de um nó controlador denominado front-end, cuja função é controlar o cluster, monitorando, distribuindo as tarefas, atuando como servidor de arquivos e executando o elo de ligação entre os usuários e o restante dos nós. Os demais nós são conhecidos como clientes (nós escravos), e são exclusivamente dedicados para processamento das tarefas enviadas pelo front-end não existindo a necessidade de teclados e monitores, podendo ser acessados via login remoto, maiores detalhes na Figura 3.8. LAN FIGURA 3.8 Layout de um Cluster. A implementação MPI utilizada nesta dissertação foi a MPICH, desenvolvida no Argonne National Lab e pode ser obtida em Foram 46

49 utilizados dois clusters distintos na execução das simulações e testes, descritos logo abaixo (Tabela 3.1 e 3.2): TABELA Configurações do Cluster AMD. Sistema Monoprocessado 1 processador/nó Processador/Clock Athlon XP 2000 / 1.6 Ghz Cache L1 64k (32k + 32k) Cache L2 256k Memória RAM 512 Mbytes DDR PC2100 Clock de Barramento 133 Mhz Placa de Rede 3Com 100 Mb/s Switch de Interconexão Switch 3Com FastEthernet de 100 Mb/s Sistema Operacional/Kernel Linux / Biblioteca MPI MPICH versão FIGURA 3.9 Layout do Cluster AMD. 47

50 TABELA 3.2 Configurações do Cluster Intel. Sistema SMP 2 processadores/nó Processador/Clock Intel Xeon / 1.26 Ghz Cache L1 32k (16+16) Cache L2 512k Memória RAM 512 Mbytes DIMM PC133 Clock de Barramento 133 Mhz Placa de Rede 3Com 1Gb/s Switch de Interconexão Switch 3comm GigabitEthernet 1 Gb/s Versão Sistema Operacional/Kernel Linux / Versão Biblioteca MPI MPICH LAN Node0 Switch Barramento GigabitEthernet 1 Gb/s Node1 Node2 Node3 Node4 Dois Processadores por Nó FIGURA 3.10 Layout do Cluster Intel. 48

51 3.2.1 Influência da Latência e Largura de Banda em Sistemas Clusters Com o desenvolvimento de processadores cada vez mais velozes, a disponibilidade de memória com capacidade elevada e o desenvolvimento de redes de alta velocidade, faz com que a arquitetura dos clusters se consolide como uma alternativa para a computação paralela e de alto desempenho. Quanto ao desempenho podemos levantar dois tópicos fundamentais para a arquitetura em questão: o nó de processamento e o sistema de comunicação entre os nós. O nó de processamento vem se desenvolvendo segundo a evolução da microeletrônica. Em relação ao sistema de comunicação, houve um rápido crescimento de interesse nos últimos anos e atualmente temos disponíveis no mercado redes de alta velocidade como a ATM, GigabitEthernet e algumas implementações particulares como Myrinet e outras, que podem oferecer um melhor desempenho para os sistemas Clusters [17]. O desempenho de uma execução paralela pode ser mensurado considerando apenas o tempo de execução da aplicação desenvolvida (na versão seqüencial e paralela), com estes podemos encontrar os parâmetros de speed-up e eficiência (explicados com mais detalhes no Item 4.4). Dois fatores podem influenciar no desempenho de um cluster: a latência e a largura de banda (throughput). Latência é o tempo que uma quantidade de dados demora para percorrer uma certa distância, que pode ser medida como tempo de ida e volta (entre as unidades de processamento) ou em certos casos como apenas o de ida. Latência baixa implica num desempenho mais rápido da aplicação. 49

52 Fatores como o meio físico empregado na transmissão, tempo de comutação dos pacotes (no caso switches, routers, hubs e bridges) e protocolos de acesso ao meio tendem a aumentar este atraso na comunicação. A latência total observada em um sistema pode ser calculada pela Equação 3.1: Latência Total = OverHead de software + Latência da rede de interconexão (3.1) onde, OverHead de Software = Atrasos referentes ao protocolo utilizado na comunicação, processamento de interrupções, troca de contextos devido a chamadas do sistema e cópia de dados entre os buffers [12]; Latência da rede de interconexão = Tempo gasto influenciado pelo tipo da rede adotada. Esta latência total pode ser definida como o tempo decorrido na transmissão de uma mensagem com tamanho de zero byte. Esta sobrecarga inclui trocas de contexto entre os níveis usuário e núcleo do sistema operacional, cópias de dados para regiões intermediárias, controle de interrupções, escolha da rota de saída, empacotamento e desempacotamento da mensagem. A largura de banda é a capacidade de transporte dos dados em um sistema (rede, memória), o que em um ambiente de cluster deverá ser idealizado como a maior possível. O throughput (vazão dos dados) representa então a quantidade de dados que pode ser transferida utilizando mensagens de tamanho N. Essa quantidade é limitada pela capacidade de transmissão do meio de comunicação (bandwidth - largura de banda), mas na prática pode apresentar valores menores dos ideais, devido às sobrecargas de software e congestionamento da rede. 50

53 O tempo total de execução de uma aplicação pode ser interpretado como [18] (Equação 3.2): Tempo Total = Tempo de proc. + Tempo ocioso + Tempo de com. (3.2) onde: Tempo de proc. (processamento) = tempo gasto pela aplicação na execução das instruções do programa; Tempo de com. (comunicação) = influenciado pela latência e largura de banda; Tempo ocioso = chamadas ao sistema operacional, compartilhamento de informações, sincronização, espera de dados para continuar o processamento. O tempo de comunicação ou custo de comunicação (Figura 3.11) pode ser equacionado por [10][12][18] (Equação 3.3): Tempo Comunicação = α + nβ (3.3) onde, α (latência) = Custo de execução da fase inicial do processo e envolve chamadas de hardware ou software. Pode ser medido como o tempo gasto para transmitir uma mensagem sem dados (t startup ); β = Custo para transmitir uma mensagem (1 / largura de banda); n = tamanho da mensagem. 51

54 FIGURA 3.11 Representação Gráfica do Tempo de Comunicação. O tempo de comunicação tende a aumentar, linearmente, com o aumento do tamanho da mensagem a ser transmitida, repare que inicialmente temos um tempo gasto apenas para disparar as instruções de comunicação (T startup ), devido a latência. A comunicação entre os processadores de um mesmo nó (multiprocessadores) ocorre através da leitura/escrita de variáveis compartilhadas. Neste caso o desempenho do sistema é influenciado pela largura de banda da comunicação entre o processador e a memória. Um dos clusters usados nos testes, o Cluster Intel (multiprocessado), possui uma largura de banda (do barramento) máxima teórica e em condições ideais de 1064 MBytes/s (8 bytes x 133 Mhz). A configuração da rede de interconexão pode variar bastante de uma implementação para a outra. A rede do tipo Ethernet é bastante utilizada por várias implementações neste tipo de sistema, mas também outras implementações proprietárias podem ser utilizadas. Um dos testes usados para as medidas de desempenho foi a Suíte Pallas MPI Benchmarks PMB [19]. 52

55 Foi usado desta suíte apenas o Benchmark PingPong (Figura 3.12), que é um programa clássico usado para medir o tempo de partida (latência em µs) e throughput (quantidade de dados transferido em Mbytes/s) de dados de uma única mensagem emitida entre duas unidades de processamento. FIGURA 3.12 Funcionamento do Programa PingPong. FONTE: Manual de Referência [19]. Este benchmark tem que ser executado sempre entre duas unidades de processamento, primeiro foi executado no Cluster Intel, usando apenas o node4 (teste intra-nó, usando o barramento da motherboard para a comunicação entre os processadores) e depois entre o node3 e node4 (teste entre nós, usando a rede de interconexão para a comunicação entre os mesmo). No cluster AMD foi executado o teste entre os nós 10 e 11, usando a rede de interconexão entre eles. 53

56 Na Figura 3.13 temos o comportamento do tempo de comunicação gasto para a transferência da mensagem entre os processadores de um mesmo nó (intra-nó), depois o comportamento do tempo de comunicação entre os processadores de nós diferentes no cluster Intel e depois no cluster AMD (entre nós). Podemos notar que a curva é aproximadamente linear, ou seja, quando aumentamos o tamanho da mensagem o tempo de comunicação também aumentará. Uma pequena oscilação pode ser observada no cluster Intel que pode ter sido ocasionada por ruídos e flutuações momentâneas do sistema de comunicação (placa de rede ou switch). Fica evidente que a comunicação entre processadores de um mesmo nó (intra-nó) possui um custo de comunicação menor (devido a latência menor e largura de banda maior) pois este utiliza o barramento interno para fazer a comunicação, que é bem mais rápido do que a velocidade da rede de interconexão utilizada em outros testes de execução. Intel: Intra-nó Intel: Entre nós AMD: Entre nós FIGURA 3.13 Latência entre os Clusters Intel x AMD. 54

57 Nota-se claramente que o resultado apresentado pelo Cluster AMD é pior se comparado com o Cluster Intel, pois a rede utilizada no Cluster Intel (1 Gb/s) é mais rápida do que a do Cluster AMD (100 Mb/s). Na Figura 3.14 temos o comportamento da vazão dos dados (largura de banda BW) usado na transferência de dados entre os processadores de um mesmo nó (intra-nó), entre os processadores de nós diferentes (entre nós) do cluster Intel e depois entre nós do cluster AMD. Novamente o sistema intra-nó apresenta um melhor desempenho se comparado com a comunicação entre nós pois a largura de banda oferecida pela placa mãe é maior do que aquela oferecida pela rede de comunicação. Intel: Intra-nó Intel: Entre nós AMD: Entre nós FIGURA 3.14 Largura de Banda entre os Clusters Intel x AMD. 55

58 Para mensagens pequenas temos um ruído típico obtido por flutuações (compartilhamento de barramento, cpu e outros periféricos) captadas durante a execução do programa. O limite teórico esperado para rede FastEthernet de 100 Mb/s é de 12.5 MB/s (100/8 MB/s), enquanto que para a rede GigabitEthernet de 1Gb/s é de 125 MB/s (1000/8 MB/s). Os testes mostraram que estes limites não foram alcançados na prática. Abaixo temos os dados de forma resumida: TABELA 3.1 Resultados de Latência e Largura de Banda. Cluster Latência (µs) Largura de Banda (BW) MB/s Intel Intra nó 23 µs 80 MB/s Intel Inter nó 103 µs 46 MB/s AMD 60.1 µs 10.7 MB/s O Cluster Intel obteve uma menor latência e uma maior largura de banda no caso de uma simulação intra-nó pois é utilizado o barramento de dados da motherboard para fazer a comunicação entre os processadores e neste caso apresentou um desempenho melhor se comparado com os outros testes que utilizaram a rede de interconexão. A rede Gigabitethernet oferece uma maior largura de banda do que a FastEthernet, apesar de que nos testes não foi atingido o limite teórico do sistema, isto pode ser explicado pelo fato do protocolo e do tipo da biblioteca utilizada não serem otimizados para obter o máximo desempenho para este tipo de rede [18]. Em termos de programação podemos pensar em dividir o domínio do problema (volume de dados) entre as unidades de processamento com objetivo de conseguir obter um maior desempenho da aplicação. O uso das ferramentas de programação, tais como: HPF e MPI podem ser utilizadas para conseguir a paralelização da aplicação. Isso será explicado no próximo capítulo. 56

59 CAPÍTULO 4 PROGRAMAÇÃO PARALELA 4.1 Paradigmas da Computação Paralela Existem dois paradigmas de programação paralela: o paralelismo de dados, onde processadores diferentes executam as mesmas instruções em dados diferentes e o paralelismo de tarefas, onde processadores diferentes executam tarefas diferentes e em alguns casos ambos paradigmas. Cada um possui compiladores eficientes e atacam o problema através da distribuição do trabalho entre máquinas ou processadores. Basicamente, em máquinas paralelas, o problema a ser resolvido é dividido entre os processadores disponíveis, com o objetivo de produzir a mesma solução que um único processador seqüencial. Em qualquer um dos paradigmas, o objetivo do programador é decompor um problema de forma a prover uma carga balanceada entre as máquinas envolvidas e minimizar a comunicação entre as mesmas. Uma das formas mais conhecidas de implementação do paralelismo de dados é o Single Program Multiple Data (SPMD). Diferentes processadores executam diferentes trechos do código programa sobre diferentes partes do conjunto de dados [18]. No SPMD todos os processadores executam o mesmo trecho do código, porém cada um manipula uma parte dos dados do sistema por meio da identificação de seu rank. Este rank é um parâmetro criado em tempo de execução que é exclusivo a cada processador, ou seja, cada um tem seu valor específico, por exemplo: processador zero possui rank=0, o processador 1 possui rank=1 e assim por diante. Na hora de executar o programa, cada processador manipula sua respectiva parte do conjunto de dados, a Figura 4.1 ilustra parte de um pseudo código qualquer: 57

60 FIGURA 4.1 Exemplo de uso do Rank. Isso pode ser visto tipicamente na programação em que se usa a biblioteca de troca de mensagens (Message Passing Interface - MPI) que será explicada no Item 4.3. No paradigma SPMD todos os processadores envolvidos podem estar executando o mesmo trecho do programa objeto (no caso do MPI temos trechos diferentes), recebendo uma parte dos dados para análise e processamento. Na Figura 4.2 temos um exemplo de paralelismo de dados, o cálculo de cada parte da função é feita em processadores diferentes. A adição de mais processadores poderá reduzir ainda mais o tempo de execução total da aplicação, desde que não haja muita comunicação entre os processadores [12]. FIGURA 4.2 Exemplo de Paralelismo de Dados. 58

61 O estilo de programação paralela de dados pode ser definido através de suas características como: a) Um único programa tem o controle de todas as operações; b) Em certos casos os detalhes de distribuição dos dados, o acesso à memória e a comunicação podem ser tratados pelo compilador; c) A execução de cada instrução não é síncrona entre os processadores. Embora todos os processadores executem o mesmo código, cada processador pode estar executando instruções diferentes em determinados instantes; d) As operações com elementos de conjuntos são executadas simultaneamente em todos os processadores. 4.2 Ferramentas de Programação Paralela Existem linguagens que foram projetadas visando exclusivamente o paralelismo de dados, como é o High Performance Fortran (HPF), desenvolvida a partir da linguagem Fortran 90 usando diretivas para paralelismo de dados. O compilador HPF gera um código executável, seja para multiprocessador ou multicomputador e neste último o compilador pode gerar um código usando a biblioteca MPI para que possa haver comunicação entre os nós de processamento. Maiores detalhes sobre o HPF serão vistos em Para a paralelização dos dados ou instruções (tarefas) pode-se utilizar a biblioteca de comunicação Message Passing Interface (MPI) neste caso é usado uma linguagem de alto nível (Fortran 77/90 ou C/C++) onde são incluídas chamadas à biblioteca quando houver necessidade de comunicação e sincronismo entre os processadores; outra biblioteca de comunicação que pode ser utilizada é o Parallel Virtual Machine (PVM). Estas bibliotecas podem ser utilizadas tanto em máquinas de memória compartilhada ou distribuída. 59

62 Um outro padrão que vale a pena citar é o OpenMP, que é uma extensão de linguagem aplicável, por enquanto, para multiprocessadores apenas. Programa-se em Fortran ou C/C++, inserindo diretivas de paralelização. Nesta dissertação iremos abordar o uso do MPI que será tratado com mais detalhes no Item Linguagem Explicitamente Paralela O High Performance Fortan (HPF) é resultado da necessidade de se padronizar a linguagem Fortran para o paradigma da programação paralela de dados. Possui um conjunto de construtores e extensões do Fortran 90 que permitem ao programador expressar o paralelismo de uma forma relativamente simples [12]. O HPF utiliza o SPMD para fazer o paralelismo de dados; cada processador possui uma cópia do mesmo programa, porém cada um deles trabalha com uma parte do conjunto de dados. Existem diretivas do HPF que permitem fazer a distribuição os dados, alinhamento de vetores, entre outras. As declarações em Fortran 90, acrescidas das diretivas HPF, definem o paralelismo SPMD. A utilização das diretivas HPF exige, inicialmente, que se defina uma grade conceitual de processadores, para que se distribua os dados aos processadores envolvidos e, por fim, que se executem os cálculos necessários. As diretivas apenas dão uma sugestão ao compilador da distribuição desejada (não apenas na distribuição, mas em qualquer outra diretiva). O compilador tem a liberdade de ignorar ou não, ou ainda modificar, qualquer diretiva sugerida pelo programador. As diretivas são comentários para o compilador Fortran 90 deste modo um programa em HPF compila sem problemas no modo seqüencial [13]. 60

63 O uso das diretivas HPF segue o seguinte formato:!hpf$ <diretiva-hpf> Com o intuito de melhorar o desempenho do programa, as diretivas do HPF devem ser inseridas com cuidado para que não haja muita comunicação entre os processadores. Devemos procurar seguir as seguintes recomendações: Tentar balancear a carga; Procurar manter a localidade dos dados; Utilizar a notação de vetores do Fortran 90. Podemos citar também o padrão OpenMP. Ela é uma extensão de uma linguagem aplicável e por enquanto usado apenas em máquinas multiprocessadas. O termo MP vem de Multi-Processing, mas tipicamente não se tem vários processos, mas sim várias threads, ou seja, multi-threading. O OpenMP não é uma biblioteca de comunicação, ele tem como objetivo prover a comunicação entre máquinas de memória compartilhada. Trata-se de um conjunto de diretivas de programação a serem utilizadas em máquinas multiprocessadas. Na Figura 4.3 podemos ver um pequeno trecho de código em Fortran usando as diretivas do OpenMP. 61

64 1 C trecho de código para calcular PI 2 3!$OMP PARALLEL DO PRIVATE(x), SHARED(w) 4!$OMP REDUCTION (+:sum) 5 do i = 1, n 6 x = w * (i-0.5d0) 7 sum = sum + f (x) 8 enddo 9 C Continuação do código FIGURA 4.3 Parte de um código OpenMP. Todas as chamadas do OpenMP são comentários em um compilador Fortran normal (modelo seqüencial). No exemplo anterior (Figura 4.3), na linha 3, o programador abriu uma sessão paralela determinando uma variável privada x e uma compartilhada w. No trecho mostrado Figura 4.3 serão divididas as iterações do laço do entre os processadores disponíveis. O programador não necessita informar quantos são os processadores e em quantas partes o laço deve ser dividido, isto é feito de forma quase automática Programação por Biblioteca via Troca de Mensagens Basicamente temos duas bibliotecas amplamente usadas: MPI e o PVM. Estas bibliotecas podem ser utilizadas em máquina multiprocessada ou em multicomputador. A seguir temos alguns detalhes sobre elas. O Parallel Virtual Machine (PVM) foi desenvolvido no início dos anos 90. O problema a ser resolvido pode ser programado em C ou Fortran e os pontos de comunicação, 62

65 sincronismo e demais iterações entre os processos, são construídos através de primitivas do PVM. O PVM é composto por um conjunto de bibliotecas de rotinas e de processos servidores que provêem a comunicação e controle dos processos entre os computadores [13]. Vide Figura 4.4 para maiores detalhes. FIGURA 4.4 Layout da Execução de um Código PVM. São disponibilizadas as seguintes primitivas: Gestão de processos: inicialização, término e agrupamento; Comunicação: envio, recepção e difusão de sinais; Sincronização: barreiras; Outros: Verificação e manutenção de estado da Máquina Virtual. O PVM possui um console para atuar e interagir sobre a máquina virtual: agregando mais nós ao sistema, listando processos em execução, entre outras funções. 63

66 O PVM não paraleliza nada de modo automático, o programador é responsável pela paralização e manutenção da lógica do programa através de inserção de chamadas à rotinas do PVM. A biblioteca PVM fornece um ambiente para a troca dos dados e controle dos processos para obter a paralelização do programa. Outra biblioteca muito utilizada é a Message Passing Interface (MPI). Tipicamente é usada em sistemas de memória distribuída onde existe a necessidade de trocar mensagens entre as unidades de processamento e permite a programação paralela usando o paradigma SPMD. O padrão MPI define a semântica e a sintaxe de um conjunto de rotinas que, utilizando as linguagens C ou Fortran 77/90, podem ser empregadas no desenvolvimento de aplicações paralelas executadas em máquinas de memória compartilhada ou distribuída. O processo de padronização, também conhecido como Fórum MPI, envolveram mais de 80 pessoas de 40 organizações diferentes, originárias principalmente da Europa e dos Estados Unidos. Os trabalhos foram marcados pela união dos mais importantes fabricantes de computadores paralelos com os pesquisadores de universidades, laboratórios governamentais e indústrias. O processo de padronização iniciou-se em abril de 1992 no "Workshop on Standards for Message Passing in a Distributed Memory Environment" nos Estados Unidos. Em novembro de 1992 foi apresentada uma proposta inicial (conhecida como MPI1), a qual foi revisada e ampliada em fevereiro de Os trabalhos do MPI foram desenvolvidos a partir da proposta inicial, sendo que em novembro de 1993 um padrão preliminar foi apresentado na "Supercomputing' 93 Conference". Após algumas alterações, a versão 1.0 do MPI foi apresentada em meados de 1994 [20]. 64

67 O MPI, ao contrário de adotar como padrão apenas um ambiente e uma plataforma, incorporou as características mais pertinentes dos melhores ambientes e plataformas existentes (grande facilidade de portabilidade) [20][21]. Quando houver necessidade de trocar informações entre processos que não compartilhem a mesma memória, estas devem ser transportadas explicitamente via mensagens. Portanto, uma troca de mensagens pode ser entendida, como um acesso a memória não local (podendo ser chamada de memória remota). Por exemplo, se um processo que esta sendo executado no processador Pn necessitar de um dado do processo que esta sendo executado no processador P0, então este deverá será transferido explicitamente da memória local de P0 e será copiado na memória local de Pn [12]. Um modelo genérico desta troca de mensagens é mostrado na fig 4.5: FIGURA 4.5 Exemplo de Transferência de Mensagens. Para que ocorra uma transferência das mensagens é necessário anexar algumas informações importantes, tais como: identificador da mensagem, endereço origem e destino, tipo da mensagem, onde os dados irão ser armazenados, entre outros. 65

68 4.3 A Especificação do MPI Levando-se em consideração o limite de tempo imposto à formulação do padrão, definiu-se um conjunto básico de rotinas relacionadas à comunicação ponto-a-ponto e coletiva, deixando para uma próxima versão uma maior abrangência de operações. Na Figura 4.6 temos um exemplo da estrutura de um programa usando o MPI [21][22]: FIGURA 4.6 Estrutura Básica de um Programa MPI. Mensagens em MPI são pacotes de informações trocados entre processadores. Para efetuar uma troca de mensagens, o ambiente de execução necessita conhecer no mínimo as seguintes informações [12][21]: Processador que envia; Processador que recebe; Localização dos dados na origem; Localização dos dados no destino; Tamanho dos dados; Tipo de dados. 66

69 A biblioteca MPI define um conjunto de 129 rotinas, que oferecem os seguintes serviços [20]: Comunicação ponto-a-ponto; Comunicação coletiva; Suporte para grupos de processos; Suporte para contextos de comunicação; Suporte para topologia de processos. Analisando-se cada um dos tópicos anteriores, têm-se [22][23]: A - Comunicação Ponto-a-Ponto e Coletiva: O MPI implementa diversos tipos de comunicação. As rotinas de comunicação compõem o núcleo básico do MPI, onde as comunicações ponto-a-ponto envolvem apenas um par de processos. O MPI fornece várias primitivas send e receive para a realização da comunicação de dados de um determinado tipo e é associado a um tag. Determinar o tipo de dado é necessário para a correta interpretação dos mesmos em plataformas heterogêneas. O tag possibilita a seleção da mensagem pelo processo receptor, permitindo que apenas mensagens de um determinado tag sejam recebidas. Há também a possibilidade do recebimento de mensagens com qualquer tag através da sua generalização (wildcards). A seleção da mensagem também pode ser feita através do processo que originou a mensagem (procedimento semelhante à utilização do parâmetro tag). As rotinas de comunicação (ponto-a-ponto e coletiva) formam o núcleo básico da biblioteca MPI. Antes de apresentar essas rotinas, é importante entender como a biblioteca MPI organiza uma mensagem. Uma mensagem na biblioteca MPI é definida como um vetor de elementos de um determinado tipo. Ao se enviar uma mensagem, deve-se indicar o endereço do primeiro elemento desse vetor e o número de elementos que o formam. Esses elementos devem ser do mesmo tipo. 67

70 Deve-se indicar na mensagem o tipo dos elementos que estão sendo enviados, essa característica é essencial quando a comunicação é realizada entre sistemas heterogêneos, tornando necessária a conversão dos dados (feita de forma automática pelo compilador). O MPI permite que se criem tipos definidos pelo usuário, tornando possível enviar mensagens compostas por elementos de tipos distintos, como por exemplo, as estruturas usadas na linguagem "C" (structs). Para as operações de comunicação (ponto a ponto), a biblioteca MPI define: Rotina Send(): A maneira eficiente de implementação de uma rotina send( ) depende, de certa maneira, do protocolo e da plataforma paralela sobre as quais o MPI está sendo executado. Para garantir a eficiência em qualquer plataforma, o MPI define vários modos de comunicação, que por sua vez definem diferentes semânticas para a rotina. A definição de bloqueio de rotinas utilizada pelo Fórum MPI caracteriza-se pela sobreposição ou não de operações de comunicação, em relação à execução do programa. Existem 4 modos de comunicação para o envio das mensagens [12][20][23]: Standard: Termina a execução do comando send sem saber se o dado realmente chegou no seu destino. A mensagem pode ficar pendente no ambiente de execução durante algum tempo, tipicamente a mensagem é copiada num buffer na máquina emissora até que o dado seja realmente entregue ao receptor; Synchronous: Só quando o receptor confirmar que está pronto para receber a mensagem é que o envio acontece; até lá o processo emissor fica a espera. Este modo pode atrasar e muito a aplicação; 68

71 Buffered: A mensagem é copiada para um buffer local do programa e só depois a mensagem é enviada. O processo emissor não fica dependente da sincronização com o processo receptor e pode desde logo continuar sua execução; Ready: O envio é completado imediatamente depois de sua execução. A comunicação ocorre normalmente se aparecer um receptor já preparado para receber. Se este não existir, o resultado da comunicação fica indefinido. Em qualquer um dos modos a ordem da mensagem é preservada: O processo A envia N mensagens para o processo B fazendo N chamadas a qualquer uma das funções MPI_Send( ); O processo B faz N chamadas a MPI_Rec( ) para receber as N mensagens; O ambiente de execução garante que a 1ª chamada ao MPI_send( ) é sincronizada com a 1ª chamada ao MPI_Recv( ), a 2ª chamada ao MPI_send( ) é sincronizada com a 2ª chamada ao MPI_Recv( ), e assim sucessivamente. Rotina Receive(): Uma mensagem é selecionada para recebimento pelo rank do processo que a enviou e pelo seu identificador (tag), dentro de um determinado contexto. Esses dois valores podem ser wildcards, isto é, podem utilizar rotinas que recebam de qualquer processo mensagens de qualquer tag. Rotinas de comunicação coletivas: O MPI define vários tipos de rotinas coletivas, como por exemplo, rotinas de broadcast(), aritméticas globais e de sincronização. Outras variantes de rotinas coletivas também foram definidas: rotinas gather(), scather() e uma combinação das duas anteriores [12]. Essa grande variedade de funções coletivas se explica pelo fato de garantir operações mais eficientes em todas as plataformas paralelas. Todas as operações coletivas no MPI são bloqueantes e executa o modo padrão (Standard) de transmissão. 69

72 As comunicações coletivas no MPI têm por objetivo a transmissão de dados e/ou a sincronização de processos inseridos em um determinado contexto. O contexto de uma comunicação é determinado por um objeto chamado comunicador. As funções coletivas especificadas pelo padrão MPI são (Figura 4.7 para mais detalhes) [20]: Barrier, responsável pela sincronização de todos os processos de um grupo; Broadcast, responsável por transmitir a mesma informação para todos os processos de um grupo; Gather, responsável por reunir em um processo, dados diferentes oriundos de todos os processos de um grupo; Scatter, responsável por distribuir para todos os processos de um grupo, dados diferentes oriundos de um processo; Allgather, semelhante à função gather, porém, todos os processos recebem os dados. Ele é a união das funções gather e broadcast; AlltoAll, reúne as características das funções gather e scatter, onde dados diferentes, de todos os processos, são enviados também para todos os outros processos; 70

73 FIGURA 4.7 Funcionamento das Rotinas de Comunicação Coletiva. FONTE: MPI: The complete Reference [20]. Em alguns casos as comunicações podem ser "de um para todos" ou "de todos para um" (como em gather, broadcast e scatter). Nesses casos, o processo transmissor e/ou receptor denominam-se root. É importante salientar que em todos os casos o processo root comunica-se com todos os outros processos, incluindo ele próprio. Embora as comunicações coletivas tenham sido projetadas para serem consistentes com as comunicações ponto a ponto, existem algumas simplificações/restrições destacadas pelo padrão como as do tipo reduce, allreduce, entre outras (Figura 4.8). 71

74 FIGURA 4.8 Operações Globais de Redução. FONTE: Adaptada de MPI: The Complete Reference [20]. B - Suporte para identificação de processos: O MPI relaciona os processos em grupos e esses processos são identificados pela sua classificação dentro desse grupo, a partir do zero. Essa classificação dentro do grupo é denominada rank. O MPI apresenta primitivas de criação e destruição de grupos de processos, então um processo no MPI é identificado por um grupo e por um rank dentro deste grupo. C - Suporte para contextos de comunicação: Contextos podem ser definidos como escopos que relacionam um determinado grupo de processos. Esses tipos de instâncias são implementados com o intuito de garantir que não existam mensagens que sejam recebidas ambiguamente por grupos de processos não relacionados. Então, um grupo de processos ligados por um contexto não consegue comunicar-se com um grupo que esteja definido em outro contexto. Esse tipo de estrutura não é visível e nem controlado pelo usuário e o seu gerenciamento fica a cargo do sistema. Para a criação de contextos, o MPI utiliza o conceito de communicator. Um communicator é um objeto manuseado pelo programador e relaciona um grupo (ou grupos) de processos com um determinado contexto. Se existem, por exemplo, aplicações paralelas distintas executando em um mesmo ambiente, para cada uma delas será criado um communicator. Isso criará contextos distintos que relacionarão os grupos de processos de cada aplicação e evitará que esses interfiram entre si. 72

75 4.4 Métricas de Desempenho Uma característica fundamental da computação paralela é o aumento de velocidade de processamento. Neste contexto, duas medidas muito importantes são usadas para a verificação da qualidade dos algoritmos paralelos: speed-up e eficiência [12][14][24]. Uma definição largamente aceita para speed-up é o aumento de velocidade observado quando se executa uma determinada aplicação em p processadores em relação à execução desta aplicação em um processador. Mostra quantas vezes o código paralelo ficou mais rápido, que sua versão seqüencial, com um número de processadores utilizados. Então, tem-se: [25][26] T1 speedup = (4.1) Tp onde, T1 = tempo de execução em 1 processador; Tp = tempo de execução em p processadores. Idealmente, o ganho de speedup deveria tender ao número de processadores, que seria o seu valor ideal (speed-up linear). Porém, três fatores podem ser citados que influenciam essa relação, gerando sobrecargas que diminuem o seu valor ideal [26]: Sobrecarga da comunicação entre os processadores; Partes do código executável ser estritamente seqüencial; Nível de paralelismo utilizado; Desbalanceamento de carga. Na prática então o speed-up real tende a ser menor do que o ideal, devido a sobrecargas mencionadas anteriormente, na Figura 4.9 podemos notar que o speed-up tende a cair com o aumento do número de processadores envolvidos na execução. 73

76 FIGURA 4.9 Curvas de Speed-up. Outra medida importante é a eficiência, que trata da relação entre o speed-up e o número de processadores [12][25]. speedup eficiência = (4.2) p onde, p = é o número de processadores usados na simulação. A eficiência indica a taxa de utilização média das unidades de processamento, mostra se os recursos disponíveis foram bem utilizados (Figura 4.10). 74

77 FIGURA 4.10 Curvas de Eficiência. O ideal seria que cada unidade de processamento ficasse 100% do tempo ativa (linha teórica). Normalmente as unidades de processamento ficam parte de seu tempo esperando por resultados de vizinhos e sincronismo, o que reduz sua taxa de utilização. Um sistema é dito escalável quando sua eficiência se mantém constante à medida que o número de processadores p aplicado à solução do problema cresce. Se o tamanho do problema é mantido constante e o número de processadores aumenta, o overhead de comunicação tende a crescer e a eficiência a diminuir. A análise da escalabilidade considera a possibilidade de se aumentar proporcionalmente o tamanho do problema a ser resolvido à medida que p cresce de forma a contrabalançar o natural aumento do overhead de comunicação quando p cresce. A granularidade relaciona o custo de processamento pelo custo de comunicação. Idealmente um sistema deve possuir granularidade grossa, o que indica que o custo de comunicação é menor se comparado com o do processamento. Para obter uma granularidade grossa deve-se fazer com que os processos fiquem o máximo de tempo executando processamento das tarefas e o mínimo tempo possível fazendo comunicação entre eles. 75

78 4.5 Instrumentação do Código Para a medição dos tempos da simulação foi usado a rotina MPI_Wtime(). Ela retorna o tempo em segundos no momento de sua execução. Seu uso é direto e simples, como mostrado no pseudo código abaixo [12]: * * * t1 = MPI_Wtime() trecho do programa a ser temporizado t2 = MPI_Wtime() delta = t2 t1 mostre delta * * * Para que a medida seja feita em todos os processadores, no mesmo instante, é necessário colocar uma barreira de sincronismo antes de iniciar a medida do tempo. Quando todos chegarem nesta parte do programa é que deve ser feita a coleta da informação de tempo. Para tanto foi usado o comando MPI_Barrier(), esta barreira é utilizada para sincronizar os processos envolvidos na execução da aplicação. Os processos ficam bloqueados até que todos os outros atingem essa parte do programa. Seu uso é simples e direto: MPI_Barrier( ) Seu funcionamento pode ser visualizado na Figura 4.11 abaixo: 76

79 FIGURA 4.11 Funcionamento do MPI_Barrier(). Depois da barreira e da medição dos tempos, todos os processadores envolvidos na execução do programa possuem o valor, em segundos, do tempo gasto por aquele trecho do código. Eventualmente, estes valores podem apresentar pequenas diferenças entre eles, neste caso é necessário descobrir o maior valor encontrado nas suas medições. O comando usado para isto é o MPI_Reduce(), este faz com que o processo chamado de root (rank=0 ) colete os dados de todos os outros processos envolvidos na simulação. Os dados coletados são combinados com uma operação lógica ou aritmética específica, por exemplo: valores coletados e somados pelo processo raiz podem ser visto na Figura

80 FIGURA 4.12 Funcionamento do MPI_Reduce(). Na instrumentação do programa de simulação foi usada a operação MPI_MAX, onde é retornado, para o processo root, o máximo valor encontrado entre as medidas de tempo. No próximo Capítulo temos os resultados obtidos com a paralelização usando o HPF. A inclusão de diretivas dentro do código em Fortran 90 pode facilitar em muito a programação paralela. 78

81 CAPÍTULO 5 SIMULAÇÕES REALIZADAS USANDO O HPF A simulação de dinâmica molecular envolveu um programa implementado em Fortran 77. Neste foram identificados os gargalos do sistema e levantado as possíveis otimizações que poderiam ser aplicadas ao programa para obter um desempenho melhor. Posteriormente o código foi portado do Fortran 77 para o Fortran 90, buscando ganhar algum desempenho na execução. A paralelização do código ocorreu primeiro com o uso do HPF e posteriormente foi usada a biblioteca MPI, onde foi concentrado a maior parte desta dissertação (maiores detalhes no Capitulo 6). 5.1 Desempenho Obtido com o Programa Original Foram feitas várias simulações em diferentes compiladores e para diferentes números de partículas. Na Tabela 5.1 temos os tempos de execução do programa seqüencial, versão original feito em Fortran 77, com o compilador da Intel ifc versão 5.0. A máquina usada nos testes foi um Athlon 1.33 Ghz, 512 Mbytes de RAM, rodando um Linux Red Hat 7.1 (máquina front-end do cluster AMD). Depois temos a representação gráfica deste tempo (Figura 5.1). TABELA 5.1 Resultados das Simulações. Número de Moléculas Tempo (s)

82 FIGURA 5.1 Resultado Obtido Versão Serial. Para análise do código seqüencial foi utilizada uma ferramenta de profile do compilador da Portland (Figura 5.2), pode-se verificar que o gargalo do programa esta na rotina que calcula forças entre as partículas (rotina chamada de cforce que foi explicada no Capítulo 2). De acordo com a ferramenta de profile, foi notado que esta rotina consome aproximadamente 98% do tempo total de execução do programa. O ponto de partida então foi a paralelização deste trecho do programa, com o objetivo de obter uma redução significativa no tempo total de execução do mesmo. 80

83 FIGURA 5.2 Saída do Profile da Portland. 5.2 Portando o Código Fortran 77 para Fortran 90 Para melhorar o desempenho do programa, o código original feito em Fortran 77 foi portado para Fortran 90. O principal benefício esperado foi que o uso das operações em lote de vetores e matrizes em Fortran 90 conseguisse diminuir o tempo total de execução do programa e conseqüentemente obter um desempenho melhor da aplicação [27]. Depois do programa convertido foram executados novamente os testes e estes não apresentaram resultados favoráveis, ou seja, a conversão para Fortran 90 não gerou um código mais rápido. Provavelmente este fato ocorreu pois a rotina que calcula as forças não pôde ser tão otimizada pelas operações em lote de seus vetores. 81

Capítulo 8 Arquitetura de Computadores Paralelos

Capítulo 8 Arquitetura de Computadores Paralelos Capítulo 8 Arquitetura de Computadores Paralelos Necessidade de máquinas com alta capacidade de computação Aumento do clock => alta dissipação de calor Velocidade limitada dos circuitos => velocidade da

Leia mais

Sistemas Paralelos e Distribuídos. Prof. Jorge Dantas de Melo Depto. Eng. Comp. e Automação CT - UFRN

Sistemas Paralelos e Distribuídos. Prof. Jorge Dantas de Melo Depto. Eng. Comp. e Automação CT - UFRN Sistemas Paralelos e Distribuídos Prof. Jorge Dantas de Melo Depto. Eng. Comp. e Automação CT - UFRN Conceitos preliminares Paralelismo refere-se a ocorrência simultânea de eventos em um computador Processamento

Leia mais

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 6 - ALGORÍTIMOS PARALELOS MPI - Parallel Virtual Machine e PVM - Parallel Virtual Machine 1. INTRODUÇÃO Inicialmente é necessário conceber alguns conceitos para entendimento dos algoritmos paralelos:

Leia mais

Sistemas MIMD. CES-25 Arquiteturas para Alto Desmpenho. Paulo André Castro

Sistemas MIMD. CES-25 Arquiteturas para Alto Desmpenho. Paulo André Castro Sistemas MIMD Arquiteturas para Alto Desmpenho Prof. pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac Arquiteturas Paralelas (SISD) Single Instruction Stream, Single Data Stream: Monoprocessador

Leia mais

ALGORÍTMOS PARALELOS (Aula 2) LCAD. Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES

ALGORÍTMOS PARALELOS (Aula 2) LCAD. Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES ALGORÍTMOS PARALELOS (Aula 2) Neyval C. Reis Jr. OUTUBRO/2004 LCAD Laboratório de Computação de Alto Desempenho DI/UFES Programa do Curso LCAD 1. Introdução 2. Arquitetura de Computadores 3. Arquiteturas

Leia mais

slide 0 Algoritmos Paralelos

slide 0 Algoritmos Paralelos slide 0 Algoritmos Paralelos Slide 2 Demanda por Velocidade Computational Demanda contínua por maior rapidez computational das máquinas que as atualmente disponíveis. As áreas que exigem maior rapidez

Leia mais

Arquitetura NUMA 1. Daniel de Angelis Cordeiro. INRIA MOAIS project Laboratoire d Informatique de Grenoble Université de Grenoble, França

Arquitetura NUMA 1. Daniel de Angelis Cordeiro. INRIA MOAIS project Laboratoire d Informatique de Grenoble Université de Grenoble, França Arquitetura NUMA 1 Daniel de Angelis Cordeiro INRIA MOAIS project Laboratoire d Informatique de Grenoble Université de Grenoble, França 6 de Outubro de 2010 1 Baseado em slides feitos por Christiane Pousa

Leia mais

Arquitetura de Computadores. Professor: Vilson Heck Junior

Arquitetura de Computadores. Professor: Vilson Heck Junior Arquitetura de Computadores Professor: Vilson Heck Junior Agenda Conceitos Estrutura Funcionamento Arquitetura Tipos Atividades Barramentos Conceitos Como já discutimos, os principais componentes de um

Leia mais

Resumo. Introdução Cluster Cluster Beowulf Curiosidades Conclução

Resumo. Introdução Cluster Cluster Beowulf Curiosidades Conclução Cluster Resumo Introdução Cluster Cluster Beowulf Curiosidades Conclução Introdução Sua empresa esta precisando fazer um grande processamento; As Nuvens existentes não são suficientes para sua empresa;

Leia mais

Organização de Computadores 1

Organização de Computadores 1 Organização de Computadores 1 SISTEMA DE INTERCONEXÃO (BARRAMENTOS) Prof. Luiz Gustavo A. Martins Arquitetura de von Newmann Componentes estruturais: Memória Principal Unidade de Processamento Central

Leia mais

Arquitetura e Organização de Computadores I

Arquitetura e Organização de Computadores I Arquitetura e Organização de Computadores I Interrupções e Estrutura de Interconexão Prof. Material adaptado e traduzido de: STALLINGS, William. Arquitetura e Organização de Computadores. 5ª edição Interrupções

Leia mais

Introdução às arquiteturas paralelas e taxonomia de Flynn

Introdução às arquiteturas paralelas e taxonomia de Flynn Introdução às arquiteturas paralelas e taxonomia de Flynn OBJETIVO: definir computação paralela; o modelo de computação paralela desempenhada por computadores paralelos; e exemplos de uso da arquitetura

Leia mais

4 Computação Paralela 4.1. Introdução

4 Computação Paralela 4.1. Introdução 4 Computação Paralela 4.1. Introdução Nos últimos anos observa-se uma tendência cada vez maior do aumento da demanda computacional na resolução de grandes problemas. Exemplos de aplicações que exigem alto

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Sistemas de Entrada/Saída Princípios de Hardware Sistema de Entrada/Saída Visão Geral Princípios de Hardware Dispositivos de E/S Estrutura Típica do Barramento de um PC Interrupções

Leia mais

Multiprocessamento. Multiprocessadores com memória distribuída (multicomputador)

Multiprocessamento. Multiprocessadores com memória distribuída (multicomputador) Multiprocessamento Multiprocessadores com memória distribuída (multicomputador) Conjunto de processadores, cada qual com sua memória local Processadores se comunicam por troca de mensagens, via rede de

Leia mais

Paralelismo. Computadores de alto-desempenho são utilizados em diversas áreas:

Paralelismo. Computadores de alto-desempenho são utilizados em diversas áreas: Computadores de alto-desempenho são utilizados em diversas áreas: - análise estrutural; - previsão de tempo; - exploração de petróleo; - pesquisa em fusão de energia; - diagnóstico médico; - simulações

Leia mais

Sistemas Distribuídos Conceitos HW e SW. Edeyson Andrade Gomes www.edeyson.com.br

Sistemas Distribuídos Conceitos HW e SW. Edeyson Andrade Gomes www.edeyson.com.br Sistemas Distribuídos Conceitos HW e SW Edeyson Andrade Gomes www.edeyson.com.br Roteiro da Aula Roteiro da Aula Conceitos de Hardware Conceitos de Software Combinações de SW e HW 3 Sistemas Distribuídos

Leia mais

Sistemas Operacionais Carlos Eduardo Portela Serra de Castro

Sistemas Operacionais Carlos Eduardo Portela Serra de Castro Introdução Sistemas Operacionais 1 Sistema Operacional: Um conjunto de programas, executado pelo computador como os outros programas. Função: Controlar o funcionamento do computador, disponibilizando seus

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais SISTEMAS COM MÚLTIPLOS PROCESSADORES LIVRO TEXTO: CAPÍTULO 13, PÁGINA 243 Prof. Pedro Luís Antonelli Anhanguera Educacional INTRODUÇÃO Arquiteturas que possuem duas ou mais CPUs interligadas

Leia mais

Professores: Aula 10. Lúcia M. A. Drummond Simone de Lima Martins. Conteúdo: Arquiteturas Avançadas. - Arquiteturas RISC - Processamento Paralelo

Professores: Aula 10. Lúcia M. A. Drummond Simone de Lima Martins. Conteúdo: Arquiteturas Avançadas. - Arquiteturas RISC - Processamento Paralelo 1 Professores: Aula 10 Lúcia M. A. Drummond Simone de Lima Martins Conteúdo: Arquiteturas Avançadas - Arquiteturas RISC - Processamento Paralelo 2 Arquiteturas RISC Reduced Instruction Set Computer se

Leia mais

7 Processamento Paralelo

7 Processamento Paralelo 7 Processamento Paralelo Yes, of course, who has time? Who has time? But then if we do not ever take time, how can we ever have time? (The Matrix) 7.1 Introdução Classificação de Sistemas Paralelos Diversas

Leia mais

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 6 - ARQUITETURAS AVANÇADAS DE COMPUTADORES 1. INTRODUÇÃO As arquiteturas dos processadores têm evoluído ao longo dos anos, e junto com ela o conceito de arquitetura avançada tem se modificado. Nos

Leia mais

Comparação SDs X Scs

Comparação SDs X Scs Prof. Alexandre Lima Sistemas Distribuídos Cap 9 1/7 Comparação SDs X Scs Distribuição inerente Economia Velocidade Confiabilidade Crescimento incremental Descrição Algumas aplicações envolvem máquinas

Leia mais

Processos (Threads,Virtualização e Migração de Código)

Processos (Threads,Virtualização e Migração de Código) Processos (Threads,Virtualização e Migração de Código) Roteiro Processos Threads Virtualização Migração de Código O que é um processo?! Processos são programas em execução. Processo Processo Processo tem

Leia mais

} Monolíticas Aplicações em um computador centralizado. } Em Rede Aplicações com comunicação em rede. } Distribuídas Comunicação e cooperação em rede

} Monolíticas Aplicações em um computador centralizado. } Em Rede Aplicações com comunicação em rede. } Distribuídas Comunicação e cooperação em rede Prof. Samuel Souza } Monolíticas Aplicações em um computador centralizado } Em Rede Aplicações com comunicação em rede } Distribuídas Comunicação e cooperação em rede } Aplicações que são funcionalmente

Leia mais

hvbacellar@gmail.com Palavras-chave Cluster; Beowulf; OpenMosix; MPI; PVM.

hvbacellar@gmail.com Palavras-chave Cluster; Beowulf; OpenMosix; MPI; PVM. Cluster: Computação de Alto Desempenho Hilário Viana Bacellar Instituto de Computação, Universidade Estadual de Campinas Av. Albert Einstein 1251, Cidade Universitária, CEP 13083-970 Campinas, SP, Brasil

Leia mais

XWLOL]DQGRÃEHQFKPDUNÃ03%HQFKÃ

XWLOL]DQGRÃEHQFKPDUNÃ03%HQFKÃ $YDOLDQGRÃRÃGHVHPSHQKRÃGHÃDJORPHUDGRVÃFRPÃELEOLRWHFDÃ03,ÃÃ XWLOL]DQGRÃEHQFKPDUNÃ03%HQFKÃ Nicolas Kassalias, Edson T. Midorikawa Departamento de Engenharia de Computação e Sistemas Digitais, Universidade

Leia mais

Máquinas Multiníveis

Máquinas Multiníveis Infra-Estrutura de Hardware Máquinas Multiníveis Prof. Edilberto Silva www.edilms.eti.br edilms@yahoo.com Sumário Conceitos básicos Classificação de arquiteturas Tendências da tecnologia Família Pentium

Leia mais

Organização e Arquitetura de Computadores I. de Computadores

Organização e Arquitetura de Computadores I. de Computadores Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de I Organização Básica B de (Parte V, Complementar)

Leia mais

William Stallings Arquitetura e Organização de Computadores 8 a Edição

William Stallings Arquitetura e Organização de Computadores 8 a Edição William Stallings Arquitetura e Organização de Computadores 8 a Edição Capítulo 7 Entrada/saída Os textos nestas caixas foram adicionados pelo Prof. Joubert slide 1 Problemas de entrada/saída Grande variedade

Leia mais

1 - Processamento de dados

1 - Processamento de dados Conceitos básicos sobre organização de computadores 2 1 - Processamento de dados O que é processamento? O que é dado? Dado é informação? Processamento é a manipulação das informações coletadas (dados).

Leia mais

Capítulo 8. Sistemas com Múltiplos Processadores. 8.1 Multiprocessadores 8.2 Multicomputadores 8.3 Sistemas distribuídos

Capítulo 8. Sistemas com Múltiplos Processadores. 8.1 Multiprocessadores 8.2 Multicomputadores 8.3 Sistemas distribuídos Capítulo 8 Sistemas com Múltiplos Processadores 8.1 Multiprocessadores 8.2 Multicomputadores 8.3 Sistemas distribuídos 1 Sistemas Multiprocessadores Necessidade contínua de computadores mais rápidos modelo

Leia mais

Sistemas Operacionais. Alexandre Meslin meslin@inf.puc-rio.br

Sistemas Operacionais. Alexandre Meslin meslin@inf.puc-rio.br Sistemas Operacionais Alexandre Meslin meslin@inf.puc-rio.br Ementa Apresentação do curso Cap1 - Visão Geral Cap2 - Conceitos de Hardware e Software Cap3 - Concorrência Cap4 - Estrutura do Sistema Operacional

Leia mais

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES INTRODUÇÃO AO PARALELISMO: PROCESSADORES SUPERESCALARES. Prof. Dr. Daniel Caetano 2012-1

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES INTRODUÇÃO AO PARALELISMO: PROCESSADORES SUPERESCALARES. Prof. Dr. Daniel Caetano 2012-1 ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES INTRODUÇÃO AO PARALELISMO: PROCESSADORES SUPERESCALARES Prof. Dr. Daniel Caetano 2012-1 Lembretes Compreender o funcionamento da Arquitetura Superpipeline Compreender

Leia mais

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 1 2 Revisão de Hardware 2.1 Hardware O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 2.1.1 Processador O Processador

Leia mais

Processamento Paralelo

Processamento Paralelo Processamento Paralelo Hardware Paralelo Universidade Estadual de Santa Cruz Bacharelado em Ciência da Computação Prof. Esbel Tomás Valero Orellana Portabilidade O principal problema das primeiras maquinas

Leia mais

Definindo melhor alguns conceitos

Definindo melhor alguns conceitos Definindo melhor alguns conceitos Processamento Paralelo: processamento de informação concorrente que pertencem a um ou mais processos que resolvem um único problema. Processamento Distribuído: processamento

Leia mais

Cluster HPC High Performance Computing.

Cluster HPC High Performance Computing. Faculdade de Tecnologia de Guaratinguetá. doze, março de 2009. Cluster HPC High Performance Computing. Diogo Salles, Thiago Pirro, Camilo Bernardes, Paulo Roberto, Ricardo Godoi, Douglas, Fauzer. Sistemas

Leia mais

Sistemas distribuídos:comunicação

Sistemas distribuídos:comunicação M. G. Santos marcela@estacio.edu.br Faculdade Câmara Cascudo - Estácio de Sá 16 de abril de 2010 Formas de comunicação Produtor-consumidor: comunicação uni-direccional, com o produtor entregando ao consumidor.

Leia mais

Equipamentos de Rede. Prof. Sérgio Furgeri 1

Equipamentos de Rede. Prof. Sérgio Furgeri 1 Equipamentos de Rede Repetidor (Regenerador do sinal transmitido)* Mais usados nas topologias estrela e barramento Permite aumentar a extensão do cabo Atua na camada física da rede (modelo OSI) Não desempenha

Leia mais

Multi-processamento. Arquitecturas MIMD de memória partilhada Multi-cores heterogéneos Multi-processadores

Multi-processamento. Arquitecturas MIMD de memória partilhada Multi-cores heterogéneos Multi-processadores Multi-processamento Arquitecturas MIMD de memória partilhada Multi-cores heterogéneos Multi-processadores Arquitecturas MIMD de memória distribuída Massive Parallel Computers Sistemas distribuídos Ainda

Leia mais

Organização de Computadores 2005/2006 Processamento Paralelo

Organização de Computadores 2005/2006 Processamento Paralelo Organização de Computadores 2005/2006 Processamento Paralelo Paulo Ferreira paf a dei.isep.ipp.pt Maio de 2006 Introdução 2 Porquê?...........................................................................................

Leia mais

Márcio Leandro Moraes Rodrigues. Frame Relay

Márcio Leandro Moraes Rodrigues. Frame Relay Márcio Leandro Moraes Rodrigues Frame Relay Introdução O frame relay é uma tecnologia de chaveamento baseada em pacotes que foi desenvolvida visando exclusivamente a velocidade. Embora não confiável, principalmente

Leia mais

Memória compartilhada (shared memory): - o espaço de endereçamento é único; - comunicação através de load e store nos endereços de memória.

Memória compartilhada (shared memory): - o espaço de endereçamento é único; - comunicação através de load e store nos endereços de memória. 4. Arquiteturas ID áquinas ID (ultiple Instruction ultiple Data) são arquiteturas caracterizadas pela execução simultânea de múltiplos fluxos de instruções. Essa capacidade deve-se ao fato de que são construídas

Leia mais

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 4 - CLUSTER DE COMPUTADORES 1. INTRODUÇÃO Grande parte do tempo, os computadores que utilizamos encontram-se ociosos, ou seja, sem nada para processar. Isso se deve, em grande parte, pelas aplicações

Leia mais

1.2 Tipos de Sistemas Operacionais

1.2 Tipos de Sistemas Operacionais 1.2 Tipos de Operacionais Tipos de Operacionais Monoprogramáveis/ Monotarefa Multiprogramáveis/ Multitarefa Com Múltiplos Processadores 1.2.1 Monoprogramáveis/Monotarefa Os primeiros sistemas operacionais

Leia mais

Multicomputadores. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação CECOMP

Multicomputadores. Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação CECOMP Multicomputadores Introdução Vimos que existem dois tipos de processadores paralelos MIMD: Multiprocessadores. Multicomputadores. Nos multiprocessadores, existe uma memória compartilhada que pode ser acessada

Leia mais

FACULDADE PITÁGORAS PRONATEC

FACULDADE PITÁGORAS PRONATEC FACULDADE PITÁGORAS PRONATEC DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos carlos@oficinadapesquisa.com.br www.oficinadapesquisa.com.br Objetivos Ao final desta apostila,

Leia mais

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES. Prof. André Dutton

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES. Prof. André Dutton ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES Prof. André Dutton EMENTA: Conceitos fundamentais e histórico da ciência da computação; Histórico dos computadores, evolução e tendências; Modalidades de computadores

Leia mais

5 Planejamento dos experimentos

5 Planejamento dos experimentos 5 Planejamento dos experimentos Depois de escolher e implementar 5 modelos de concorrência e 4 modelos de sandboxes que consideramos representativos para um servidor web Lua, procuramos os principais fatores

Leia mais

Prof. Marcelo de Sá Barbosa SISTEMAS DISTRIBUIDOS

Prof. Marcelo de Sá Barbosa SISTEMAS DISTRIBUIDOS Prof. Marcelo de Sá Barbosa SISTEMAS DISTRIBUIDOS 1. Introdução a supercomputação 2. Visão geral de Mainframe 3. Cluster de computadores 4. Cluster Beowulf considerações de projeto 5. Cluster x Grid 6.

Leia mais

Organização e Arquitetura de Computadores

Organização e Arquitetura de Computadores Organização e Arquitetura de Computadores Entrada e saída Alexandre Amory Edson Moreno Nas Aulas Anteriores Foco na Arquitetura e Organização internas da Cleo Modelo Von Neuman Circuito combinacional Circuito

Leia mais

CPU - Significado CPU. Central Processing Unit. Unidade Central de Processamento

CPU - Significado CPU. Central Processing Unit. Unidade Central de Processamento CPU - Significado CPU Central Processing Unit Unidade Central de Processamento CPU - Função Na CPU são executadas as instruções Instrução: comando que define integralmente uma operação a ser executada

Leia mais

Análise de Desempenho de um SGBD para Aglomerado de Computadores

Análise de Desempenho de um SGBD para Aglomerado de Computadores Análise de Desempenho de um SGBD para Aglomerado de Computadores Diego Luís Kreutz, Gabriela Jacques da Silva, Hélio Antônio Miranda da Silva, João Carlos Damasceno Lima Curso de Ciência da Computação

Leia mais

Computação em cluster

Computação em cluster Computação em cluster Por Marcos Pitanga em 30 de maio de 2003 Introdução Este artigo tem por finalidade dar ao leitor uma visão mais integrada do que vem a ser a computação em cluster e como esta a cada

Leia mais

Desenvolvimento de um Cluster de Alto Desempenho com PVM

Desenvolvimento de um Cluster de Alto Desempenho com PVM Desenvolvimento de um Cluster de Alto Desempenho com PVM Daniel Cândido de Oliveira 1, Yzaac Gonçalves da Silva 1, Madianita Bogo 1 1 Centro Universitário Luterano de Palmas Universidade Luterana do Brasil

Leia mais

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários.

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários. Os sistemas computacionais atuais permitem que diversos programas sejam carregados na memória e executados simultaneamente. Essa evolução tornou necessário um controle maior na divisão de tarefas entre

Leia mais

Desempenho de um Cluster Virtualizado em Relação a um Cluster Convencional Similar

Desempenho de um Cluster Virtualizado em Relação a um Cluster Convencional Similar Desempenho de um Cluster Virtualizado em Relação a um Cluster Convencional Similar David Beserra 1, Alexandre Borba¹, Samuel Souto 1, Mariel Andrade 1, Alberto Araujo 1 1 Unidade Acadêmica de Garanhuns

Leia mais

Muitas aplicações modernas podem ser modeladas como tarefas divisíveis.

Muitas aplicações modernas podem ser modeladas como tarefas divisíveis. 1 Introdução O grande aumento de performance das redes de computadores, combinado com a proliferação de computadores de baixo custo e alto desempenho, trouxe à tona ambientes de meta-computação, ou grids[15,

Leia mais

AULA1 Introdução a Microprocessadores gerais

AULA1 Introdução a Microprocessadores gerais AULA1 Introdução a Microprocessadores gerais Disciplina: Aplicações Avançadas de Microprocessadores (AAM) Prof. Eduardo Henrique Couto ehcouto@hotmail.com 2014/1 Apresentação do Professor: Cronograma:

Leia mais

7-1. Parte 6 Otimizações da Arquitetura

7-1. Parte 6 Otimizações da Arquitetura 7-1 Parte 6 Otimizações da Arquitetura 7-2 Bibliografia [1] Miles J. Murdocca e Vincent P. Heuring, Introdução à Arquitetura de Computadores [2] Andrew S. Tanenbaum, Modern Operating Systems [3] William

Leia mais

Processadores clock, bits, memória cachê e múltiplos núcleos

Processadores clock, bits, memória cachê e múltiplos núcleos Processadores clock, bits, memória cachê e múltiplos núcleos Introdução Os processadores (ou CPUs, de Central Processing Unit) são chips responsáveis pela execução de cálculos, decisões lógicas e instruções

Leia mais

Análise quantitativa dos custos de comunicação para programas utilizando MPI executados em máquinas paralelas de memória distribuída

Análise quantitativa dos custos de comunicação para programas utilizando MPI executados em máquinas paralelas de memória distribuída Análise quantitativa dos custos de comunicação para programas utilizando MPI executados em máquinas paralelas de memória distribuída Corrêa, R.V. Preto, A. J. INPE, SLB INPE, LAC ricardo@slb.inpe.br airam@lac.inpe.br

Leia mais

SIS17 - Arquitetura de Computadores

SIS17 - Arquitetura de Computadores SIS17 - Arquitetura de Computadores Organização Básica B de Computadores (Parte I) Organização Básica B de Computadores Composição básica b de um Computador eletrônico digital Processador Memória Memória

Leia mais

Nível 3 Sistema Operacional

Nível 3 Sistema Operacional Nível 3 Sistema Operacional Universidade Tuiuti do Paraná UTP Faculdade de Ciências Exatas - FACET Tecnologia de Análise e Desenvolvimento de Sistemas Organização de Computadores Prof. André Luiz 1 Nível

Leia mais

Computação Heterogênea Programação paralela, clusters e GPUs

Computação Heterogênea Programação paralela, clusters e GPUs Computação Heterogênea Programação paralela, clusters e GPUs Profa. Dra. Denise Stringhini (ICT- Unifesp) Primeiro Encontro do Khronos Chapters Brasil Belo Horizonte, 20/09/2013 Conteúdo Computação heterogênea:

Leia mais

Módulo 4: Processos. Conceito de Processo. Escalonamento de processos Operações sobre processos Processos cooperantes Comunicação entre processos

Módulo 4: Processos. Conceito de Processo. Escalonamento de processos Operações sobre processos Processos cooperantes Comunicação entre processos Módulo 4: Processos Conceito de Processo Escalonamento de processos Operações sobre processos Processos cooperantes Comunicação entre processos 4.1 Conceito de Processo Um Sistema Operacional executa uma

Leia mais

Instituto Superior de Engenharia do Porto Administração de Sistemas Informáticos I Clusters

Instituto Superior de Engenharia do Porto Administração de Sistemas Informáticos I Clusters Instituto Superior de Engenharia do Porto Administração de Sistemas Informáticos I Clusters Trabalho elaborado por: 980368 - Sérgio Gonçalves Lima 1010949 - Nisha Sudhirkumar Chaganlal Clusters O que é

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 6 Estrutura de Sistemas Operacionais Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso

Leia mais

Computação de Alta Perfomance com Software Livre (Clusters)

Computação de Alta Perfomance com Software Livre (Clusters) Computação de Alta Perfomance com Software Livre (Clusters) 3º Seminário de Tecnologia da Informação UCSal Marcelo Soares Souza (marcelo@cebacad.net) CEBACAD Centro Baiano de Computação de alto Desempenho

Leia mais

Arquitetura de Computadores II

Arquitetura de Computadores II Universidade Federal do Rio de Janeiro Informática DCC/IM Arquitetura de Computadores II Sistemas de Troca de Mensagens O Sistema de Comunicação provê tipicamente os seguintes serviços para as aplicações:

Leia mais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais Notas da Aula 15 - Fundamentos de Sistemas Operacionais 1. Software de Entrada e Saída: Visão Geral Uma das tarefas do Sistema Operacional é simplificar o acesso aos dispositivos de hardware pelos processos

Leia mais

Sistemas Operacionais 2014 Introdução. Alexandre Augusto Giron alexandre.a.giron@gmail.com

Sistemas Operacionais 2014 Introdução. Alexandre Augusto Giron alexandre.a.giron@gmail.com Sistemas Operacionais 2014 Introdução Alexandre Augusto Giron alexandre.a.giron@gmail.com Roteiro Sistemas Operacionais Histórico Estrutura de SO Principais Funções do SO Interrupções Chamadas de Sistema

Leia mais

CPU Fundamentos de Arquitetura de Computadores. Prof. Pedro Neto

CPU Fundamentos de Arquitetura de Computadores. Prof. Pedro Neto Fundamentos de Arquitetura de Computadores Prof. Pedro Neto Aracaju Sergipe - 2011 Conteúdo 4. i. Introdução ii. O Trabalho de um Processador iii. Barramentos iv. Clock Interno e Externo v. Bits do Processador

Leia mais

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula Complementar - EQUIPAMENTOS DE REDE 1. Repetidor (Regenerador do sinal transmitido) É mais usado nas topologias estrela e barramento. Permite aumentar a extensão do cabo e atua na camada física

Leia mais

Universidade Tuiuti do Paraná UTP Faculdade de Ciências Exatas - FACET

Universidade Tuiuti do Paraná UTP Faculdade de Ciências Exatas - FACET Universidade Tuiuti do Paraná UTP Faculdade de Ciências Exatas - FACET Hardware de Computadores Questionário II 1. A principal diferença entre dois processadores, um deles equipado com memória cache o

Leia mais

ALGORÍTMOS PARALELOS LCAD. Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES

ALGORÍTMOS PARALELOS LCAD. Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES ALGORÍTMOS PARALELOS Neyval C. Reis Jr. OUTUBRO/2004 LCAD Laboratório de Computação de Alto Desempenho DI/UFES Programa do Curso LCAD 1. Introdução 2. Arquitetura de Computadores 3. Arquiteturas de Sistemas

Leia mais

COMPUTAÇÃO PARALELA. uma visão geral. Guilherme Galante. v.2.0

COMPUTAÇÃO PARALELA. uma visão geral. Guilherme Galante. v.2.0 COMPUTAÇÃO PARALELA uma visão geral Guilherme Galante v.2.0 Guilherme Galante Bacharel em Informática Unioeste (2003) Mestre em Ciência da Computação UFRGS (2006) Professor Assistente do curso de Informática/Ciência

Leia mais

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy) Capítulo 4 João Lourenço Joao.Lourenco@di.fct.unl.pt Faculdade de Ciências e Tecnologia Universidade Nova de Lisboa 2007-2008 MARIE (Machine Architecture Really Intuitive and Easy) Adaptado dos transparentes

Leia mais

Tipos de Sistemas Distribuídos (Cluster e Grid)

Tipos de Sistemas Distribuídos (Cluster e Grid) Tipos de Sistemas Distribuídos (Cluster e Grid) Sistemas Distribuídos Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência

Leia mais

Single-Chip Cloud Computer

Single-Chip Cloud Computer IME-USP Departamento de Ciência da Computação Single-Chip Cloud Computer Diogo de Jesus Pina 6798294 (diogojpina@gmail.com) Everton Topan da Silva 6514219 (everton.topan.silva@usp.br) Disciplina: Organização

Leia mais

Comparação de algoritmos paralelos em uma rede heterogênea de workstations

Comparação de algoritmos paralelos em uma rede heterogênea de workstations Comparação de algoritmos paralelos em uma rede heterogênea de workstations Marcelo T. Rebonatto, Marcos J. Brusso, Roberto Niche 1, Roni A. Dall Orsoletta 1 Universidade de Passo Fundo Instituto de Ciências

Leia mais

Fesp - Tópicos Avançados II - Switching

Fesp - Tópicos Avançados II - Switching SWITCHING Quando o ethernet foi originalmente desenhado, os computadores eram lentos e as redes eram pequenas. Portanto, uma rede rodando a 10 mbps era mais que suficiente para qualquer aplicação. Atualmente,

Leia mais

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA 1. INTRODUÇÃO O conceito de concorrência é o princípio básico para o projeto e a implementação dos sistemas operacionais multiprogramáveis. O sistemas multiprogramáveis

Leia mais

Avaliação de Desempenho de Sistemas Computacionais

Avaliação de Desempenho de Sistemas Computacionais Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Avaliação de Desempenho de Sistemas Computacionais Aula 3 Marcos José Santana Regina Helena

Leia mais

Sistemas Distribuídos: Conceitos e Projeto Classificação de Sistemas Distribuídos e Middleware

Sistemas Distribuídos: Conceitos e Projeto Classificação de Sistemas Distribuídos e Middleware Sistemas Distribuídos: Conceitos e Projeto Classificação de Sistemas Distribuídos e Middleware Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Aula 16: Entrada e Saída: Estudo de Caso Diego Passos Última Aula Software de Entrada e Saída. Subsistema de E/S. Conjunto de camadas de abstração para realização de

Leia mais

Arquitetura e Organização de Computadores

Arquitetura e Organização de Computadores Arquitetura e Organização de Computadores Entrada/Saída Material adaptado, atualizado e traduzido de: STALLINGS, William. Arquitetura e Organização de Computadores. 5ª edição Problemas Entrada/Saída Grande

Leia mais

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos cpgcarlos@yahoo.com.br www.oficinadapesquisa.com.br ESQUEMA DE UM COMPUTADOR Uma Unidade Central de

Leia mais

Introdução. Definição de um Sistema Distribuído (1) Definição de um Sistema Distribuído(2) Metas de Sistemas Distribuídos (2)

Introdução. Definição de um Sistema Distribuído (1) Definição de um Sistema Distribuído(2) Metas de Sistemas Distribuídos (2) Definição de um Sistema Distribuído (1) Introdução Um sistema distribuído é: Uma coleção de computadores independentes que aparecem para o usuário como um único sistema coerente. Definição de um Sistema

Leia mais

Projetos I Resumo de TCC. Luiz Rogério Batista De Pieri Mat: 0413829 5

Projetos I Resumo de TCC. Luiz Rogério Batista De Pieri Mat: 0413829 5 Projetos I Resumo de TCC Luiz Rogério Batista De Pieri Mat: 0413829 5 MAD RSSF: Uma Infra estrutura de Monitoração Integrando Redes de Sensores Ad Hoc e uma Configuração de Cluster Computacional (Denise

Leia mais

Fundamentos de Arquitetura de Computadores. Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO

Fundamentos de Arquitetura de Computadores. Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO Fundamentos de Arquitetura de Computadores Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO Hardware de um Sistema Computacional Hardware: são os componentes

Leia mais

LCAD. ALGORÍTMOS PARALELOS (Aula 6) Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES.

LCAD. ALGORÍTMOS PARALELOS (Aula 6) Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES. ALGORÍTMOS PARALELOS (Aula 6) Neyval C. Reis Jr. OUTUBRO/2004 LCAD Laboratório de Computação de Alto Desempenho DI/UFES Tópico 20 janeiro 27 janeiro 3 fev 10 fev 17 fev 24 fev 3 março Paradigma de Paralelismo

Leia mais

Sistemas Operacionais Entrada / Saída. Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br)

Sistemas Operacionais Entrada / Saída. Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br) Sistemas Operacionais Entrada / Saída Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br) Tópicos Princípios do hardware de E/S Princípios do software de E/S Camadas do software

Leia mais

Unidade 14: Arquiteturas CISC e RISC Prof. Daniel Caetano

Unidade 14: Arquiteturas CISC e RISC Prof. Daniel Caetano Arquitetura e Organização de Computadores 1 Unidade 14: Arquiteturas CISC e RISC Prof. Daniel Caetano Objetivo: Apresentar os conceitos das arquiteturas CISC e RISC, confrontando seus desempenhos. Bibliografia:

Leia mais

Infraestrutura de Hardware. Entrada/Saída: Comunicação Processador, Memória e E/S

Infraestrutura de Hardware. Entrada/Saída: Comunicação Processador, Memória e E/S Infraestrutura de Hardware Entrada/Saída: Comunicação Processador, Memória e E/S Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é entendido

Leia mais

Arquitetura e Organização de Computadores

Arquitetura e Organização de Computadores Arquitetura e Organização de Computadores Fernando Fonseca Ramos Faculdade de Ciência e Tecnologia de Montes Claros Fundação Educacional Montes Claros 1 Índice 1- Introdução 3- Memórias 4- Dispositivos

Leia mais

Introdução. Nível do Sistema Operacional. Introdução. Um Sistema Operacional... Introdução a Sistemas Operacionais

Introdução. Nível do Sistema Operacional. Introdução. Um Sistema Operacional... Introdução a Sistemas Operacionais Introdução Nível do Sistema Operacional (Aula 14) Introdução a Sistemas Operacionais Hardware Provê os recursos básicos de computação (CPU, memória, E/S,etc.) Programas (aplicações) Definem as maneiras

Leia mais

Projeto de Arquitetura

Projeto de Arquitetura Projeto de Arquitetura Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 11 Slide 1 Objetivos Apresentar projeto de arquitetura e discutir sua importância Explicar as decisões de projeto

Leia mais