有谁知道,如果有可能编译MPI与gcc
? 我需要使用gcc
,没有mpicc
。
Answer 1:
mpicc
只是围绕某一套编译器的包装。 大多数实现有自己mpicc
包装明白喜欢一个特殊的选项-showme
(开放MPI)或-show
(开放MPI,MPICH和衍生物),让该包装传递给后端编译器选项的完整列表。
例如,在打开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
(这是真的,我在这里拆分以提高可读性一行)
这是特殊情况下的英特尔C编译器icc
作为后端的编译器,但我们也有使用GCC变种。 您还可以得到所需COMPLE阶段(通常称为选项列表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
是特定于Open MPI和其他实现,只有当一个名为给出的选项的完整列表-show
。
我仍然认为这是更好地使用mpicc
直接,因为如果它发生的东西在MPI设置改变时,它会立即反映在包装,而你必须改变你的构建脚本/ Makefile
手动(除非你使用-showme:compile
和-showme:link
自动获取期权)。
Answer 2:
mpicc -compile_info
的MPICH。
Answer 3:
是的,你可以实际使用gcc。 但在我的情况下(在Ubuntu)mpicc只是GCC的包装,这里是命令的输出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
而在开放MPI文档 :
开放MPI团队强烈建议您只需使用开放MPI的“包装”编译器来编译MPI应用程序。 也就是说,不是使用(例如)GCC编译程序,使用mpicc。
我们重复上面的语句:打开MPI团队强烈建议使用包装编译器来编译和链接MPI应用程序。 如果你发现自己说,“但我不想使用包装的编译器!”,请我们的幽默和尝试。 看看他们为你工作。 请务必让我们知道,如果他们不为你工作。 很多人基地,他们“包装编译器吸!” 心态上从1990年中期的不良实现包装的编译器的不良行为。 事情要好得多,这些天; 包装编译器可以处理几乎任何情况,而且比你手动打开MPI-特定的编译器和连接器选项尝试硬编码更为可靠。 话虽这么说,也有一些 - 非常非常少 - 在使用包装的编译器可能会产生问题的情况下 - 比如多个项目中嵌套多个包装编译器。 因此,开放MPI提供了一个解决办法,找出你需要编译MPI应用程序什么命令行标志。
下面这个答案是对您有用。
Answer 4:
mpicc
已经在使用gcc
作为后端
Answer 5:
是的,你当然可以编译MPI程序,而不方便mpicc
包装。 在大多数实现mpicc
是一个shell脚本(或类似),其设置环境变量,发现和链接各种库,所有的那种东西,否则你可能投入一个Makefile。
我建议你找到的一个实例mpicc
脚本和解构它。
Answer 6:
对于MPICH,根据mpicc手册页, mpicc -compile_info
显示标志编译的程序,以及mpicc -link_info
显示标志用于链接的程序。