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