MPI и D: параметры компоновщика - PullRequest
10 голосов
/ 04 августа 2011

Я пытаюсь использовать 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. Однако я также понял, что сделал перевод заголовочного файла неправильно. Следующий вопрос: Как правильно это сделать.

1 Ответ

2 голосов
/ 04 августа 2011

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

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

 file -k `which mpicc`

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

 strings `which mpicc`

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

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

...