प्रोफाइल करने के लिए कैसे करें मैं अक्सर अपने cython
कोड में बाधाओं को खोजने के लिए संघर्ष करता हूं। मैं cython
फ़ंक्शन लाइन-बाय-लाइन कैसे प्रोफाइल कर सकता हूं?साइथन फ़ंक्शन लाइन-बाय-लाइन
उत्तर
रॉबर्ट ब्रैडशॉ ने मुझे रॉबर्ट केर्न के line_profiler
उपकरण cdef
कार्यों के लिए काम करने में मदद करने में मदद की और मैंने सोचा कि मैं परिणाम stackoverflow
पर साझा करूंगा।
संक्षेप में, नियमित .pyx
फ़ाइल सेट करें और स्क्रिप्ट बनाएं और cythonize
पर अपनी कॉल से पहले निम्नलिखित जोड़ें। http://nbviewer.ipython.org/gist/tillahoffmann/296501acea231cbdf5e7
बहुत उपयोगी, धन्यवाद। एक विवरण: मैंने पाया है कि line_profiler का कहना है कि प्रोफाइल प्रोफाइल मूल .pyx फ़ाइल है। मुझे पूरा यकीन है कि मेरे पास .pyd पर इंगित सबकुछ है, इसलिए मुझे संदेह है कि प्रोफाइलर सिर्फ प्रदर्शन के लिए .pyd से सामग्री को पढ़ता है, जबकि अभी भी संकलित संस्करण से वास्तविक समय प्राप्त होता है। – Giswok
संदर्भ के लिए, यहां [लाइन ट्रेसिंग पर साइथन डॉक्स] हैं (http://docs.cython.org/src/tutorial/profiling_tutorial.html#enabling-line-tracing)। –
यहां एक और पूर्ण गैर-iPython उदाहरण भी है: https://github.com/cython/cython/blob/master/tests/run/line_profile_test.srctree – deef
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, यह एक वेबपृष्ठ बनाता है जिसमें मुख्य बाधाओं को हाइलाइट किया जाता है। उदाहरण के लिए, जब मैं कुछ चर घोषित करने के लिए भूल जाते हैं:
सही ढंग से उन्हें (cdef double dudz, dvdz
) घोषित करने के बाद:
सच है, आपके चर टाइप नहीं करने से आपका कोड धीमा हो जाएगा। लेकिन '-ए' आपको वास्तविक रनटाइम के बारे में कोई जानकारी नहीं देगा, लेकिन केवल तभी आप 'पायथन' कॉल कर रहे हैं या नहीं। –
लेकिन मेरे मामले में, पाइथन को साइथन कोड पर पोर्ट करने में एक चर घोषित करना भूलना जैसी चीजें आम तौर पर कोड को धीमा कर देती हैं, और यह उन चीजों के परीक्षण के लिए एक त्वरित और सरल तरीका है। यही कारण है कि मैंने इसे "_not_ _really_ _profiling_" कहा; यह सिर्फ एक साधारण पहला कोड चेक/विश्लेषण है। – Bart
- 1. साइथन
- 2. साइथन
- 3. साइथन
- 4. साइथन
- 5. साइथन
- 6. साइथन
- 7. साइथन
- 8. साइथन: बाहरी सी फ़ाइल से कॉल फ़ंक्शन
- 9. साइथन
- 10. साइथन
- 11. साइथन
- 12. साइथन
- 13. साइथन
- 14. साइथन
- 15. साइथन
- 16. साइथन
- 17. साइथन
- 18. साइथन
- 19. साइथन
- 20. साइथन
- 21. साइथन वेक्टर ऑपरेशंस
- 22. साइथन और न्यूमपी
- 23. साइथन एक्सटेंशन
- 24. साइथन शुद्धता
- 25. पाइथन/साइथन
- 26. साइथन मॉड्यूल
- 27. पिप साइथन
- 28. मैं साइथन में सी फ़ंक्शन में पॉइंटर कैसे पास करूं?
- 29. Ipython में साइथन: त्रुटि: सेल जादू `%% साइथन 'नहीं मिला
- 30. पाइथन से साइथन
cython डिबगर आप इसे रोकने के लिए अनुमति देता है? फिर आप [* यह *] कर सकते हैं (http://stackoverflow.com/a/378024/23771)। –