+ Responder ao Tópico



  1. #1
    rtoliveira
    Visitante

    Padrão Programação no openMosix

    Olá pessoal!

    Tenho acesso a um cluster openMosix e desejo paralelizar uma implementação de um problema de otimização combinatória. Neste sentido, consegui alguns e-books de programação paralela usando a biblioteca MPI, mas, ao que me parece, uma tentativa de utilizar bibliotecas nativas do openMosix parece ser mais interessante, pois apenas desejo que diferentes nós da rede executem, cada um, uma instância do problema a fim de que retornem ao nó principal a melhor solução encontrada. Alguém poderia me indicar referências sobre como programar em ambientes openMosix? Existe algum ambiente em que eu possa testar o codigo paralelizado antes de rodar no cluster?

    Desde já, agradeço.

    Rommel Oliveira
    Última edição por rtoliveira; 21-01-2007 às 20:03.

  2. #2

    Padrão

    Cara, o openMosix não tem uma api para paralelização. O que você vai precisar é escrever o programa em forma de que ele use processos diferentes, pois o openMosix também não "divide" processos, o seu programa vai ver o cluster como se fosse uma grande máquina multiprocessada, só que cada um com uma memória reservada (a memória NÃO vai ser compartilhada) e com a inter comunicação entre os processos a uma velocidade menor (a conexão de rede é muito mais lenta do que a comunicação interna entre processadores).

    Você pode usar também as bibliotecas de MPI que vão facilitar a paralelização de algumas tarefas, e considere também o fato de que a maioria dos clusteres de alta performance utiliza MPI.

    No caso de seu programa que vai, aparentemente, trabalhar com uma entrada de dados iguais (sistemas em estado iniciais identicos) seguindo evoluções diversas ao longo do tempo, é a tipica tarefa onde o uso serializado é mais interessante, já que as tarefas podem rodar asincronamente. Recomendo que caso você queira que o programa já retorne no final uma resposta (sem a necessidade de algum outro programa fazendo essa análize posteriormente) faça com que os seus processos se comuniquem por meio de tcp/ip e crie as instâncias por meio da chamada do sistema fork() (caso esteja fazendo em c, se for em fortran pode ser interessante usar bibliotecas optimizadas ou mesmo o MPI para paralelizar o código), mantendo o programa "pai" recebendo e analizando os resultados dos processos "filhos".

    E outro detalhe: como a memória do cluster não é compartilhada, tome cuidado com o tamanho da sua simulação, pois dependendo do taanho do sistema simulado você pode estourar o limite de memória, e como em algumas chamadas do sistema o processos "retorna" ao nó pai, se um número grande de processos retornar ao nó de origem ao mesmo tempo você pode ter problemas com memória do nó de origem excedida (fazendo o kernel matar algum processo) ou com sobrecarga na rede.

    Boa sorte!