example - Fortran extensión a Python a través de f2py: ¿Cómo perfil?
python 3 cprofile (3)
Estoy usando una extensión para Python (2.7.2) escrita en Fortran (gfortran 4.4.7) compilada a través de f2py (Ver. 2).
Puedo perfilar la parte de Python con cProfile
, pero el resultado no proporciona ninguna información sobre las funciones de Fortran. En cambio, el tiempo se atribuye a la función de Python que llama a la función Fortran.
He habilitado los indicadores "-pg -O" para todos los objetos Fortran que construyo, así como en la llamada f2py creando el objeto compartido a través de: f2py --opt="-pg -O"
...
Cualquier sugerencia sobre cómo obtener la información Fortran también es muy apreciada.
Si alguien utiliza una configuración similar, con un perfilador diferente, también me interesaría.
Eche un vistazo al perfil de extensión de python sí .
Una llamada a la función Fortran aparece como:
<ipython-input-51-f4bf36c6a947>:84(<module>).
Lo sé, no puedes identificar qué módulo se está llamando, pero al menos esto te da una idea.
Otra forma es envolviéndolo en una función de Python y luego ver el tiempo para la función de Python.
Este flujo de trabajo parece funcionar bastante bien:
- Usa callgrind para perfilar tu código (esto genera un archivo como callgrind.out.27237):
valgrind --tool = callgrind python my_python_script_calling_f2py_functions.py arg1 arg2
- Convierta a un archivo .dot (si es necesario, puede instalar gprof2dot con: "pip install git + https://github.com/jrfonseca/gprof2dot ")
gprof2dot -f callgrind callgrind.out.27237> callgrind.dot
- Crea un gráfico con graphviz (mira esta pregunta de Interpretando datos callgrind ):
dot -Tjpg callgrind.dot -o callgrind.jpg