我使用f2py
将我的python代码的性能关键部分卸载到fortran。我有两个fortran编译器,gfortran
和ifort
。由于我运行的代码将在intel处理器上,ifort
通常更快。但对于我的代码中最关键的部分,我观察到相反的情况,gfortran
更快40%!在检查实际命令行ifort
之后,我注意到f2py
将-fp-model strict
附加到命令行,无论我在FFLAGS
环境变量中指定了什么。我怀疑这是导致ifort
缓慢的原因。
有没有办法让f2py
停止执行此浮点模型?我已经尝试将-fp-model fast
添加到FFLAGS
和f2py
的{{1}}参数,但是当它们出现在最后的命令行中时,它们会这样做在严格的旗帜之前,因此被覆盖。虽然我很欣赏对NaN等的支持,但是不值得减速40%。
这是我的--f90flags
命令行:
f2py
以下是根据FFLAGS="-openmp -Ofast -fPIC" f2py --fcompiler=intelem -c -m pmat_core_32 pmat_core_32.f90 -liomp5
输出实际传递给ifort
的标志:
f2py
答案 0 :(得分:2)
标志-xhost -openmp -fp-model strict
来自
def get_flags_opt(self):
return ['-xhost -openmp -fp-model strict']
在文件site-packages/numpy/distutils/fcompiler/intel.py
中,用于调用ifort的类。
您有两种方法可以修改这些标志的行为:
f2py
标志调用--noopt
来禁止这些标记f2py
调用--opt='blah'
来覆盖这些标记你可以获得你想要的旗帜:
FFLAGS="-fPIC" f2py --fcompiler=intelem --opt='-xhost -0fast -openmp' -c -m pmat_core_32 pmat_core_32.f90 -liomp5