Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compile MPI with gcc?

Tags:

gcc

mpi

Does anyone know if it is possible to compile MPI with gcc?. I need to use gcc, no mpicc.

like image 550
user1260391 Avatar asked Jul 03 '12 14:07

user1260391


People also ask

Does GCC support MPI?

The Open MPI team strongly recommends that you simply use Open MPI's "wrapper" compilers to compile your MPI applications. That is, instead of using (for example) gcc to compile your program, use mpicc.

Which of the following command are used to compile MPI program?

For all systems, the mpirun command is used to run an MPI program. This is found in the /usr/local/mpich-1.2.


2 Answers

mpicc -compile_info for MPICH.

like image 45
Kadir Avatar answered Sep 23 '22 00:09

Kadir


mpicc is just a wrapper around certain set of compilers. Most implementations have their mpicc wrappers understand a special option like -showme (Open MPI) or -show (Open MPI, MPICH and derivates) that gives the full list of options that the wrapper passes on to the backend compiler.

For example, in Open MPI, wrappers are C++ programs that read plain text configuration files and build command line options that are further passed on to the compiler. mpicc -showme shows the full list of such options:

$ 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 

(it's really a single line that I have split here to improve readability)

It that particular case Intel C Compiler icc is used as the backend compiler but we also have variants that use GCC. You can also get the list of options needed for the comple phase (usually known as CFLAGS) with 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 

as well as the list of options that you need to pass to the linker (known as LDFLAGS) with 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 

These could be used, e.g. in a Makefile, like this:

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

As far as I know -showme:compile and -showme:link are specific to Open MPI and other implementations only give the full list of options when called with -show.

I still think it's better to use mpicc directly because if it happens that something in the MPI setup is changed, it will be immediately reflected in the wrapper while you would have to change your build script / Makefile manually (unless you use -showme:compile and -showme:link to obtain the options automatically).

like image 120
Hristo Iliev Avatar answered Sep 26 '22 00:09

Hristo Iliev