FDS ifort - eiichiromomma/CVMLAB GitHub Wiki
FDS4) ifort
(Intel製Fortran CompilerでFDSをビルドし直す。
Fortran Compilerの導入
IntelFortranCompilerを参照。
ソースの入手
http://www.fire.nist.gov/fds/のDownloadsでFDS Source Filesとして配布されている。
ビルド(Makefile使用)
展開、移動してビルド環境を設定する。
tar xf fds4_07_source.tar
cd SOURCE_4.07/
source /opt/intel/cce/9.0/bin/iccvars.sh
source /opt/intel/fce/9.0/bin/ifortvars.sh
以下の内容のMakefileを同じ場所に作成。
# Makefile for Lahey Fortran and Gnu C on RedHat Linux
FFLAGS = -O3 -i-static
CFLAGS = -O3 -Dpp_noappend
obj = fds4_icc
FCOMPL = LC_ALL=C ifort
CCOMPL = LC_ALL=C icc
.SUFFIXES:
.SUFFIXES: .c .f .o
.f.o:
$(FCOMPL) -c $(FFLAGS) $<
.c.o:
$(CCOMPL) -c $(CFLAGS) $<
OBJECTS = mods.o \
pois.o misc.o radi.o sprk.o \
dump.o read.o mass.o pres.o \
divg.o init.o \
isob.o velo.o main.o \
APPLIC: $(INLINE1) $(INLINE2) $(OBJECTS)
$(FCOMPL) $(FFLAGS) -o $(obj) $(OBJECTS)
INLINE1 = mods.f
INLINE2 = pois.f misc.f radi.f
INLINE3 = divg.f init.f dump.f sprk.f read.f mass.f pres.f velo.f
mods.o : mods.f
pois.o : pois.f $(INLINE1)
misc.o : misc.f $(INLINE1)
radi.o : radi.f $(INLINE1)
sprk.o : sprk.f $(INLINE1)
divg.o : divg.f $(INLINE1)
mass.o : mass.f $(INLINE1) $(INLINE2)
init.o : init.f $(INLINE1) $(INLINE2)
read.o : read.f $(INLINE1)
pres.o : pres.f $(INLINE1) $(INLINE2)
velo.o : velo.f $(INLINE1)
dump.o : dump.f $(INLINE1) $(INLINE2)
main.o : main.f $(INLINE1) $(INLINE2) $(INLINE3)
isob.o : isob.c
あとは
make
とするだけ。
Makefileはこちら 。
ビルド(旧)
展開、移動してビルド環境を設定する。
tar xf fds4_07_source.tar
cd SOURCE_4.07/
source /opt/intel/cce/9.0/bin/iccvars.sh
source /opt/intel/fce/9.0/bin/ifortvars.sh
いよいよコンパイル。
とりあえずmpiの方は結果が境界で反転したり怪しいので外す。
rm main_mpi.f
Fortran95はズブの素人なのだが.fファイルにmoduleとして宣言されているのをコンパイルすると.modファイルがボコボコ発生するらしい。 その.modファイルをuseでincludeするようになっており、FDSのソースは.modの依存関係が存在する。 ifort用のMakefileは存在せず、移植するのも面倒なので取り敢えず片っ端からコンパイルしてしまう。
LC_ALL=C ifort *.f -c
を3回繰り返せばmain以外のエラーは出なくなる(筈)。
続けてisob.cをコンパイル。pp_noappendを定義しておく。
LC_ALL=C icc -Dpp_noappend -c isob.c
必要なファイルは全て揃ったのでfds4_iccの完成。
LC_ALL=C ifort main.f *.o -i-static -o fds4_icc
ifortのオプションで -i-static を付けておくとstatic linkになるのでIntel Compilerの無い環境でも使える。
Intel Fortranの威力
配布されていたfds4_linux。
time ../fds4_linux < silly4.data
real 0m27.248s
user 0m27.078s
sys 0m0.168s
そして今回作成したfds4_icc
time ../fds4_icc < silly4.data
real 0m17.354s
user 0m17.001s
sys 0m0.264s
AthronX2でも目に見えて速くなった。 EM64TのXeonだと20s→10s。