2009-06-09 10 views
2

Je veux écrire un convertisseur de code qui prend un programme parallèle basé sur OpenMP et l'exécute sur un cluster.Conversion d'un programme parallèle en programme de cluster. D'OpenMP à?

Comment puis-je résoudre ce problème? Quelles bibliothèques est-ce que j'utilise? Comment configurer un petit cluster pour cela? Je trouve extrêmement difficile de trouver du bon matériel sur l'informatique en grappes sur Internet.

EDIT: Si c'est impossible alors comment Intel le fait-il? Le compilateur Intel semble faire exactement ce que je veux. Je n'ai aucune application spécifique que je voudrais exécuter. Je veux écrire le "convertisseur/compilateur", pas l'application. Je comprends que la mémoire partagée est différente de la mémoire distribuée, mais il doit y avoir un moyen de synchroniser la mémoire, sinon dans tous les cas, puis dans certains cas spécifiques, même si cela signifie que l'application est écrite avec des constructions personnalisées.

+0

Ajout de quelques clarifications – jetru

Répondre

2

Il me semble que ce n'est pas une bonne idée.

L'idée de base derrière OpenMP est l'exécution en parallèle de données partagées. Cela fonctionne bien, lorsque l'accès aux données partagées ne vous coûte rien. Chaque thread peut accéder à une variable dans le cache partagé ou dans la RAM.

Les calculs de cluster exploitent le passage de message, car les ordinateurs du cluster ont de la mémoire distribuée. Lorsqu'un processus a besoin de données d'un autre, vous devez gérer les données transitant sur le réseau. C'est une opération qui prend du temps. Par conséquent, si vous voulez écrire un tel compilateur, vous devez implémenter des opérations de diffusion de données (par exemple MPI_Bcast de MPI) pour chaque accès de données dans OpenMP. Cela va tuer la performance parallèle du tout.

1

Ceci n'est simplement pas possible. Vous devez structurer votre code d'une manière complètement différente pour le faire fonctionner sur un cluster (la programmation de plusieurs machines est et différente de la programmation d'une machine).

Il n'y a pas de poussière magique pour faire cela. D'un autre côté, si vous écrivez votre programme avec des clusters, il est possible de l'exécuter sur une seule machine (bien que cela soit évidemment plus lent).

3

Intel a une implémentation de OpenMP qui fonctionne avec leurs compilateurs C++ et Fortran pour les clusters x86 64 bits. Vous pouvez obtenir une version d'évaluation de 30 jours de ces compilateurs gratuitement. A part ça, Zifre a surtout raison. Si vous êtes concerné par l'évolutivité, mordez la balle et écrivez votre programme parallèle dans un autre modèle de programmation (MPI, CUDA, Cilk, ...) qui est conçu avec des systèmes distribués à l'esprit. Si vous fournissez un peu plus d'informations sur votre application, nous serons peut-être en mesure de vous fournir des conseils plus utiles à ce sujet.

1

Compilateur SCORE/SCASH et Omni OpenMP