编译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。
用户可以使用以下内容MakefileC程序编译文件模板:
# 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路径设置。