2013-05-14 19 views
7

F2py (Ver. 2) ile derlenen Fortran (gfortran 4.4.7) 'da yazılan Python (2.7.2) uzantısını kullanıyorum.Fortran uzantısı, Python'dan f2py'ye: Nasıl profillenir?

Python parçasını cProfile ile profilleyebilirim, ancak sonuç Fortran işlevleri hakkında bilgi vermiyor. Bunun yerine, zaman Fortran işlevini çağıran Python işlevine atfedilir.

... f2py --opt="-pg -O" almak konusunda herhangi bir ipucu:

ben yanı sıra aracılığıyla paylaşılan nesne oluştururken f2py çağrısında inşa tüm Fortran nesneler için "dekarboksi -O" bayrakları sağladı Fortran bilgi de çok takdir edilmektedir.

Başka bir profiler ile benzer bir kurulum kullanan biri varsa, ben de ilgilenirim.

+0

FWIW, bu nedenle f2py'yi kullanmayı bıraktım ... Fortran kodunda neler olup bittiğini görmek zor. Mesele, Fortran kodunun C koduyla sarılması ve durumu daha da bulanıklaştırması. – SethMMorton

+0

Belki de pythonic yolu denemelisiniz: python modüllerinin bir parçası olan '' __name __ == '' __ main __ ': 'test rutinlerini koymak iyi bir uygulamadır. Bu yüzden bu parçayı ayrı ayrı izlemek için ayrı bir Fortran programı yazmayı öneriyorum. – Stefan

+0

Bir Fortran işlev çağrısı, : 84 () 'olarak görünür. Doğru, hangi modülün çağrıldığını tanımlayamazsınız ama size bir fikir verir. Başka bir yol onu bir Python işlevine sarmak ve Python işlevinin zamanlamasını görmek. – ilciavo

cevap

1

Bir Fortran işlev çağrısı gibi görünür:

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

Biliyorum, çağrılan hangi modül tespit edemez ama en azından bu size bir fikir verir.

Başka bir yol onu bir Python işlevine sarar ve daha sonra Python işlevinin zamanlamasını görür.

1

Python uzantı profilleyicisi yep'a bakın.

+0

El kitabında 'file.prof' dosyasını okumak için' ppref' kullanılır. Bunu nasıl yapacağınızı kısaca açıklayabilir misiniz? – ilciavo

+0

"pperf" adının bir yazım hatası olduğunu sanıyorum. Muhtemelen 'pprof' (Google'ın [perftools] 'ından (http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html) –

+0

evet, 64 bitlik bir sorunu olan google-perftools'a bağlı olacaktır. sistemleri. Dokümanından: "64 bit sistemlerde glibc yerleşik yığın-çözücü, perftools kütüphaneleri ile bazı problemlere sahiptir". Bu sebepten dolayı kullanamadım. – Florian

0

Bu iş akışı oldukça iyi iş gibi görünüyor: :

    1. Kullanım callgrind kodunuzun profilini (bu callgrind.out.27237 gibi bir dosya oluşturur)

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

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

      nokta -Tjpg callgrind.dot -o callgrind.jpg