2015-02-03 8 views
22

प्रोफाइल करने के लिए कैसे करें मैं अक्सर अपने cython कोड में बाधाओं को खोजने के लिए संघर्ष करता हूं। मैं cython फ़ंक्शन लाइन-बाय-लाइन कैसे प्रोफाइल कर सकता हूं?साइथन फ़ंक्शन लाइन-बाय-लाइन

+0

cython डिबगर आप इसे रोकने के लिए अनुमति देता है? फिर आप [* यह *] कर सकते हैं (http://stackoverflow.com/a/378024/23771)। –

उत्तर

26

रॉबर्ट ब्रैडशॉ ने मुझे रॉबर्ट केर्न के line_profiler उपकरण cdef कार्यों के लिए काम करने में मदद करने में मदद की और मैंने सोचा कि मैं परिणाम stackoverflow पर साझा करूंगा।

संक्षेप में, नियमित .pyx फ़ाइल सेट करें और स्क्रिप्ट बनाएं और cythonize पर अपनी कॉल से पहले निम्नलिखित जोड़ें। http://nbviewer.ipython.org/gist/tillahoffmann/296501acea231cbdf5e7

+0

बहुत उपयोगी, धन्यवाद। एक विवरण: मैंने पाया है कि line_profiler का कहना है कि प्रोफाइल प्रोफाइल मूल .pyx फ़ाइल है। मुझे पूरा यकीन है कि मेरे पास .pyd पर इंगित सबकुछ है, इसलिए मुझे संदेह है कि प्रोफाइलर सिर्फ प्रदर्शन के लिए .pyd से सामग्री को पढ़ता है, जबकि अभी भी संकलित संस्करण से वास्तविक समय प्राप्त होता है। – Giswok

+0

संदर्भ के लिए, यहां [लाइन ट्रेसिंग पर साइथन डॉक्स] हैं (http://docs.cython.org/src/tutorial/profiling_tutorial.html#enabling-line-tracing)। –

+0

यहां एक और पूर्ण गैर-iPython उदाहरण भी है: https://github.com/cython/cython/blob/master/tests/run/line_profile_test.srctree – deef

6
:

from Cython.Compiler.Options import directive_defaults 

directive_defaults['linetrace'] = True 
directive_defaults['binding'] = True 

इसके अलावा, आप

extensions = [ 
    Extension("test", ["test.pyx"], define_macros=[('CYTHON_TRACE', '1')]) 
] 

एक काम कर उदाहरण iPython नोटबुक में %%cython जादू का उपयोग कर यहाँ है ऐसी है कि आपके extensions सेटअप को संशोधित करके सी मैक्रो CYTHON_TRACE=1 परिभाषित करने की जरूरत

हालांकि मैं इसे वास्तव में प्रोफाइलिंग नहीं कहूंगा,चलाकर अपने साइथन कोड का विश्लेषण करने का एक और विकल्प है -a (एनोटेट) के साथ 0, यह एक वेबपृष्ठ बनाता है जिसमें मुख्य बाधाओं को हाइलाइट किया जाता है। उदाहरण के लिए, जब मैं कुछ चर घोषित करने के लिए भूल जाते हैं:

enter image description here

सही ढंग से उन्हें (cdef double dudz, dvdz) घोषित करने के बाद:

enter image description here

+4

सच है, आपके चर टाइप नहीं करने से आपका कोड धीमा हो जाएगा। लेकिन '-ए' आपको वास्तविक रनटाइम के बारे में कोई जानकारी नहीं देगा, लेकिन केवल तभी आप 'पायथन' कॉल कर रहे हैं या नहीं। –

+0

लेकिन मेरे मामले में, पाइथन को साइथन कोड पर पोर्ट करने में एक चर घोषित करना भूलना जैसी चीजें आम तौर पर कोड को धीमा कर देती हैं, और यह उन चीजों के परीक्षण के लिए एक त्वरित और सरल तरीका है। यही कारण है कि मैंने इसे "_not_ _really_ _profiling_" कहा; यह सिर्फ एक साधारण पहला कोड चेक/विश्लेषण है। – Bart