2009-04-08 9 views
6

में बेहतर प्रोफाइलिंग ग्रैन्युलरिटी कैसे प्राप्त करें I CPU प्रोफाइलिंग के लिए Google के perftools (http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html) का उपयोग कर रहा हूं --- यह एक अद्भुत टूल है जिसने मुझे CPU-time सुधारों का एक बड़ा सौदा करने में मदद की है मेरा आवेदन।सी ++ प्रोफाइलिंग/ऑप्टिमाइज़ेशन: एक अनुकूलित फ़ंक्शन

दुर्भाग्यवश, मुझे इस बिंदु पर पहुंच गया है कि कोड अभी भी धीमा है, और जब g ++ के -O3 अनुकूलन स्तर का उपयोग करके संकलित किया जाता है, तो मुझे पता है कि एक विशिष्ट कार्य धीमा है, लेकिन इसके कौन से पहलू धीमे नहीं हैं ।

यदि मैं -ओ 3 ध्वज हटा देता हूं, तो प्रोग्राम के अनपढ़ किए गए भाग इस फ़ंक्शन से आगे निकलते हैं, और मुझे धीमे कार्य के वास्तविक हिस्सों में बहुत स्पष्टता नहीं मिलती है। अगर मैं -ओ 3 ध्वज छोड़ देता हूं, तो फ़ंक्शन के धीमे भाग रेखांकित हैं, और मैं यह निर्धारित नहीं कर सकता कि फ़ंक्शन के कौन से हिस्से धीमे हैं।

कोई सुझाव? आपकी सहायताके लिए धन्यवाद! दिनचर्या आप विभिन्न बिंदुओं बयान जो वर्तमान समय (या cputime) को मापने पर आकलन करना चाहते हैं में

सम्मिलित:

उत्तर

5

यदि आप लिनक्स पर हैं, तो oprofile का उपयोग करें। यदि आप विंडोज पर हैं, तो AMD के CodeAnalyst का उपयोग करें।

दोनों व्यक्तिगत स्रोत लाइनों या असेंबली निर्देशों के स्तर पर नमूना-आधारित प्रोफ़ाइल देंगे और आपको कार्यों के भीतर "हॉट स्पॉट" की पहचान करने में कोई समस्या नहीं होनी चाहिए।

+0

मैं CodeAnalyst के लिए बात नहीं कर सकता, लेकिन oprofile अद्भुत है! opannotate कमांड ने मुझे बताए अनुसार स्रोत-पंक्ति एनोटेशन दिया। धन्यवाद! – Adam

+1

CodeAnalyst oprofile के एक विशेष संस्करण पर एक जीयूआई है। आप लिनक्स में CodeAnalyst का भी उपयोग कर सकते हैं। – Carlos

6

कुछ इस तरह के लिए, मैं हमेशा यह ऐसा करने का "पुराने स्कूल" जिस तरह से उपयोग किया है। फिर बस उनके बीच अंतर मुद्रित करें या लॉग करें और आपको पता चलेगा कि कोड के प्रत्येक अनुभाग में कितना समय लगेगा। वहां से आप पता लगा सकते हैं कि अधिकतर समय क्या खा रहा है, और उस अनुभाग में ठीक समय तक पहुंचें और जब तक आपको पता न हो कि समस्या क्या है, और इसे कैसे ठीक किया जाए।

यदि फ़ंक्शन कॉल का ओवरहेड समस्या नहीं है, तो आप -fno-inline-small-functions -fno-inline-functions -fno-inline-functions-called-once -fno-inline के साथ बंद होने के लिए भी मजबूर कर सकते हैं (मुझे बिल्कुल यकीन नहीं है कि ये स्विच एक-दूसरे के साथ कैसे बातचीत करते हैं, लेकिन मुझे लगता है कि वे स्वतंत्र हैं)। फिर आप कॉल ग्राफ़ प्रोफाइल को देखने के लिए अपने सामान्य प्रोफाइलर का उपयोग कर सकते हैं और देख सकते हैं कि फ़ंक्शन कॉल कितने समय ले रहे हैं।

+0

धन्यवाद ग्रेग! अगर यह oprofile (नीचे) के लिए नहीं किया गया था, तो मुझे लगता है कि मैं आपके द्वारा सुझाए गए सटीक समय विचार के लिए चला गया होगा। – Adam

1

मैंने प्रदर्शन ट्यूनिंग करने में दशकों बिताए हैं।

लोग अपने उपकरण पसंद करते हैं, लेकिन मैं this method द्वारा कसम खाता हूं।

संबंधित मुद्दे