2013-05-14 89 views
7

我在使用f2py(Ver.2)编译的Fortran(gfortran 4.4.7)中编写的扩展名为Python(2.7.2)。通过f2py Fortran扩展到Python:如何配置文件?

我可以使用cProfile来剖析Python部分,但结果并不提供有关Fortran函数的任何信息。相反,时间归因于调用Fortran函数的Python函数。

我已经启用了“-pg O”标志为我打造,以及在f2py呼叫通过创建共享对象的所有的Fortran对象:f2py --opt="-pg -O" ...

如何得到任何提示Fortran信息也非常感谢。

如果有人使用类似的设置,使用不同的分析器,我也会感兴趣。

+0

FWIW,因为这个原因,我停止使用f2py ......很难进入Fortran代码,看看发生了什么。问题在于Fortran代码被C代码包装,进一步混淆了这种情况。 – SethMMorton 2013-05-14 18:23:59

+0

也许你应该试试pythonic方法:将测试例程放在Python模块的'if __name __ =='__ main __“:'部分是一个好习惯。所以我建议编写一个单独的Fortran程序来分别描述这个部分。 – Stefan 2013-05-15 06:39:10

+0

Fortran函数调用显示为':84()'。确实,你无法确定哪个模块被调用,但它给了你一个想法。另一种方法是将其封装到Python函数中,然后查看Python函数的时间。 – ilciavo 2015-06-23 16:42:50

回答

1

的Fortran函数调用显示为:

<ipython-input-51-f4bf36c6a947>:84(<module>). 

我知道,你不能确定被称为该模块,但至少这给你的想法。

另一种方式是将其封装到Python函数中,然后查看Python函数的计时。

1

看看python扩展profiler yep

+0

该手册说使用'ppref'来读取'file.prof'。你能简单解释一下怎么做吗? – ilciavo 2015-06-23 16:46:14

+0

我怀疑'pperf'这个名字是一个错字。它可能会说'pprof'(来自Google的[perftools](http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html)) – 2015-06-24 18:47:45

+0

yep依赖于google-perftools,它有64位的问题系统。从它的文档:“在64位系统上的glibc内置堆栈解卷器在perftools库中存在一些问题”。出于这个原因,我无法使用它。 – Florian 2017-07-10 09:10:25

0

这个工作流程似乎工作得很好:

    1. 使用callgrind分析代码(这会产生像callgrind.out.27237文件):

valgrind --tool = callgrind python my_python_script_calling_f2py_functions.py arg1 arg2

gprof2dot -f callgrind callgrind.out.27237> callgrind.dot

点-Tjpg callgrind.dot -o callgrind。jpg