编译MPI程序
一.1000A
MPICH提供了两个工具来简化MPI应用程序的编译, 在曙光1000A并行系统上,编译过程应在主控节点进行。
make
MPICH应用程序常常需要链接特殊的库和编译选项, 这时用户就要使用Makefile。为方便用户, MPICH提供了一个
make 文件的模板
,同时也提供了命令‘mpireconfig’,以按所用并行机特点将这一模板转换为用户可用的‘Makefile’。这一模板即为
‘/usr/local/mpich/examples/Makefile.in’ 文件。
用户将其转换为自己可用的‘Makefile’文件的过程如下:
1.用户 login 入主控节点 (如carrot), 并转入适当子目录下, 如包括MPI应用程序test.f
的子目录下。
2.将文件拷入子目录 % cp /usr/local/mpich/examples/Makefile.in 下。
3. 由 ‘Makefile.in’ 产生 ‘Makefile’ 文件:% mpireconfig Makefile。
4. 按需要修改Makefile。
上述过程产生的 Makefile 中包含一个Fortram程序 (pi3.f) 和两个C语言程序
(cpi.c和cpilog.c) 的编译命令, 按需要加入或修改所需要的内容, 如按 pi3.f 的编译命令加入test.f
编译所需内容或将 pi3 改为 test, 以备编译 test.f 之需。xlc 与 xlf 的编译选项也应按需要修改。
编译有关程序只需使用下述命令:
% make
则 ‘Makefile’ 中所有列入的程序均被编译, 若只编译 test.f, 则需键入命令:
% make test
这时只编译test.f并生成目标test。
mpif77和 mpicc
MPICH提供了两个命令 (mpif77和mpicc) 来编译和链接Fortran或C语言程序,
用户可使用此二命令编译MPI应用程序, 特别是当程序只包含少量文件时。mpif77 (mpicc) 与一般Fortran (或C)
编译命令使用方式类似, 可加入同样的选项,如:
mpif77 -c foo.f
mpicc -c foo.c 与
mpif77 -o foo foo.o
mpicc -o foo foo.o
有时链接时需一些特殊库,应在链接时注明。
二.2000-I及3000
make
MPI应用程序常常需要链接特殊的库和编译选项,
这时用户就要使用”makefile”。按需要修改makefile,主要是编译器路径的设置。编译有关程序只需使用下述命令:
% make
则 ‘makefile’ 中所有列入的程序均被编译,若只编译test.f,则需键入命令
% make test
这时只编译test.f并生成目标文件test。
用户可以用以下的Makefile文件模板作C程序的编译:
# Makefile for compiling MPI programs on Dawning-3000
system.
#
# This makefile is used to compile and link with MPI programs for
BCL-1e
# communication library and RMS resource management system
written in C.
#
CC = /usr/bin/cc
CLINKER = /usr/bin/cc
OPTFLAGS =
LIBS = -L$(MPI_ROOT)/lib -L/cluster/bcl/lib -L/cluster/rms/lib
-L/cluster/sdr/lib -lmpi -lbcl -lrms -lsdr
INCLUDES = -I/cluster/bcl/include -I/cluster/rms/inc
-I$(MPI_ROOT)/include
default: hello-world
hello-world: hello-world.o
$(CLINKER) $(OPTFLAGS) ${INCLUDES} -o hello-world hello-world.o
${LIBS}
/bin/rm -f *.o *~
clean:
/bin/rm -f *.o *~ $(default)
.c.o:
$(CC) $(CFLAGS) ${INCLUDES} -c $*.c
Fortran程序的Makefile文件模板如下:
# Makefile for compiling MPI programs on Dawning-3000
system.
#
# This makefile is used to compile and link with MPI programs for
BCL-1e
# communication library and RMS resource management system
written in Fortran.
#
F77 = /usr/bin/f77
CLINKER = /usr/bin/f77
OPTFLAGS =
LIBS = -L$(MPI_ROOT)/lib -L/cluster/bcl/lib -L/cluster/rms/lib
-L/cluster/sdr/lib -lmpi -lbcl -lrms -lsdr
INCLUDES = -I/cluster/bcl/include -I/cluster/rms/inc
-I$(MPI_ROOT)/include
default: hello-world
hello-world: hello-world.o
$(CLINKER) $(OPTFLAGS) ${INCLUDES} -o hello-world hello-world.o
${LIBS}
/bin/rm -f *.o *~
clean:
/bin/rm -f *.o *~ $(default)
.f.o:
$(F77) $(CFLAGS) ${INCLUDES} -c $*.f
mpif77和mpicc
如果用户设置了正确的MPI系统命令的执行路径,就可以直接地使用命令行方式mpicc或mpif77来编译C或Fortran程序,编译方式与cc和f77完全一致。
MPI提供了两个命令 (mpif77和mpicc) 来简化编译和链接MPI
Fortran或C语言程序的过程,用户可使用此二命令编译MPI应用程序,特别是当程序只包含少量文件时。mpif77 (mpicc)
与一般Fortran (或C) 编译命令使用方式类似, 可加入同样的选项(详细选项可见有关编译器选项的说明),如:
mpif77 -c foo.f
mpicc -c foo.c
mpif77 -o foo foo.o
mpicc -o foo foo.o
有时链接时需一些特殊库, 应在链接时注明。使用mpicc和mpif77省略了有关MPI的路径设置。