2015-06-11 63 views
2

我使用f2py將我的python代碼的性能關鍵部分卸載到fortran。我有兩個Fortran編譯器,gfortranifort。由於我運行的代碼將在英特爾處理器上,因此ifort通常更快。但是對於我的代碼中最關鍵的部分,我觀察到相反的情況,gfortran的速度提高了40%!在檢查實際的命令行ifort被調用後,我注意到f2py-fp-model strict附加到命令行,不管我在FFLAGS環境變量中指定了什麼。我懷疑這是緩慢的原因。使用if2和f2py禁用fp-model

有沒有辦法讓f2py停止執行這個浮點模型?我已經嘗試將-fp-model fast加到FFLAGSf2py--f90flags參數中,但是當它們出現在最後的命令行上時,它們在嚴格標誌之前這樣做,因此被覆蓋。雖然我很欣賞對NaN等的支持,但它不值得40%的放緩。

這是我f2py命令行:

FFLAGS="-openmp -Ofast -fPIC" f2py --fcompiler=intelem -c -m pmat_core_32 pmat_core_32.f90 -liomp5 

這裏是實際上傳遞給ifort標誌,根據f2py輸出:

-FI -openmp -Ofast -fPIC -xhost -openmp -fp-model strict 

回答

2

的標誌-xhost -openmp -fp-model strict來自

def get_flags_opt(self): 
    return ['-xhost -openmp -fp-model strict'] 

in t他爲調用ifort的類文件site-packages/numpy/distutils/fcompiler/intel.py

您有兩個選項來修改這些標誌的行爲:

  • 呼叫f2py--noopt標誌,來禁止這些標誌
  • 呼叫f2py--opt='blah'覆蓋這些標誌

你可以得到你想要的旗幟:

FFLAGS="-fPIC" f2py --fcompiler=intelem --opt='-xhost -0fast -openmp' -c -m pmat_core_32 pmat_core_32.f90 -liomp5