I'm using an extension to Python (2.7.2) written in Fortran (gfortran 4.4.7) compiled via f2py (Ver. 2).

I can profile the Python part with cProfile, but the result does not give any information about the Fortran functions. Instead the time is attributed to the Python function calling the Fortran function.

I have enabled the "-pg -O" flags for all Fortran objects I build, as well as in the f2py call creating the shared object via: f2py --opt="-pg -O" ...

Any hint on how to get the Fortran informations too is highly appreciated.

If anyone uses a similar set-up, with a different profiler, I'd also be interested.

有帮助吗?

解决方案 2

A Fortran function call appears as:

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

I know, you can't identify which module is being called but at least this gives you an idea.

Another way is wrapping it into a Python function and then see timing for the Python function.

其他提示

Have a look at the python extension profiler yep.

This workflow seems to work pretty well :

    1. Use callgrind to profile your code (this generates a file like callgrind.out.27237) :

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

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

dot -Tjpg callgrind.dot -o callgrind.jpg

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top