nov
14
2008

Implementando Programas que Usam Vários Processadores

No Gravatar

Nos últimos anos houve um grande avanço na tecnologia de fabricação de dispositivos semicondutores, isso possibilitou a redução no tamanho físico e na melhoria da performance dos computadores. Atualmente essa diminuição não está ocorrendo na mesma taxa dos últimos dez anos, e, conseqüentemente, a performance computacional estaria chegando a um ponto de estagnação, pois como é sabido o desempenho dos processadores crescem com o aumento da densidade de transistores, ou seja, ele aumenta com a redução no tamanho dos dispositivos. Uma possibilidade para continuar o aumento na performance dos microcomputadores foi o inicio da implementação de computadores com vários núcleos, os chamados “multicore”. Hoje se encontra à disposição dos consumidores microcomputadores de vários processadores a um preço acessível.

Diante desse panorama é natural que tenhamos interesse em máquinas que tenham o máximo de “core” possível, porém existe um “gargalo” nessa questão, porque a maioria dos aplicativos são feitos para rodarem em apenas um processo, ou seja, os aplicativos usam apenas um processador enquanto os outros processadores ficam ociosos, ou rodam processos de outros aplicativos. Essa questão é muito mais evidente quando o programa que está sendo executado foi implementado pelo próprio usuário. É nesse instante que se vê a necessidade de construir programas que “rodem” em vários processadores, mas isso implica uma série de questões complicadas que serão abordadas a seguir.

Aquele leitor que desenvolve software para rodar em “cluster de pc’s” ou qualquer outro sistema paralelo, conhece bem as dificuldades que existem em programar um aplicativo que use vários processadores ou vários computadores. Um dos principais problemas é quando pretendemos rodar um programa em várias máquinas e estas máquinas por sua vez tem arquiteturas diferentes, e aí o que fazer? Outro problema é quanto ao número de máquinas que se pretende usar para executar um desses programas. Se mudarmos a quantidade de processadores, seria necessário reescrever todo o programa? Para resolver essas questões foi criado uma biblioteca (MPI-Message Passing Interface) que faz todo esse trabalho para o programador, assim ele não precisa ter esse tipo de preocupação. Mas isso não é assim “tão de graça”, pois para usar essa biblioteca é necessário que o programador escreva seu código de acordo com o padrão MPI.

O MPI é um padrão de biblioteca de passagem de mensagem para sistemas paralelos, ou seja, quando temos um aplicativo rodando em vários processos, em algum instante eles precisam se comunicar entre si e quem faz essa interface de comunicação é exatamente essa biblioteca (MPI).  Esse padrão foi desenvolvido procurando fornecer uma base comum de desenvolvimento de programas paralelos em plataformas distintas. Assim, usando essa biblioteca você consegue escrever um programa que rode em várias máquinas e essas não precisam ter necessariamente a mesma arquitetura. De acordo com a intenção do comitê de padronização (MPI -Forum), o padrão especifica apenas uma interface de programação e sua concretização em algumas linguagens de programação, C, C++, Fortran 77 e Fortran 90. Detalhes de implementação são deixados totalmente por conta do implementador, de forma a flexibilizar o sistema e possibilitar implementações eficientes.

Essa biblioteca padrão pode ser encontrada gratuitamente para Windows, Unix e Linux. Para Windows e Unix existe o MPICH que não darei muitos detalhes aqui, porém para o linux existe um projeto chamado OPEN MPI que será o nosso foco aqui. Nos próximos artigos mostrarei em detalhes como instalar e escrever um programa que rode em vários processos. Desde já adianto, para escrever e testar um programa implementado com MPI, não é necessário que você tenha um computador com vários processadores, a diferença é que irá rodar um processo de cada vez.


8 Comentários »

  • [...] por Simone Souza (simonefis?gmail·com) - referência [...]

  • Neurivam disse:

    E para Java???

  • Claudinei disse:

    Olá Neurivam

    Para o Java também existe um projeto MPI. Para maiores detalhes entre no site do próprio projeto: http://aspen.ucs.indiana.edu/pss/HPJava/mpiJava.html

  • Rodrigo disse:

    Não é nem um pouco eficiente utilizar MPI para computadores multicore. Ele é mais apropriado para clusters com vários computadores interligados.
    Qual seria então o escopo do artigo? Programação paralela para 1 computador multicore ou um cluster de computadores?

    É que você comentou sobre os dois modelos em vários locais do post e eu não entendi direito o objetivo.

  • Claudinei disse:

    Caro Rodrigo

    O escopo do artigo é programação que use vários processos, independente se é um cluster ou um computador multicore.

    Uma aplicação em MPI rodando em computadores multicore seria ineficiente se não levássemos em conta alguns fatores importantes em uma boa implementação. Pois se tivermos uma grande tarefa que possa ser divida de tal forma que as partes resultante da divisão não use muita memória, uma implementação em um muticore seria muito eficiente.

    Devemos lembrar que a programação MPI trabalha basicamente com passagem de mensagem entre os processos e, por motivos óbvios, sabemos que a velocidade na troca de mensagens é muito maior entre os núcleos de um multicore do que em um cluster, então agora imagine quando tivermos um computador multicore com 8 ou mais processadores, isso não séria mais eficiente do que um cluster com o mesmo número de máquinas?

    obs. Não se esqueça que isso seria verdade para uma aplicação que não fizesse muito uso de memória pois um multicore com 4 processadores não substitui um cluster com 4 máquinas quando estamos tratando de memória.

    Obrigado pelo questionamento!

    Até o próximo!

  • Thadeu Penna disse:

    Vejam http://www.linux-mag.com/id/4608 (precisa se registrar)
    “MPI on Multicore, an OpenMP Alternative ?”

    Em vários casos MPI é mais rápido que o OpenMP em multicores, sem contar a portatibilidade: pode rodar em multicores quanto em clusters.

  • Olá amigo! Muito interessante seu artigo, estarei acompanhando as postagens que seguirão.

    Faço pesquisa no Cluster em minha universidade, programo utilizando a MPICH, e estou interessado em ver as vantagens que o OpenMPI tem a oferecer.

    Parabéns pela iniciativa, venho tentando arrumar um tempo pra falar disso em meu blog a tempos, mas as provas da universidade nunca permitem =/
    Boa sorte!

  • jaqueline disse:

    qual a quantidade de computadores que usam o linux

RSS feed for comments on this post. TrackBack URL


Leave a Reply

Powered by WordPress. Theme: TheBuckmaker. Privatkredit, OpenID