2014-10-31 97 views
0

那里,使用英特尔Fortran for Linux编译多核心

编译我的Fortran程序时遇到了麻烦。我花了40多分钟在我研究所的计算机上建立这个项目。我使用以下规范来编译我的当前程序,并使用适用于Linux的英特尔Fortran编译器。任何人都会好心地让我知道如何修改我的命令,以便编译完全支持多个内核(在我的情况下是每个CPU 8个内核)?

感谢,

FC= mpiifort 
FCFLAGS = -g -O3 -openmp -xSSE4.2 -axAVX -mt_mpi -I$(MKLROOT)/include/intel64/lp64 -I$(MKLROOT)/include  
LDFLAGS = $(MKLROOT)/lib/intel64/libmkl_blas95_lp64.a \ 
     $(MKLROOT)/lib/intel64/libmkl_lapack95_lp64.a \ 
     $(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \ 
     -Wl,--start-group \ 
     $(MKLROOT)/lib/intel64/libmkl_cdft_core.a \ 
     $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \ 
     $(MKLROOT)/lib/intel64/libmkl_core.a \ 
     $(MKLROOT)/lib/intel64/libmkl_intel_thread.a \ 
     -Wl,--end-group \ 
     $(MKLROOT)/lib/intel64/libmkl_blacs_intelmpi_lp64.a \ 
     -lpthread -lm 

PROGRAM = main   
all: ${PROGRAM} 
main: universe.o model.o variable.o toolbox.o 
main.o: universe.o 
universe.o: model.o 
model.o: variable.o 
variable.o: toolbox.o 
%: %.o 
    $(FC) $(FCFLAGS) -o [email protected] $^ $(LDFLAGS) 
%.o: %.f90 
    $(FC) $(FCFLAGS) -c $< $(LDFLAGS) 
.PHONY: clean 
clean: 
    find . -maxdepth 1 -type f -name "*.txt" ! -name "_*.txt" -exec rm '{}' \; 
    rm -f *.o 
rm -f *.mod 
rm -f *~ 
rm -f *.gz 
+0

你在文档中找到了什么,你是如何尝试应用它等的...... – steabert 2014-11-01 01:47:41

回答

3

你要找的命令是make -j N,其中N是平行的数量让你想并行运行的作业。在你的情况下,与8核心,这将是8或左右。

请注意,源文件的数量以及它们之间的依赖关系也可以限制make能够并发运行的数量。在你的情况下,似乎你的目标文件之间有一个线性依赖链,不允许并发,所以你可能想把你的代码分割成更多的源文件。