MPI и D: параметры компоновщика

Я пытаюсь использовать MPI с языком программирования D. D полностью поддерживает C ABI и может связываться с любым кодом C и вызывать его. Я сделал очевидные вещи и перевел заголовок MPI на D. Затем я перевел тестовую программу из Википедия в D. Я скомпилировал ее с помощью следующей команды:

dmd test.d -L-lmpistubs

Это работает, когда я просто запускаю ./test и печатаю:

0: We have 1 processors

Однако, когда я запускаю mpiexec -n 8 test, он ничего не печатает. Насколько я понимаю, для исполняемых файлов MPI требуется множество странных параметров компоновки, поэтому для автоматизации процесса существуют такие инструменты, как mpicc. Однако это не помогает мне, если я пытаюсь использовать MPI в D. Я предполагаю, что это потому, что я не использую правильные параметры компоновщика. Может кто-нибудь сказать мне, что делает mpicc и как я могу заставить DMD делать то же самое?

Изменить: я нашел ответ, используя mpicc -showme. Это показывает, какие команды mpicc пересылаются gcc. Однако я также понял, что неправильно перевел заголовочный файл. Следующий вопрос: Как это сделать правильно.


person dsimcha    schedule 04.08.2011    source источник
comment
Вы использовали extern(C) при переводе?   -  person ratchet freak    schedule 04.08.2011
comment
Вы пытались запустить strace -f mpicc test.c или что-то в этом роде, чтобы найти параметры компоновщика? Я предполагаю, что он вызывает ld или что-то вроде дочернего процесса.   -  person gmfawcett    schedule 04.08.2011


Ответы (1)


mpicc — это общее название различных скриптов и даже программ. У некоторых из них есть опция, такая как -echo, -show, -compile-info, -link-info или -showme, или опция среды, чтобы показать, что на самом деле называется.

Попробуйте проверить, что это на самом деле с

 file -k `which mpicc`

Если это скрипт, то его можно написать на sh, bash, perl, python. Вы можете легко просмотреть его и найти правильный вариант. Если это программа, попробуйте запустить

 strings `which mpicc`

Иногда strings может извлекать имена опций и/или переменные окружения, которые контролируют работу скрипта.

Кроме того, большинство mpicc проверяют переменную CC env, чтобы получить имя компилятора. Вы можете написать скрипт или программу, которая будет просто печатать свои аргументы и устанавливать CC env для этой программы.

person osgx    schedule 04.08.2011