为什么即使在串行模式下,f2py仍使用-qopenmp ifort标志进行编译?

时间:2019-01-30 17:13:05

标签: fortran openmp intel-fortran f2py

我有一个Fortran 90代码,其中某些部分实现了OpenMP。现在,要使用带有OpenMP支持的f2py来编译Fortran代码,我必须传递f90编译器标志。现在,只有在我提供OpenMP相关标志的情况下,该代码才应使用OpenMP支持进行编译,除非必须将其编译为普通的串行代码。这对于gfortran可以正常工作,但对于ifort则不能。让我们解释这一点,

如果我跑步, (gfortran串行模式)

f2py -c adt.f90 -m adt_module 
*Gives output (last few lines)*
Fortran f77 compiler: /usr/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops
Fortran f90 compiler: /usr/bin/gfortran -Wall -g -fno-second-underscore -fPIC -O3 -funroll-loops
Fortran fix compiler: /usr/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -Wall -g -fno-second-underscore -fPIC -O3 -funroll-loops

(gfortran并行模式)

f2py -c adt.f90 -m adt_module --f90flags='-fopenmp' -lgomp 
*output*
Fortran f77 compiler: /usr/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops
Fortran f90 compiler: /usr/bin/gfortran -fopenmp -fPIC -O3 -funroll-loops
Fortran fix compiler: /usr/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -fopenmp -fPIC -O3 -funroll-loops

您可以清楚地看到,在串行模式下编译期间没有-fopenmp标志,这是预期的,因为我没有传递必需的标志

现在开始使用ifort

(ifort并行模式)

f2py -c adt.f90 -m adt_module --fcompiler=intelem --f90flags='-qopenmp' -liomp5
*Output*
Fortran f77 compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FI -fPIC -fp-model strict -O1 -qopenmp 
Fortran f90 compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FR -qopenmp -fPIC -fp-model strict -O1 -qopenmp 
Fortran fix compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FI -qopenmp -fPIC -fp-model strict -O1 -qopenmp

(ifort串行模式)

f2py -c adt.f90 -m adt_module --fcompiler=intelem
*Output*
Fortran f77 compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FI -fPIC -fp-model strict -O1 -qopenmp 
Fortran f90 compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FR -fPIC -fp-model strict -O1 -qopenmp 
Fortran fix compiler: /opt/intel/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort -FI -fPIC -fp-model strict -O1 -qopenmp

现在,这是问题所在,请参见此处,使用-qopenmp标志针对串行模式进行编译,但我尚未在命令行中通过它。为什么用ifort而不用gfortran编译时会发生这种情况?而如何解决这个问题?

0 个答案:

没有答案