2012-07-03 4 views
17

Кто-нибудь знает, можно ли скомпилировать MPI с помощью gcc?. Мне нужно использовать gcc, № mpicc.Как скомпилировать MPI с gcc?

+0

Возможно, но почему вы хотите? Обычно завернутый компилятор (mpicc здесь) намного удобнее и будет каким-то образом оптимизирован. – Hbcdev

+0

для cmake вы не должны использовать обертку [здесь] (https://cmake.org/pipermail/cmake/2011-June/045037.html), потому что CMake определяет, как скомпилировать программы MPI без нее.) Просто используйте ' find_package (MPI REQUIRED) '. Это намного чище, чем оболочка, чтобы установить флаги link/compile. – dashesy

ответ

0

mpicc уже использует gcc в качестве движка

+1

Странно, мой 'mpicc' использует' icc' в качестве backend ... –

0

Да, можно, конечно, составить программу MPI без удобства mpicc обертки. В большинстве реализаций mpicc - это сценарий оболочки (или аналогичный), который устанавливает переменные среды, находит и связывает различные библиотеки, все виды материалов, которые вы могли бы поместить в Makefile.

Предлагаю вам найти экземпляр сценария mpicc и разложить его.

21

mpicc - это всего лишь обертка вокруг определенного набора компиляторов. В большинстве реализаций их обтекатели mpicc понимают особый вариант, например -showme (Open MPI) или -show (Open MPI, MPICH и производные), который предоставляет полный список опций, которые оболочка передает на компилятор.

Например, в Open MPI обертки - это программы на C++, которые читают файлы конфигурации обычного текста и строят параметры командной строки, которые затем передаются компилятору. mpicc -showme показывает полный список таких параметров:

$ mpicc -showme 
icc 
-I/opt/MPI/openmpi-1.5.3/linux/intel/include 
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi 
-fexceptions 
-pthread 
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-lmpi 
-ldl 
-Wl,--export-dynamic 
-lnsl 
-lutil 

(это на самом деле одна строка, что я расколол здесь, чтобы улучшить читаемость)

Это тот частный случай, Intel C Compiler icc используется в качестве интерфейса компилятор, но у нас также есть варианты, которые используют GCC. Вы также можете получить список параметров, необходимых для Комплексы фазы (обычно известный как CFLAGS) с mpicc -showme:compile:

$ mpicc -showme:compile 
-I/opt/MPI/openmpi-1.5.3/linux/intel/include 
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi 
-fexceptions 
-pthread 
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib 

, а также список опций, которые нужно передать в компоновщик (известный как LDFLAGS) с mpicc -showme:link:

$ mpicc -showme:link 
-fexceptions 
-pthread 
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-lmpi 
-ldl 
-Wl,--export-dynamic 
-lnsl 
-lutil 

Их можно использовать, например в Makefile, как это:

... 
CFLAGS += $(shell mpicc -showme:compile) 
LDFLAGS += $(shell mpicc -showme:link) 
... 

Насколько я знаю -showme:compile и -showme:link являются специфическими для открытия MPI и другие реализации только дать полный список опций при вызове с -show.

Я по-прежнему считаю, что лучше использовать mpicc, потому что, если это произойдет, если что-то в настройке MPI будет изменено, оно будет немедленно отражено в оболочке, в то время как вам придется вручную изменить сценарий сборки/Makefile (если вы не используете -showme:compile и -showme:link, чтобы получить параметры автоматически).

0

Да, вы можете использовать gcc на самом деле.Но в моем случае (на Ubuntu) mpicc является просто оболочкой НКИ, здесь вывод команды mpicc -showme:

gcc -I/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent -I/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent/include -I/usr/lib/openmpi/include -I/usr/lib/openmpi/include/openmpi -pthread -Wl,-rpath -Wl,/usr/lib/openmpi/lib -Wl,--enable-new-dtags -L/usr/lib/openmpi/lib -lmpi 

В то время как в Open MPI docs:

команда

Открытого MPI настоятельно рекомендую вам просто используйте «компиляторы» Open MPI для компиляции ваших приложений MPI. То есть вместо использования (например) gcc для компиляции вашей программы, используйте mpicc.

Повторяем приведенное выше утверждение: команда Open MPI настоятельно рекомендует использовать компиляторы-оболочки для компиляции и соединения приложений MPI. Если вы говорите: «Но я не хочу использовать компиляторы-обертки!», Пожалуйста, юмористируйте нас и попробуйте. Посмотрите, работают ли они на вас. Обязательно сообщите нам, если они не сработают для вас. Многие люди используют свои «компиляторы-обертки»! менталитет о плохом поведении от плохо реализованных компиляторов оболочек в середине 1990-х годов. В наши дни все намного лучше; Компиляторы оболочки могут обрабатывать практически любую ситуацию и намного надежнее, чем вы пытаетесь жестко закодировать флаги компилятора и компоновщика Open MPI вручную. Это, как говорится, есть очень-очень-очень-то - ситуации, когда использование компиляторов-оболочек может быть проблематичным - например, вложение нескольких компиляторов-оболочек из нескольких проектов. Следовательно, Open MPI обеспечивает обходной путь, чтобы узнать, какие флаги командной строки вам нужны для компиляции приложений MPI.

Здесь этот ответ полезен для вас.

Смежные вопросы