MPI é provavelmente onde você deve começar. A Message Passing Interface é muito comum ao tentar criar clusters.
Background: Para alguns amigos em uma instituição acadêmica local, eu escrevi um programa Java que simula o crescimento do cristal em uma matriz microcelular como um programa concorrente que implementa 100.000 iterações de MonteCarlo, cada iteração compreende 14.240 ^ 2 passos. Primeiramente implementado em 2 dimensões, é capaz de suportar até 14.240x14.240 de matriz de tamanho, cada célula é um byte e estruturas de dados associadas para suportar algoritmos para calcular áreas dos grãos, etc.
O programa foi escrito como 4 encadeamentos simultâneos que usam a CPU quad core (100%) com cada encadeamento executando 1/4 do número de etapas, e os encadeamentos "se recombinam" ao final das 14.240 ^ 2/4 tentativas , e iniciar a próxima iteração, onde eu garfo novos tópicos. O acesso à matriz comum, etc., é controlado usando synchronize
keyword e 4 threads são controlados para fechar usando um semáforo.
Além disso, eu construí o hardware para eles - processador Intel Core i5 2500K, com 16GB de RAM, dual particionado no Windows (para uso) e Linux - para o meu teste.
Problema: Esses amigos agora querem que eu tente escrever uma versão tridimensional e estão dispostos a admitir um tamanho de 10.000x10.000x10.000 de matriz.
Minha ideia: claramente, uma única máquina não conseguirá lidar com isso. É possível usar um cluster de duas ou três dessas máquinas? Em caso afirmativo, alguém pode me guiar para um código-fonte aberto, livre, metaware ou uma implementação Java que possa executar JVM (s) nesses nós e, em seguida, executar este programa?
Em uma única máquina, sou capaz de retocar apenas uma matriz de 400 x 400 x 400. Estou disposto a reescrever o código para que cada quadrante da matriz seja processado em diferentes clusters, com cada teste de quadrante, mas preciso saber como executar o programa simultaneamente em diferentes máquinas e como sincronizo os cálculos.
Continuo grato por qualquer sugestão ou ideia.
MPI é provavelmente onde você deve começar. A Message Passing Interface é muito comum ao tentar criar clusters.