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

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

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

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

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho 20 Capítulo 3 Avaliação de Desempenho Este capítulo aborda como medir, informar e documentar aspectos relativos ao desempenho de um computador. Além disso, descreve os principais fatores que influenciam

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

Unidade 13: Paralelismo:

Unidade 13: Paralelismo: Arquitetura e Organização de Computadores 1 Unidade 13: Paralelismo: SMP e Processamento Vetorial Prof. Daniel Caetano Objetivo: Apresentar os conceitos fundamentais da arquitetura SMP e alguns detalhes

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

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

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

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

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

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

} 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

INTRODUÇÃO BARRAMENTO PCI EXPRESS.

INTRODUÇÃO BARRAMENTO PCI EXPRESS. INTRODUÇÃO BARRAMENTO EXPRESS. O processador se comunica com os outros periféricos do micro através de um caminho de dados chamado barramento. Desde o lançamento do primeiro PC em 1981 até os dias de hoje,

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

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

Arquitetura de Rede de Computadores

Arquitetura de Rede de Computadores TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador

Leia mais

Comparativo de desempenho do Pervasive PSQL v11

Comparativo de desempenho do Pervasive PSQL v11 Comparativo de desempenho do Pervasive PSQL v11 Um artigo Pervasive PSQL Setembro de 2010 Conteúdo Resumo executivo... 3 O impacto das novas arquiteturas de hardware nos aplicativos... 3 O projeto do Pervasive

Leia mais

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia O Sistema Operacional que você usa é multitasking? Por multitasking, entende-se a capacidade do SO de ter mais de um processos em execução ao mesmo tempo. É claro que, num dado instante, o número de processos

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

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

Memórias Prof. Galvez Gonçalves

Memórias Prof. Galvez Gonçalves Arquitetura e Organização de Computadores 1 s Prof. Galvez Gonçalves Objetivo: Compreender os tipos de memória e como elas são acionadas nos sistemas computacionais modernos. INTRODUÇÃO Nas aulas anteriores

Leia mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.

Leia mais

Sistemas Computacionais II Professor Frederico Sauer

Sistemas Computacionais II Professor Frederico Sauer Sistemas Computacionais II Professor Frederico Sauer Livro-texto: Introdução à Organização de Computadores 4ª edição Mário A. Monteiro Livros Técnicos e Científicos Editora. Atenção: Este material não

Leia mais

ICORLI. INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET

ICORLI. INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET 2010/2011 1 Protocolo TCP/IP É um padrão de comunicação entre diferentes computadores e diferentes sistemas operativos. Cada computador deve

Leia mais

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB Calculando a capacidade de disco: Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x (# pratos/disco) Exemplo 01: 512 bytes/setor 300 setores/trilha

Leia mais

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA 8 CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA A porta paralela, também conhecida por printer port ou Centronics e a porta serial (RS-232) são interfaces bastante comuns que, apesar de estarem praticamente

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

3. Arquitetura Básica do Computador

3. Arquitetura Básica do Computador 3. Arquitetura Básica do Computador 3.1. Modelo de Von Neumann Dar-me-eis um grão de trigo pela primeira casa do tabuleiro; dois pela segunda, quatro pela terceira, oito pela quarta, e assim dobrando sucessivamente,

Leia mais

Diminui o gargalo existente entre processador e memória principal; 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP;

Diminui o gargalo existente entre processador e memória principal; 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP; Diminui o gargalo existente entre processador e memória principal; Diferença de velocidade 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP; Tecnologia semelhante à da CPU e,

Leia mais

Introdução ao Modelos de Duas Camadas Cliente Servidor

Introdução ao Modelos de Duas Camadas Cliente Servidor Introdução ao Modelos de Duas Camadas Cliente Servidor Desenvolvimento de Sistemas Cliente Servidor Prof. Esp. MBA Heuber G. F. Lima Aula 1 Ciclo de Vida Clássico Aonde estamos? Page 2 Análise O que fizemos

Leia mais

Tecnologia PCI express. Introdução. Tecnologia PCI Express

Tecnologia PCI express. Introdução. Tecnologia PCI Express Tecnologia PCI express Introdução O desenvolvimento de computadores cada vez mais rápidos e eficientes é uma necessidade constante. No que se refere ao segmento de computadores pessoais, essa necessidade

Leia mais

BARRAMENTO DO SISTEMA

BARRAMENTO DO SISTEMA BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade

Leia mais

MÓDULO 8 ARQUITETURA DOS SISTEMAS DE BANCO DE DADOS

MÓDULO 8 ARQUITETURA DOS SISTEMAS DE BANCO DE DADOS MÓDULO 8 ARQUITETURA DOS SISTEMAS DE BANCO DE DADOS Quando falamos em arquitetura, normalmente utilizamos esse termo para referenciar a forma como os aplicativos computacionais são estruturados e os hardwares

Leia mais

Estruturas do Sistema de Computação

Estruturas do Sistema de Computação Estruturas do Sistema de Computação Prof. Dr. José Luís Zem Prof. Dr. Renato Kraide Soffner Prof. Ms. Rossano Pablo Pinto Faculdade de Tecnologia de Americana Centro Paula Souza Estruturas do Sistema de

Leia mais

SISTEMAS DISTRIBUÍDOS

SISTEMAS DISTRIBUÍDOS SISTEMAS DISTRIBUÍDOS Cluster, Grid e computação em nuvem Slide 8 Nielsen C. Damasceno Introdução Inicialmente, os ambientes distribuídos eram formados através de um cluster. Com o avanço das tecnologias

Leia mais

Processos e Threads (partes I e II)

Processos e Threads (partes I e II) Processos e Threads (partes I e II) 1) O que é um processo? É qualquer aplicação executada no processador. Exe: Bloco de notas, ler um dado de um disco, mostrar um texto na tela. Um processo é um programa

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

Ao longo do presente capítulo será apresentada uma descrição introdutória da tecnologia FPGA e dos módulos básicos que a constitui.

Ao longo do presente capítulo será apresentada uma descrição introdutória da tecnologia FPGA e dos módulos básicos que a constitui. 3 Tecnologia FPGA Ao longo do presente capítulo será apresentada uma descrição introdutória da tecnologia FPGA e dos módulos básicos que a constitui. 3.1. FPGA: Histórico, linguagens e blocos Muitos dos

Leia mais

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 10

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 10 ORGANIZAÇÃO DE COMPUTADORES MÓDULO 10 Índice 1. A Organização do Computador - Continuação...3 1.1. Memória Primária - II... 3 1.1.1. Memória cache... 3 1.2. Memória Secundária... 3 1.2.1. Hierarquias de

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Introdução Um sistema operacional é um programa que atua como intermediário entre o usuário e o hardware de um computador. O propósito

Leia mais

Há dois tipos de configurações bidirecionais usados na comunicação em uma rede Ethernet:

Há dois tipos de configurações bidirecionais usados na comunicação em uma rede Ethernet: Comunicação em uma rede Ethernet A comunicação em uma rede local comutada ocorre de três formas: unicast, broadcast e multicast: -Unicast: Comunicação na qual um quadro é enviado de um host e endereçado

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação

Leia mais

1 http://www.google.com

1 http://www.google.com 1 Introdução A computação em grade se caracteriza pelo uso de recursos computacionais distribuídos em várias redes. Os diversos nós contribuem com capacidade de processamento, armazenamento de dados ou

Leia mais

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

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

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064 Sistemas Distribuídos Professora: Ana Paula Couto DCC 064 Processos- Clientes, Servidores, Migração Capítulo 3 Agenda Clientes Interfaces de usuário em rede Sistema X Window Software do lado cliente para

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

Contil Informática. Curso Técnico em Informática Processadores Core

Contil Informática. Curso Técnico em Informática Processadores Core Contil Informática Curso Técnico em Informática Processadores Core Quais as diferenças entre os processadores Intel Core i3, i5 e i7? A tecnologia avançada na área de hardware possibilita um avanço desenfreado

Leia mais

Prof.: Roberto Franciscatto. Capítulo 1.2 Aspectos Gerais

Prof.: Roberto Franciscatto. Capítulo 1.2 Aspectos Gerais Sistemas Operacionais Prof.: Roberto Franciscatto Capítulo 1.2 Aspectos Gerais Estrutura do Sistema Operacional Principais Funções do Sistema Operacional Tratamento de interrupções e exceções Criação e

Leia mais

7.Conclusão e Trabalhos Futuros

7.Conclusão e Trabalhos Futuros 7.Conclusão e Trabalhos Futuros 158 7.Conclusão e Trabalhos Futuros 7.1 Conclusões Finais Neste trabalho, foram apresentados novos métodos para aceleração, otimização e gerenciamento do processo de renderização

Leia mais

ARQUITETURA DE COMPUTADORES - 1866

ARQUITETURA DE COMPUTADORES - 1866 7 Unidade Central de Processamento (UCP): O processador é o componente vital do sistema de computação, responsável pela realização das operações de processamento e de controle, durante a execução de um

Leia mais

SISTEMAS OPERACIONAIS. Apostila 01 Assunto: Tipos de Sistemas Operacionais UNIBAN

SISTEMAS OPERACIONAIS. Apostila 01 Assunto: Tipos de Sistemas Operacionais UNIBAN SISTEMAS OPERACIONAIS Apostila 01 Assunto: Tipos de Sistemas Operacionais UNIBAN 2.0 - INTRODUÇÃO Os tipos de sistemas operacionais e sua evolução estão intimamente relacionados com a evolução do hardware

Leia mais

Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul

Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul QUESTÃO: 29 Além da alternativa a estar correta a alternativa e também pode ser compreendida como correta. Segundo a definição de diversos autores, a gerência de falhas, detecta, isola, notifica e corrige

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

PARANÁ GOVERNO DO ESTADO

PARANÁ GOVERNO DO ESTADO A COMUNICAÇÃO NA INTERNET PROTOCOLO TCP/IP Para tentar facilitar o entendimento de como se dá a comunicação na Internet, vamos começar contando uma história para fazer uma analogia. Era uma vez, um estrangeiro

Leia mais

IW10. Rev.: 02. Especificações Técnicas

IW10. Rev.: 02. Especificações Técnicas IW10 Rev.: 02 Especificações Técnicas Sumário 1. INTRODUÇÃO... 1 2. COMPOSIÇÃO DO IW10... 2 2.1 Placa Principal... 2 2.2 Módulos de Sensores... 5 3. APLICAÇÕES... 6 3.1 Monitoramento Local... 7 3.2 Monitoramento

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 Conceito de Computador Um computador digital é

Leia mais

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. 7.3.1.2 Registradores: São pequenas unidades de memória, implementadas na CPU, com as seguintes características:

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

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

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.

Leia mais

Aula 26: Arquiteturas RISC vs. CISC

Aula 26: Arquiteturas RISC vs. CISC Aula 26: Arquiteturas RISC vs CISC Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Arquiteturas RISC vs CISC FAC 1 / 33 Revisão Diego Passos

Leia mais

Disciplina: Introdução à Informática Profª Érica Barcelos

Disciplina: Introdução à Informática Profª Érica Barcelos Disciplina: Introdução à Informática Profª Érica Barcelos CAPÍTULO 4 1. ARQUITETURA DO COMPUTADOR- HARDWARE Todos os componentes físicos constituídos de circuitos eletrônicos interligados são chamados

Leia mais

Tipos de sistemas operacionais

Tipos de sistemas operacionais Tipos de sistemas operacionais Sistemas Operacionais de Computadores de Grande Porte Sistemas Operacionais para Servidores Sistemas Operacionais de Multiprocessadores Sistemas Operacionais para Computadores

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Modelo Cliente-Servidor: Introdução aos tipos de servidores e clientes Prof. MSc. Hugo Souza Iniciando o módulo 03 da primeira unidade, iremos abordar sobre o Modelo Cliente-Servidor

Leia mais

CISC RISC Introdução A CISC (em inglês: Complex Instruction Set Computing, Computador com um Conjunto Complexo de Instruções), usada em processadores Intel e AMD; suporta mais instruções no entanto, com

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

Sistema de Computação

Sistema de Computação Sistema de Computação Máquinas multinível Nível 0 verdadeiro hardware da máquina, executando os programas em linguagem de máquina de nível 1 (portas lógicas); Nível 1 Composto por registrados e pela ALU

Leia mais

Sistemas Operacionais

Sistemas Operacionais UNIVERSIDADE BANDEIRANTE DE SÃO PAULO INSTITUTO POLITÉCNICO CURSO DE SISTEMAS DE INFORMAÇÃO Sistemas Operacionais Notas de Aulas: Tópico 33 e 34 Virtualização São Paulo 2009 Virtualização Ao falar em virtualização,

Leia mais

Escalonamento no Linux e no Windows NT/2000/XP

Escalonamento no Linux e no Windows NT/2000/XP Escalonamento no Linux e no Windows NT/2000/XP 1 Escalonamento no Linux Os requisitos do escalonador do Linux eram: Apresentar boa performance em programas interativos, mesmo com carga elevada; Distribuir

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

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos MÓDULO 7 Modelo OSI A maioria das redes são organizadas como pilhas ou níveis de camadas, umas sobre as outras, sendo feito com o intuito de reduzir a complexidade do projeto da rede. O objetivo de cada

Leia mais

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO 10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO UMA DAS GRANDES FUNÇÕES DA TECNOLOGIA É A DE FACILITAR A VIDA DO HOMEM, SEJA NA VIDA PESSOAL OU CORPORATIVA. ATRAVÉS DELA, ELE CONSEGUE

Leia mais

Arquitetura de processadores: RISC e CISC

Arquitetura de processadores: RISC e CISC Arquitetura de processadores: RISC e CISC A arquitetura de processador descreve o processador que foi usado em um computador. Grande parte dos computadores vêm com identificação e literatura descrevendo

Leia mais

Bancos de dados distribuídos Prof. Tiago Eugenio de Melo tiagodemelo@gmail.com. http://www.tiagodemelo.info

Bancos de dados distribuídos Prof. Tiago Eugenio de Melo tiagodemelo@gmail.com. http://www.tiagodemelo.info Bancos de dados distribuídos Prof. Tiago Eugenio de Melo tiagodemelo@gmail.com Última atualização: 20.03.2013 Conceitos Banco de dados distribuídos pode ser entendido como uma coleção de múltiplos bds

Leia mais

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira IFPE Disciplina: Sistemas Operacionais Prof. Anderson Luiz Moreira SERVIÇOS OFERECIDOS PELOS SOS 1 Introdução O SO é formado por um conjunto de rotinas (procedimentos) que oferecem serviços aos usuários

Leia mais

Hardware de Computadores

Hardware de Computadores Placa Mãe Hardware de Computadores Introdução Placa-mãe, também denominada mainboard ou motherboard, é uma placa de circuito impresso eletrônico. É considerado o elemento mais importante de um computador,

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

Módulo 4. Construindo uma solução OLAP

Módulo 4. Construindo uma solução OLAP Módulo 4. Construindo uma solução OLAP Objetivos Diferenciar as diversas formas de armazenamento Compreender o que é e como definir a porcentagem de agregação Conhecer a possibilidade da utilização de

Leia mais

UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA INE BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO.

UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA INE BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO. UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA INE BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO Xen Hypervisor Glauco Neves 07132022 Guilherme Pacheco 07232063 INE 5412-0432

Leia mais

Prof. Esp. Lucas Cruz

Prof. Esp. Lucas Cruz Prof. Esp. Lucas Cruz O hardware é qualquer tipo de equipamento eletrônico utilizado para processar dados e informações e tem como função principal receber dados de entrada, processar dados de um usuário

Leia mais

Informática I. Aula 5. http://www.ic.uff.br/~bianca/informatica1/ Aula 5-13/05/2006 1

Informática I. Aula 5. http://www.ic.uff.br/~bianca/informatica1/ Aula 5-13/05/2006 1 Informática I Aula 5 http://www.ic.uff.br/~bianca/informatica1/ Aula 5-13/05/2006 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação

Leia mais

Introdução aos Computadores

Introdução aos Computadores Os Computadores revolucionaram as formas de processamento de Informação pela sua capacidade de tratar grandes quantidades de dados em curto espaço de tempo. Nos anos 60-80 os computadores eram máquinas

Leia mais

5 Entrada e Saída de Dados:

5 Entrada e Saída de Dados: 5 Entrada e Saída de Dados: 5.1 - Arquitetura de Entrada e Saída: O sistema de entrada e saída de dados é o responsável pela ligação do sistema computacional com o mundo externo. Através de dispositivos

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

Multiplexador. Permitem que vários equipamentos compartilhem um único canal de comunicação

Multiplexador. Permitem que vários equipamentos compartilhem um único canal de comunicação Multiplexadores Permitem que vários equipamentos compartilhem um único canal de comunicação Transmissor 1 Receptor 1 Transmissor 2 Multiplexador Multiplexador Receptor 2 Transmissor 3 Receptor 3 Economia

Leia mais

Itinerários de Ônibus Relatório Final

Itinerários de Ônibus Relatório Final CENTRO UNIVERSITÁRIO SENAC Itinerários de Ônibus Relatório Final Grupo 5 Caio Roque Daniel Nunes Elise Roese José Caneiro Marcos Grignani São Paulo Junho de 2007 1 ÍNDICE 1. Introdução... 3 2. Desenvolvimento...

Leia mais

Admistração de Redes de Computadores (ARC)

Admistração de Redes de Computadores (ARC) Admistração de Redes de Computadores (ARC) Instituto Federal de Educação, Ciência e Tecnologia de Santa Catarina - Campus São José Prof. Glauco Cardozo glauco.cardozo@ifsc.edu.br RAID é a sigla para Redundant

Leia mais

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01 Unidade Central de Processamento (CPU) Processador Renan Manola Introdução ao Computador 2010/01 Componentes de um Computador (1) Computador Eletrônico Digital É um sistema composto por: Memória Principal

Leia mais

Curso: Redes II (Heterogênea e Convergente) Tema da Aula: Características Roteamento

Curso: Redes II (Heterogênea e Convergente) Tema da Aula: Características Roteamento Curso: Redes II (Heterogênea e Convergente) Tema da Aula: Características Roteamento Professor Rene - UNIP 1 Roteamento Dinâmico Perspectiva e histórico Os protocolos de roteamento dinâmico são usados

Leia mais

Prof.: Roberto Franciscatto. Capítulo 1.1 Introdução

Prof.: Roberto Franciscatto. Capítulo 1.1 Introdução Sistemas Operacionais Prof.: Roberto Franciscatto Capítulo 1.1 Introdução Tipos de Sistemas Operacionais Sistemas Monoprogramáveis / Monotarefa Voltados tipicamente para a execução de um único programa.

Leia mais

4 Arquitetura básica de um analisador de elementos de redes

4 Arquitetura básica de um analisador de elementos de redes 4 Arquitetura básica de um analisador de elementos de redes Neste capítulo é apresentado o desenvolvimento de um dispositivo analisador de redes e de elementos de redes, utilizando tecnologia FPGA. Conforme

Leia mais

Evolução na Comunicação de

Evolução na Comunicação de Evolução na Comunicação de Dados Invenção do telégrafo em 1838 Código Morse. 1º Telégrafo Código Morse Evolução na Comunicação de Dados A evolução da comunicação através de sinais elétricos deu origem

Leia mais

Roteamento e Comutação

Roteamento e Comutação Roteamento e Comutação Design de Rede Local Design Hierárquico Este design envolve a divisão da rede em camadas discretas. Cada camada fornece funções específicas que definem sua função dentro da rede

Leia mais

Cálculo Aproximado do número PI utilizando Programação Paralela

Cálculo Aproximado do número PI utilizando Programação Paralela Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Cálculo Aproximado do número PI utilizando Programação Paralela Grupo 17 Raphael Ferras Renan Pagaiane Yule Vaz SSC-0143 Programação

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Professor: João Fábio de Oliveira jfabio@amprnet.org.br (41) 9911-3030 Objetivo: Apresentar o que são os Sistemas Operacionais, seu funcionamento, o que eles fazem,

Leia mais

Fundamentos de Hardware

Fundamentos de Hardware Fundamentos de Hardware Curso Técnico em Informática SUMÁRIO PLACAS DE EXPANSÃO... 3 PLACAS DE VÍDEO... 3 Conectores de Vídeo... 4 PLACAS DE SOM... 6 Canais de Áudio... 7 Resolução das Placas de Som...

Leia mais

Engenharia de Software III

Engenharia de Software III Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf (flavio.ceci@unisul.br) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,

Leia mais

Manual do Usuário Android Neocontrol

Manual do Usuário Android Neocontrol Manual do Usuário Android Neocontrol Sumário 1.Licença e Direitos Autorais...3 2.Sobre o produto...4 3. Instalando, Atualizando e executando o Android Neocontrol em seu aparelho...5 3.1. Instalando o aplicativo...5

Leia mais