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.

  • Share/Bookmark

19 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

    • Olá Jaqueline,
      Esta é uma pergunta que não tem uma resposta exata, embora saibamos que a maioria dos computadores pessoais utilizam o Microsoft Windows. No caso de servidores, já se inverte, a maioria destes utilizam sistemas Unix (Linux, Solaris…).

  • Domingos Lopes disse:

    Olá Claudinei, gostei deste artigo é que estou muito interressado em aprender programação paralela, vou acompanhar os artigos que postarem a respeito desse assunto. E qualquer informação a respeito deste assunto será muito bem vinda.
    Valeu!!!

    Domingos L. S. Júnior.

  • igorosterno disse:

    Fiz o que o tutorial mandou, instalei os pacotes necessário (pelo menos eu acho), coloquei o arquivo NumProcesso.c na pasta pessoal e utilizei o comando para criar o arquivo bin mas sempre aparece “cc: NumProcesso.c : Arquivo ou diretório inexistente” .. o que eu devo fazer?? Você tem algum e-mail onde eu possa tira dúvidas sobre o assunto? Grato desde já pela atenção … []’s

  • Claudinei disse:

    Olá Igor

    Acabei de olhar o arquivo que você estava testando, e já descobri o problema. Para resolver isso basta você refazer as aspas(“”), pois o fato de você copiar e colar diretamente, as aspas ficam fora da formatação necessária para o compilador.

    Qualquer problema poste novamente aqui, que tentaremos resolver o problema.

    Até mais.

    Claudinei Caetano de Souza

  • Lucas disse:

    Olá Claudinei.

    Procurando por exemplos de softwares paralelos para windows e também linux encontrei seu artigo. Achei muito interessante e muito bem escrito o que aliás me sanou várias dúvidas. Mas, será que você conhece nomes de softwares que exploram o paralelismo para que eu possa completar um trabalho da faculdade?
    Se você souber será de grande ajuda.

    Obrigado

  • Lucas disse:

    Em tempo:

    A questão que o professor passou é a seguinte:

    Cite um exemplo de programa paralelo para plataforma windows e Linux.

    Abraços

    • claudinei disse:

      Olá Lucas

      A princípio qualquer programa que executar duas tarefas ou mais simultaneamente, pode ser considerado um programa paralelo. Bons exemplos de aplicativos que usam esse “paradigma” são os jogos, eles exploram o uso das threads, multithreads e por aí vai (…)! Um exemplo de jogo que usa sistema de multithread é “Colin McRae Rally 4” um simulador de competições para windows. Nesse jogo (Colin McRae Rally 4) em determinado momento você tem dois efeito visuais, um de chuva e outro de neve e eles são simulados em duas threads, o que torna o efeito mais realístico se você estiver usando um computador com dois ou mais núcleos! Outro exemplo bastante popular é o “google chrome”, diferentemente de outros navegadores de internet, cada aba desse navegador é um processo que pode rodar em diferentes processadores do computador simultaneamente.

      Até o próximo!

      Claudinei Caetano de Souza

  • Lucas disse:

    Valeu! Muitissimo obrigado! Já tinha revirado essa internet e não encontrei nenhum exemplo concreto. Mas, a proposito, você conhece algum software de programação paralela feito para rodar em Linux?

    Abraços

  • Hugo disse:

    Eu posso ter um programa rodando em máquinas que usam linux e windows em paralelo ?
    Se a resposta for positivo como seria ?
    Abraços.

RSS feed for comments on this post. TrackBack URL


Leave a Reply

Template: TheBuckmaker.com Website Templates | Kostenloses Konto, PHP Scriptarchive

No TecnoSapiens você encontra artigos sobre:

adeona apple Backup bloomberg brasileiro broffice cabos submarinos calendário computador CUDA eficiência expandir gmail google google chrome guerra dos browsers hacker História home-office instalar laptop Latex Linux localização mecanismos de busca microsoft mpi navegadores obituario openmpi openoffice orkut pdf produtividade programação paralela rastrear redes sociais Semicondutores simulação computacional Software livre steve jobs tecnologia transistor Ubuntu windows