LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1395|回复: 19

并行机上的Makefile

[复制链接]
发表于 2004-9-3 05:52:05 | 显示全部楼层 |阅读模式
对makefile不是很懂
有一个程序,需要在linux-intel-mpich上运行,是一个
cluster,但是所带的makefile没有这个系统,企图看明白
makefile里写的是什么,发现根本就云里雾里,因为不是学 
fortran的,linux也是刚用没多久,又急着用这个程序,哪位好心的高手能否帮个忙,写一个相应的makefile,不是偶偷懒,实在是等不起,回头一定好好学的说。makefile全部内容如下:

# Define default settings

#=======================================================================

.SUFFIXES:
.SUFFIXES: .f .c .f90 .o

BINROOT = ../execute
CPP = /lib/cpp
EX = DLPOLY.Y
EXE = $(BINROOT)/$(EX)
FC=undefined
PVM_EX=\'$(EX)\'
SHELL=/bin/sh
STRESS=STRESS
TYPE=master

# Define object files

#=====================================================================

OBJ_ALL = timeperiods.o \
        angfrc.o bndfrc.o cfgbcast.o cfgscan.o conscan.o corshl.o \
        coul0.o coul2.o coul3.o coul4.o dblstr.o dcell.o denloc.o \
        dihfrc.o dlpoly.o domain.o duni.o gcheck.o \
        erfcgen.o error.o ewald2.o ewald3.o ewald_spme.o exchange.o \
        exclude.o exitcomms.o export.o extnfld.o fbpfrc.o fcap.o \
        fldscan.o forces.o forgen.o fortab.o freeze.o gauss.o gdmax.o \
        gdsum.o getrec.o gimax.o gisum.o gstate.o images.o \
        deport.o initcomms.o intlist.o intstr.o invert.o invfrc.o \
        lafind.o lowcase.o lrcmetal.o lrcorrect.o metgen.o npt_b1.o \
        nst_b1.o npt_h1.o nst_h1.o nve_1.o nvt_b1.o nvt_e1.o nvt_h1.o \
        parlink.o parset.o rdf0.o rdf1.o relocate.o result.o revive.o \
        scdens.o shellsort2.o shlfrc.o shlqnch.o simdef.o spme_for.o \
        spme_pak.o srfrce.o static.o strip.o strucopt.o suttchen.o \
        sysbook.o sysdef.o sysgen.o sysinit.o systemp.o \
        thbfrc.o timchk.o traject.o vscaleg.o warning.o xscale.o \
        zden0.o zden1.o addexcl.o chkdih14.o passrho.o passdens.o \
        pack_bonds.o unpk_bonds.o tag.o passcon.o shmove_1.o shmove_2.o\
        ddshake.o shellsort.o quench.o dlpfft3.o  \
        cputimecc.o

OBJ_EXT = etime.o crecv.o csend.o gsync.o mynode.o nodedim.o numnodes.o \
        fft_module.o gpfa.o daxpby.o rappers.o exchange_grid.o

OBJ_COM = cfgbcast.o deport.o exitcomms.o export.o gdmax.o gdsum.o \
        gimax.o gisum.o initcomms.o passcon.o passrho.o revive.o \
        shmove_1.o shmove_2.o sysinit.o timchk.o traject.o

# Define targets

#=====================================================================
all:
        @echo "Error - please specify a target machine!"
        @echo "ermissible targets for this Makefile are:"
        @echo "                                          "
        @echo "beowulf-absoft"
        @echo "cray-t3e"
        @echo "cray-t3e-totalview"
        @echo "dec-alpha-ev6"
        @echo "hitachi-sr2201"
        @echo "hpcx"
        @echo "linux-alpha"
        @echo "loki"
        @echo "loki-timer"
        @echo "loki-vampir"
        @echo "sg2k-shmem"
        @echo "sg8k-mpi"
        @echo "sg8k-mpi-f"
        @echo "sp2-mpi"
        @echo "sp2-mpi-fix"
        @echo "         "
        @echo "lease examine Makefile for details"

# system specific targets follow :

#========== DEC Alpha ev6 (RAL) ===========================================
dec-alpha-ev6:
        $(MAKE) LD="f90 -o" F90="f90" FC="f90" FFLAGS="-c -arch ev6 -tune ev6 -fast" \
        LDFLAGS="-lcxml -arch ev6 -math_library fast -assume noaccuracy_sensitive -hpf -hpf_target smpi"  \
        CPFLAGS="-D$(STRESS) -DMPI -D'POINTER=integer*8'-DDAFT -I/usr/include" \
        TIMER="" EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#================== HPCx SP Power 4 =======================================
hpcx:
        $(MAKE) LD="mpxlf -o" FC=mpxlf CC="cc -O -DNOC_" \
        F90="mpxlf90 -qsuffix=f=f90" CPP=/lib/cpp \
        LDFLAGS="-O2 -qmaxmem=-1 -bmaxdata:0x80000000 -lessl" \
        FFLAGS="-c -O2 -qmaxmem=-1 -qarch=pwr4 -qtune=pwr4 -qnosave" \
        CPFLAGS="-D$(STRESS) -DMPI -DRS6000 -DDAFT -I/usr/lpp/ppe.poe/include" \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#================== IBM SP2 version ====================================
sp2-mpi:
        $(MAKE) LD="mpxlf -o" LDFLAGS="-lesslp2" FC=mpxlf \
        FFLAGS="-c -O3 -NS2048  -qarch=pwr2 -qnosave" \
        CPP=/lib/cpp CPFLAGS="-D$(STRESS) -DMPI -DESSL -D'POINTER=integer' -I/usr/lpp/ppe.poe/include" \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#================== IBM SP2 Fix version ===============================
sp2-mpi-fix:
        $(MAKE) LD="mpxlf -o" LDFLAGS="-lesslp2" FC=mpxlf \
        FFLAGS="-c -g -C -NS2048  -qarch=pwr2 -qnosave" \
        CPP=/lib/cpp CPFLAGS="-D$(STRESS) -DMPI -DESSL -D'POINTER=integer' -I/usr/lpp/ppe.poe/include" \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#===== Cray t3e (Manchester) ===========================================
cray-t3e:
        $(MAKE) FC="f90" FFLAGS="-c -dp -lmpi"  CPP="f90 -eP " \
        CPFLAGS="-Wp' -DCRAY -D'POINTER=integer' -DMPI -DSHMEM -D$(STRESS)'" \
        lowcase.o
        $(MAKE) LD="f90 -o" FC="f90" FFLAGS="-c -dp -lmpi" LDFLAGS="-lmpi" \
        CPP="f90 -eP " CPFLAGS="-Wp' -DCRAY -D'POINTER=integer' -DMPI -DSHMEM -D$(STRESS)'"  \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#===== Cray t3e (Manchester) with totalview flags ======================
cray-t3e-totalview:
        $(MAKE) FC="f90" FFLAGS="-c -dp -lmpi -g -X8" \
        CPFLAGS="-DCRAY -D'POINTER=integer' -DMPI -DSHMEM -D$(STRESS)" \
        lowcase.o
        $(MAKE) LD="f90 -o" FC="f90" FFLAGS="-c -dp -lmpi  -g -X8" \
        LDFLAGS="-lmpi -g -X8" \
        CPFLAGS="-DCRAY -D'POINTER=integer' \
        -DMPI -DSHMEM -D$(STRESS)" TIMER="" EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#======== Hitachi SR2201 Multiprocessor (no SPME) ========================
hitachi-sr2201:
        $(MAKE) FC=xf90 \
        FFLAGS="-c -W0,'form(fixed),opt(o(3)),langlvl(save(0))' -s,TRACE" \
        CPFLAGS="-D$(STRESS) -DMPI -D'POINTER=integer'" intlist.o
        $(MAKE) LDFLAGS="" LDLIBS="-lfmpi -lmpi" LD="xf90 -o" FC=xf90 \
        FFLAGS="-c -W0, 'form(fixed),opt(o(3)),langlvl(save(0))' -s,TRACE" \
        CC=xcc TIMER="" CPFLAGS="-D$(STRESS) -DMPI
        -D'POINTER=integer'" OBJ_SPME="" EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#========= Silicon Graphics 8000 (parallel) ==========================
sg8k-mpi:
        $(MAKE) LD="f90 -O3 -64 -o" FC=f90 LDFLAGS="-lmpi" TIMER="" \
        FFLAGS="-c -O3  -64 " CPFLAGS="-D$(STRESS) -DMPI \
        -DCRAY -D'POINTER=integer'" EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#========= Silicon Graphics 8000 (parallel) ==========================
sg8k-mpi-f:
        $(MAKE) LD="f90 -Ofast -64 -o" FC=f90 LDFLAGS="-lmpi" TIMER=""\
        FFLAGS="-c -Ofast  -64" CPFLAGS="-D$(STRESS) -DMPI \
        -DCRAY -D'POINTER=integer'" EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#======= Silicon Graphics Origin 2000 (parallel/SHMEM) ===============
sg2k-shmem:  
        $(MAKE) LD="f90 -o" FC=f90 \
        FFLAGS="-c -64 -mips4 -Ofast=ip27 -OPT:Olimit=0 " \
        LDFLAGS="-64 -mips4 -Ofast=ip27 -OPT:Olimit=0 -lsma -lmpi -lblas" \
        OBJ_EXT="gsync.o mynode.o nodedim.o numnodes.o" TIMER="" \
        CPFLAGS="-DMPI -D$(STRESS) -D'SGICRAY' -DCRAY -D'POINTER=integer'" \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#========= Daresbury Beowulf (Absoft compiler) =======================
beowulf-absoft:
        $(MAKE) LD="/usr/bin/f90 -o" \
        LDFLAGS="-L/home/kcm/mpich-absoft/mpich/lib/LINUX/ch_p4/ -lmpich" \
        FC=/usr/bin/f90 FFLAGS="-c -O -B100" TIMER="" OBJ_SPME="" \
        CPFLAGS="-D$(STRESS) -DMPI -P -D'POINTER=integer' \
        -I/home/kcm/mpich-absoft/mpich/include" \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#========== Beowulf Linux pgf90 + mpich *Chemnitzer) ==============================
PGI-mpich2:
        $(MAKE) LD="pgf90 -o "\
        CPFLAGS="-D$(STRESS) -DPENTIUM -DMPI -D'POINTER=integer' -nostdinc -traditional -I/afs/tu-chemnitz.de/global/@sys/packages/pgi-3.2/linux86/include" \
        FC=pgf90 FFLAGS="-I/afs/tu-chemnitz.de/global/@sys/packages/pgi-3.2/linux86/include -c -fast -Knoieee -Mdalign " \
        LDFLAGS="-L/afs/tu-chemnitz.de/global/@sys/packages/pgi-3.2/linux86/lib -lmpich -lmpichf" \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#========== Beowulf Linux pgf90 + Lam (6.3.2) =============================
PGI-lam.6.3.2:
        $(MAKE) LD="pgf90 -o "\
        CPFLAGS="-D$(STRESS) -DPENTIUM -DMPI -P -traditional -I/afs/tu-chemnitz.de/global/@sys/packages/lam-6.3-b2/h -D'POINTER=integer'" \
        FC=pgf90 FFLAGS="-I/afs/tu-chemnitz.de/global/@sys/packages/lam-6.3-b2/h -c -fast -Knoieee -Mdalign -Msecond_underscore" \
        LDFLAGS="-L/afs/tu-chemnitz.de/global/@sys/packages/lam-6.3-b2/lib -lmpi -ltstdio -ltrillium -lt -largs" \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)


#========== Alpha linux + MPI  ==============================
linux-alpha:
        $(MAKE) LD="mpif90 -o" LDFLAGS="-fast -arch ev67 -tune ev67 -lmpif" LDLIBS="/usr/lib/libcxml.a" FC=mpif90 FFLAGS="-c -fast -arch ev67 -tune ev67" CC=ccc \
        CPP=/lib/cpp CPFLAGS="-D$(STRESS) -DMPI -D'POINTER=integer' -traditional -DALPHA -I/usr/lib/mpi/include" \
        CFLAGS=" -O -Ae " \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)


#================ loki + MPI ================================
loki:
        $(MAKE) LD="mpif90 -o" LDFLAGS="-fast -arch ev67 -tune ev67 -lmpif" LDLIBS="/usr/lib/libcxml.a" FC=mpif90 FFLAGS="-c -fast -arch ev67 -tune ev67" CC=ccc \
        CPP=/lib/cpp CPFLAGS="-D$(STRESS) -DDAFT -DMPI -D'POINTER=integer' -traditional -DALPHA -I/usr/lib/mpi/include" \
        CFLAGS=" -O -Ae " \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)


#================ loki + timer ==============================
loki-timer:
        $(MAKE) LD="mpif90 -o" LDFLAGS="-fast -arch ev67 -tune ev67 -lmpif" LDLIBS="/usr/lib/libcxml.a" FC=mpif90 FFLAGS="-c -fast -arch ev67 -tune ev67" CC=ccc \
        CPP=/lib/cpp CPFLAGS="-D$(STRESS) -DBMARK -DDAFT -DMPI -D'POINTER=integer' -traditional -DALPHA -I/usr/lib/mpi/include" \
        CFLAGS=" -O -Ae " \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)


#================ loki + VAMPIR =============================
loki-vampir:
        $(MAKE) LD="mpif90 -o" LDFLAGS="-fast -arch ev67 -tune ev67 -lmpif" LDLIBS="/usr/lib/libcxml.a" FC=mpif90 FFLAGS="-c -fast -arch ev67 -tune ev67" CC=ccc \
        CPP=/lib/cpp CPFLAGS="-D$(STRESS) -DVAMPIR -DDAFT -DMPI -D'POINTER=integer' -traditional -DALPHA -I/usr/lib/mpi/include" \
        CFLAGS=" -O -Ae " \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)


#========== UKCP Linux pgf90 + mpich (6.3.2) =============================
UKCP:
        $(MAKE) LD="pgf90 -o "\
        CPFLAGS="-D$(STRESS) -DPENTIUM -DMPI -P -traditional -I/opt/scali/include -D'POINTER=integer'" \
        FC=pgf90 FFLAGS="-c -O2 -Munroll -Knoieee -Mdalign -I/opt/scali/include" \
        LDFLAGS="-L /opt/scali/lib -L /usr/local/pgi/linux86/lib -lfmpi -lmpi -lblas " \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

#========== UKCP Linux pgf90 + mpich (6.3.2) + parrallel FFT  =============================
UKCP_DAFT:
        $(MAKE) LD="pgf90 -o "\
        CPFLAGS="-D$(STRESS) -DDAFT -DPENTIUM -DMPI -P -traditional -I/opt/scali/include -D'POINTER=integer'" \
        FC=pgf90 FFLAGS="-c -O2 -Munroll -Knoieee -Mdalign -I/opt/scali/include" \
        LDFLAGS="-L /opt/scali/lib -L /usr/local/pgi/linux86/lib -lfmpi -lmpi -lblas " \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)


#=====================================================================
# Default code.
master: check $(OBJ_ALL) $(OBJ_EXT)
        $(LD) $(EXE) $(OBJ_ALL) $(OBJ_EXT) $(LDFLAGS) $(LDLIBS)

#=====================================================================
# Check that a machine has been specified
check:
        @if test $(FC) = "undefined";\
        then echo "You must specify a target machine!"; \
        exit 99;\
        fi

#=====================================================================
# Clean up the source directory
clean:
        rm -f $(OBJ_ALL) $(OBJ_EXT) *.tmp.f

#=====================================================================
# Declare dependencies : c preprocess all .f files
.f90.o:
        $(F90) $(FFLAGS) $*.f90
.f.o:
        $(CPP) $(CPFLAGS) $*.f > $*.i
        sed '/^#/D' < $*.i > $*.tmp.f
        $(FC) $(FFLAGS) $*.tmp.f
        mv $*.tmp.o $*.o
        rm $*.i
.c.o:
        $(CC) -c $*.c

#=====================================================================
# Declare dependency on parameters file

$(OBJ_ALL): dl_params.inc
$(OBJ_EXT): dl_params.inc
$(OBJ_EXT): comms.inc
$(OBJ_COM): comms.inc

fft_module.o: fft_module.f90
daxpby.o: daxpby.f90
rappers.o: rappers.f90
exchange_grid.o: exchange_grid.f90

$(OBJ_ALL): fft_module.o
:thank :thank :thank
发表于 2004-9-3 11:02:37 | 显示全部楼层
找到你系统上的f90编译器,和需要链接的库及其路径,随便找个照着添上去就行了。最后把那些每个平台都有的照抄上。
 楼主| 发表于 2004-9-3 19:25:45 | 显示全部楼层
最初由 lucifer 发表
找到你系统上的f90编译器,和需要链接的库及其路径,随便找个照着添上去就行了。最后把那些每个平台都有的照抄上。


可是我看不大懂那些个flag是什么意思,不同的编译器,不同的系统,应该是需要不同的flag来实现同样的功能,也就是说,我至少要懂两个系统,一个已知的,一个我想要得,才能完成这个转换,天啊,正在学,急死了。。。
 楼主| 发表于 2004-9-3 19:44:53 | 显示全部楼层
问一个傻傻的问题,在并行机上编译的时候,是不是mpi本身就代表一种编译器,还是它只是某个编译器的附属部分?
发表于 2004-9-3 20:24:24 | 显示全部楼层
只要体系结构一样(例如都是x86),选项基本就是一样的,仔细看看那个Makefile,不是有很多几乎一模一样吗?至于MPI是什么,just google it
 楼主| 发表于 2004-9-3 21:46:10 | 显示全部楼层
有点懂了,我认为最接近的应该是 Alpha Linux + MPI, 结合其它的 mpich,我自己写了一个,不知道对不对

#========  RD Linux Intel Fortran + mpich 1.2.5 ==========
RD Linux:
$(MAKE) LD="mpif90 -o" \
CPP=/lib/cpp CPFLAGS="-D$(STRESS) -DPENTIUM -DMPI -P -traditional -I/usr/local/encap/mpich-125-2-intel/include -D'POINTER=integar'" \
FC=mpif90 FFLAGS="-c -fast -arch ev67 -tune ev67" CC=ccc \
LDFLAGS="-fast -arch ev67 -tune ev67 -L/usr/local/pgi/linux86/5.1/lib -lfmpi -lmpi -lblas" \
CFLAGS="-O -Ae" \
EX=$(EX) BINROOT=$(BINROOT) $(TYPE)

有个问题,我没有找到 libcxml.a 不知道 LDLIBS 干什么用,还有,为什么有的选项有的有的没有呢,比如什么 CFLAGS, CPP之类的。。。。
 楼主| 发表于 2004-9-3 22:27:01 | 显示全部楼层
出错

make LD="mpif90 -o" LDFLAGS="-fast -arch ev67 -tune ev67 -L/usr/local/pgi/linux86/5.1/lib -lfmpi -lmpi -lblas" FC=mpif90 FFLAGS="-c -fast -arch ev67 -tune ev67" CC=ccc \
CPP=/lib/cpp CPFLAGS="-DSTRESS -DMPI -P -traditional -I/usr/local/encap/mpich-125-2-intel/include -D'POINTER=integer'" \
CFLAGS=" -O -Ae " \
EX=DLPOLY.Y BINROOT=../execute master
make[1]: Entering directory `/home/users/lrz/dl_poly_3.01/source'
c -fast -arch ev67 -tune ev67 fft_module.f90
/lib/cpp -DSTRESS -DMPI -P -traditional -I/usr/local/encap/mpich-125-2-intel/include -D'POINTER=integer' timeperiods.f > timeperiods.i
sed '/^#/D' < timeperiods.i > timeperiods.tmp.f
mpif90 -c -fast -arch ev67 -tune ev67 timeperiods.tmp.f
make[1]: Leaving directory `/home/users/lrz/dl_poly_3.01/source'

再换一个试试
 楼主| 发表于 2004-9-3 22:48:13 | 显示全部楼层
改成如下:

RD-Linux:
        $(MAKE) LD="ifort -o" \
        CPFLAGS="-D$(STRESS) -DMPI -P -traditional -I/usr/local/encap/mpich-125-2-intel/include -D'POINTER=integer'" \
        FC=ifort FFLAGS="-c -O3 -w95 -w" \
        LDFLAGS="-Vaxlib -static -L/usr/local/pgi/linux86/5.1/lib -lfmpi -lmpi -lblas" \
        EX=$(EX) BINROOT=$(BINROOT) $(TYPE)


还是出错

make LD="ifort -o" \
CPFLAGS="-DSTRESS -DMPI -P -traditional -I/usr/local/encap/mpich-125-2-intel/include -D'POINTER=integer'" \
FC=ifort FFLAGS="-c -O3 -w95 -w" \
LDFLAGS="-Vaxlib -static -L/usr/local/pgi/linux86/5.1/lib -lfmpi -lmpi -lblas" \
EX=DLPOLY.Y BINROOT=../execute master
make[1]: Entering directory `/home/users/lrz/dl_poly_3.01/source'
c -O3 -w95 -w fft_module.f90
/lib/cpp -DSTRESS -DMPI -P -traditional -I/usr/local/encap/mpich-125-2-intel/include -D'POINTER=integer' timeperiods.f > timeperiods.i
sed '/^#/D' < timeperiods.i > timeperiods.tmp.f
ifort -c -O3 -w95 -w timeperiods.tmp.f
make[1]: Leaving directory `/home/users/lrz/dl_poly_3.01/source'

看不懂什么意思嘎 :help
发表于 2004-9-4 21:04:39 | 显示全部楼层
ft,你用的是alpha的机器?现在应该很少有这个了啊。你确定是alpha的处理器?
 楼主| 发表于 2004-9-4 21:17:02 | 显示全部楼层
最初由 lucifer 发表
ft,你用的是alpha的机器?现在应该很少有这个了啊。你确定是alpha的处理器?


我想应该不是把,我用的是redhat
这是我用rpm -qi kernel-source 命令得到的结果


Name        : kernel-source                Relocations: (not relocateable)
Version     : 2.4.20                            Vendor: Red Hat, Inc.
Release     : 13.9                          Build Date: Mon 12 May 2003 05:49:20 PM BST
Install Date: Thu 22 May 2003 08:45:09 AM BST      Build Host: daffy.perf.redhat.com
Group       : Development/System            Source RPM: kernel-2.4.20-13.9.src.rpm
Size        : 170897970                        License: GPL
Signature   : DSA/SHA1, Tue 13 May 2003 11:59:23 PM BST, Key ID 219180cddb42a60e
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Summary     : The source code for the Linux kernel.
Description :
The kernel-source package contains the source code files for the Linux
kernel. These source files are needed to build most C programs, since
they depend on the constants defined in the source code. The source
files can also be used to build a custom kernel that is better tuned
to your particular hardware.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表