2011-08-04 12 views
10

Próbuję użyć MPI z językiem programowania D. D w pełni obsługuje C ABI i może łączyć się z dowolnym kodem C. Zrobiłem oczywistej rzeczy i tłumaczone nagłówek MPI do D. Potem tłumaczone a test program from Wikipedia D. Skompilowałem go za pomocą następującego polecenia:MPI i D: Opcje Linkera

dmd test.d -L-lmpistubs

to działa, kiedy po prostu uruchomić ./test i drukuje:

0: We have 1 processors

jednak kiedy biegnę z mpiexec -n 8 test, nic nie drukuje. Rozumiem, że pliki wykonywalne MPI wymagają kilku dziwnych opcji łączenia, dlatego narzędzia takie jak mpicc istnieją, aby zautomatyzować proces. Jednak to nie pomoże mi, jeśli próbuję użyć MPI w D. Zakładam, że to dlatego, że nie używam właściwych opcji linkera. Czy ktoś może mi powiedzieć, co robi mpicc i jak mogę zrobić DMD zrobić to samo?

Edytuj: Znalazłem odpowiedź, używając mpicc -showme. To pokazuje, jakie komendy są przekazywane do mpicc i przekazywane do . Jednak zdałem sobie również sprawę, że źle zrobiłem tłumaczenie pliku nagłówkowego. Następne pytanie: How do to it right.

+0

użyłeś zewnętrznego (C) podczas tłumaczenia? –

+2

czy próbowałeś uruchomić 'strace -f mpicc test.c' czy coś w tym stylu, aby znaleźć opcje linkera? Zakładam, że nazywa się 'ld' lub coś w rodzaju procesu potomnego. – gmfawcett

Odpowiedz

2

mpicc to pospolita nazwa różnych skryptów, a nawet programów. Niektóre z nich mają opcję taką jak -echo, -show, -compile-info, -link-info lub -showme lub opcję środowiska, aby pokazać, co jest faktycznie wywoływane.

Spróbuj sprawdzić co to jest faktycznie z

file -k `which mpicc` 

Jeśli jest to skrypt, może to być napisane w sh, bash, Perl, Python. Możesz go łatwo przeglądać i znaleźć właściwą opcję. Jeśli jest to program, spróbuj uruchomić

strings `which mpicc` 

Czasami strings można wyodrębnić nazwy opcji i/lub zmiennych środowiskowych, które kontroluje pracę skryptu.

Ponadto, większość zmiennych CC CC mpicc sprawdza nazwę kompilatora. Możesz napisać skrypt lub program, który po prostu wydrukuje swoje argumenty i ustaw CC env na ten program.