将ifort与f2py

时间:2015-06-11 13:57:05

标签: python numpy optimization fortran f2py

我使用f2py将我的python代码的性能关键部分卸载到fortran。我有两个fortran编译器,gfortranifort。由于我运行的代码将在intel处理器上,ifort通常更快。但对于我的代码中最关键的部分,我观察到相反的情况,gfortran更快40%!在检查实际命令行ifort之后,我注意到f2py-fp-model strict附加到命令行,无论我在FFLAGS环境变量中指定了什么。我怀疑这是导致ifort缓慢的原因。

有没有办法让f2py停止执行此浮点模型?我已经尝试将-fp-model fast添加到FFLAGSf2py的{​​{1}}参数,但是当它们出现在最后的命令行中时,它们会这样做在严格的旗帜之前,因此被覆盖。虽然我很欣赏对NaN等的支持,但是不值得减速40%。

这是我的--f90flags命令行:

f2py

以下是根据FFLAGS="-openmp -Ofast -fPIC" f2py --fcompiler=intelem -c -m pmat_core_32 pmat_core_32.f90 -liomp5 输出实际传递给ifort的标志:

f2py

1 个答案:

答案 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