Question

Je veux écrire un convertisseur de code qui prend un programme parallèle basé OpenMP et fonctionne sur un cluster.

Comment puis-je aller sur ce problème? Que dois-je utiliser les bibliothèques? Comment puis-je configurer un petit groupe pour cela?

Je trouve qu'il est extrêmement difficile de trouver du bon matériel sur l'informatique de cluster sur Internet.

EDIT: S'il est impossible alors comment Intel faire? Le compilateur Intel semble faire exactement ce que je veux. Je n'ai aucune application spécifique que je voudrais courir. 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 pour tous les cas, alors dans certains cas particuliers, même si cela signifie que l'application est écrite avec des constructions personnalisées.

Était-ce utile?

La solution

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

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

Les calculs de cluster exploitent passage de messages, parce que les ordinateurs en grappe ont distribué la mémoire. Quand un processus a besoin de données d'une autre, vous devez gérer les données transitant sur le réseau. Il est une opération de temps.

Donc, si vous voulez écrire ce compilateur, vous devez mettre en œuvre des opérations de diffusion des données (par exemple MPI_Bcast de MPI) pour chaque accès aux données dans OpenMP. Cela va tuer la performance parallèle à tous.

Autres conseils

Intel a une mise en œuvre de OpenMP qui fonctionne avec leur C ++ et Fortran pour x 86 grappes de 64 bits. Vous pouvez obtenir une version eval 30 jours de ces compilateurs gratuitement. A part cela, la plupart du temps est Zifre droit. Si vous êtes concernés par l'évolutivité, mordre la balle et d'écrire votre programme parallèle dans un autre modèle de programmation (MPI, CUDA, Cilk, ...), qui est conçue pour les systèmes distribués à l'esprit. Si vous fournissez un peu plus d'informations sur votre demande, nous pourrions être en mesure de fournir des conseils plus utiles à cet égard.

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

Il n'y a pas de poussière magique Pixie pour le faire.

Par contre, si vous écrivez votre programme avec les clusters à l'esprit, il est possible de l'exécuter sur une seule machine (même si elle sera évidemment plus lent).

POINTAGE / SCASH et compilateur Omni OpenMP

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