2011-08-04 3 views
10

J'essaie d'utiliser MPI avec le langage de programmation D. D prend entièrement en charge le C ABI et peut lier et appeler n'importe quel code C. Je l'ai fait les choses évidentes et traduit l'en-tête de MPI à D. Je puis traduis a test program from Wikipedia à D. Je l'ai compilé avec la commande suivante:Options MPI et D: Linker

dmd test.d -L-lmpistubs

Il fonctionne quand je viens de lancer ./test et impressions:

0: We have 1 processors

Cependant, quand je lance avec mpiexec -n 8 test, il imprime rien. Ma compréhension est que les exécutables MPI nécessitent un tas d'options de liaison étranges, ce qui explique pourquoi des outils tels que mpicc existent pour automatiser le processus. Cependant, cela ne m'aide pas si j'essaie d'utiliser MPI dans D. Je suppose que c'est parce que je n'utilise pas les bonnes options de l'éditeur de liens. Quelqu'un peut-il me dire ce que fait mpicc et comment je peux faire DMD faire la même chose? Editer: J'ai trouvé la réponse en utilisant mpicc -showme. Cela montre ce qui commande mpicc à gcc. Cependant, j'ai également réalisé que j'avais mal fait la traduction du fichier d'en-tête. Question suivante: How do to it right.

+0

avez-vous utilisé extern (C) lors de la traduction? –

+2

avez-vous essayé d'exécuter 'strace -f mpicc test.c' ou quelque chose comme ça, pour chercher les options de l'éditeur de liens? Je suppose qu'il appelle 'ld' ou quelque chose comme un processus enfant. – gmfawcett

Répondre

2

mpicc est le nom commun de différents scripts et même de programmes. Certains d'entre eux ont l'option comme -echo, -show, -compile-info, -link-info ou -showme ou l'option d'environnement pour montrer ce qui est réellement appelé.

Essayez de vérifier ce qui est en fait avec ce

file -k `which mpicc` 

S'il est script, il peut être écrit en sh, bash, perl, python. Vous pouvez facilement le voir et trouver l'option correcte. Si c'est un programme, essayez d'exécuter

strings `which mpicc` 

Parfois strings peut extraire les noms des options et/ou variables d'environnement qui contrôle le travail du script.

De même, la plupart des mpicc vérifient la variable d'environnement CC pour obtenir le nom du compilateur. Vous pouvez écrire un script ou un programme qui va simplement imprimer ses arguments et définir CC env pour ce programme.