Question

Je travaille avec quelques amis pour convertir un algorithme génétique Matlab en C ++ et fonctionne dans un ordre séquentiel actuellement. Matlab n'est plus une partie de notre code actuel.

Nous cherchons à utiliser sur un cluster, mais ont été un peu sec sur les ressources. Nous avons un groupe disponible à l'université et il est équipé de rochers et OpenMPI, mais je ne suis pas vraiment sûr où commencer à travailler avec elle.

Nous avons actuellement la configuration des tableaux 2D et 3D avec les données qu'ils contiennent et lorsque le système fait croisement ou l'échange entre les modèles, il essaie simplement parties du swapping tableau 2D et 3D. Quelles sont les bonnes façons de séparer ces structures sur plusieurs nœuds?

Était-ce utile?

La solution

Si vous faites des calculs de la matrice, alors s'il y a même une bonne façon de répartir les calculs dépend fortement du calcul lui-même.

Je recommande vivement le livre Golub et Van Loan, "Matrix Computations, 3e éd.". Dans ce document il y a un chapitre entier consacré aux calculs parallèles (Ch. 6).

OpenMPI est un beau middleware à utiliser pour ce problème. Depuis que vous faites cela en C ++, vous pouvez aussi jeter un oeil à zeromq. Les deux ont une sémantique différente, et on pourrait favoriser votre espace de problème ou votre plus Skillset l'autre.

En outre, vous devez savoir que les calculs de matrice parallèles (généralement le signal de traitement, mais il y a beaucoup d'autres applications) est une zone très, très actif de la recherche.

Autres conseils

Calcul de remise en forme:

En général, vous avez juste besoin de savoir sur une personne pour calculer sa remise en forme, de sorte que vous pouvez simplement travailler dans la population en distribuant des individus à chaque cœur. Quand a été calculé l'aptitude d'un individu, la main que le noyau d'un nouvel individu.

Crossover:

A diviser pour mieux régner approche pourrait être bien adaptée à ce problème. Vos tableaux briser en blocs qui sont traités par chaque noyau de CPU, alors peut-être ajouter une étape de croisement global (accouplement un sous-ensemble de paires) pour vous assurer d'avoir la possibilité de se déplacer dans l'espace multidimensionnel de façon appropriée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top