1
justou 2019-03-20 16:59:53 +08:00
从你的 @ 过来; 如果你把 fortran 源码,什么编译器, 编译参数, 性能测试代码; 以及 python 的代码全部放上来这个问题就完美了, 大家也好根据你的步骤直接试试能不能复现这个性能差距. 你这样问还是只能靠瞎猜.
我只有两点建议: 1. 保证两边用同样的 fortran 编译器, 同样的编译参数 2.用不同规模的数据去试试差距有多大. f2py 生成 wrapper 肯定是有性能损耗的, 正常情况下, 在数据量小的时候主要损耗在 wrapper 上面, 数据量大的时候性能差距应该很小. |
2
sjlinger OP @justou 不好意思,说的还是简单了,我再补偿下,Fortran 代码主要的就是上面这些了,其它的就是读文件里的数据给 lat 和 lon,已经定义变量了,其它的没有更多了,我也是怕会生成额外的计算耗时,所以不敢加多余的语句。编译器和编译代码都一样,编译器是 gfortran,Python 的代码也是读了赋给 lat 和 lon 的外就是 var=loop.test(lat,lon),剩下的就是 Fortran 函数自己去算了,但好像这个论坛上传不了文件,所以再现没大有可能。如果您愿意,咱们可以加个好友,我把数据文件发您,您在您那测一下,我肯定感激不尽。
附上个我测试 f2py 的性能数据: real-time: 49.16020 #这是 Python 调用 Fortran 函数时,我计算的函数内部运算的耗时, 如果是允许 Fortran 编译器编译的,是 13.66936 这么长时间 /-----------------------\ < F2PY performance report > \-----------------------/ Overall time spent in ... (a) wrapped (Fortran/C) functions : 49705 msec (b) f2py interface, 1 calls : 113 msec (c) call-back (Python) functions : 0 msec (d) f2py call-back interface, 0 calls : 0 msec (e) wrapped (Fortran/C) functions (actual) : 49705 msec Use -DF2PY_REPORT_ATEXIT_DISABLE to disable this message. Exit status: 0 |