Pergunta

Eu tenho trabalhado com alguns amigos para converter um Matlab Algoritmo Genético para C++ e trabalha em uma ordem seqüencial atualmente.O Matlab não é mais uma parte do nosso código atual.

Nós estamos olhando para usá-lo em um cluster, mas tem sido um pouco seco recursos.Temos um cluster disponíveis na Universidade e é equipado com Pedras e OpenMPI, mas eu não estou realmente certo de onde começar a trabalhar com ele.

Atualmente, temos 2D e 3D Matrizes de configuração com os dados e quando o sistema está fazendo crossover ou a troca entre os modelos que ela apenas tenta trocar peças de 2D e 3D matriz.Quais são algumas boas maneiras de separar essas estruturas em vários nós?

Foi útil?

Solução

Se você está fazendo cálculos de matriz, se existe uma boa maneira de particionar os cálculos dependem altamente dependentes do próprio cálculo.

Eu recomendo a carteira de empréstimos Golub e Van, "Matrix Computations, 3ª ed". Nele, há um capítulo inteiro dedicado a cálculos paralelos (cap. 6).

OpenMPI é um middleware fino a ser usado para esse problema. Como você está fazendo isso no C ++, também pode dar uma olhada no Zeromq. Os dois têm semântica diferente, e um pode favorecer seu espaço de problema ou seu conjunto de habilidades mais do que o outro.

Além disso, você deve saber que os cálculos da matriz paralela (normalmente processamento de sinal, mas existem muitas outras aplicações) é uma área de pesquisa muito, muito ativa.

Outras dicas

Adequação De Cálculo:

Normalmente, você só precisa saber sobre uma pessoa a calcular a sua adequação, de modo que você pode apenas trabalhar pela população por usarem indivíduos para cada núcleo.Quando a aptidão de um indivíduo foi calculado, de mão de que o núcleo de um novo indivíduo.

Crossover:

Uma dividir e conquistar abordagem pode ser bem adequada para esse problema.Quebrar as matrizes em blocos que são processadas por cada núcleo da CPU, então talvez adicionar um crossover global passo (acasalamento de um subconjunto de pares) para garantir que você tenha a capacidade de se mover através do espaço multidimensional de forma adequada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top