2009-08-14 12 views
10

मैंने शानदार परिणामों के साथ चीजों को गति देने के लिए एक मैक्स-फ़ंक्शन के रूप में सी ++ में एक मैटलैब प्रोग्राम को फिर से लिखा है। यह ऑप्टिमाइज़ेशन निर्णय बहुत ही अच्छा विचार था, बिना किसी थ्रेडिंग के 20 कारक तक। यह अभी भी मुझे उत्सुकता है कि मैक्स-फ़ंक्शन क्या समय व्यतीत कर रहा था और संभावित बाधाओं की पहचान करना चाहता था।एक मैक्स-फ़ंक्शन प्रोफाइलिंग

मै मैक्स-फ़ंक्शन प्रोफाइल करने का एक तरीका ढूंढ रहा हूं। Matlab प्रोफाइलर का अधिक उपयोग नहीं है, और अन्य प्रोफाइलर्स जिन्हें मैंने डाउनलोड किया है (दोनों स्वतंत्र और परीक्षण) सभी निष्पादन योग्य चलाने के लिए चाहते हैं। मैं कोई मैक्स गुरु नहीं हूं, लेकिन जहां तक ​​मुझे पता चला है कि मैक्स चलाने का एकमात्र तरीका मैटलैब के भीतर से है। मैक्स-फ़ंक्शन को एक डीएल में संकलित किया गया है, लेकिन इसे .mex64 कहा जाता है। तो यह समस्या एक डीएल प्रोफाइलिंग के समान होना चाहिए। सी ++ मैक्स-फ़ंक्शन लिखने के लिए मैंने एक एकल उपयोगकर्ता VS2005 (यानी, टीम संस्करण नहीं) का उपयोग किया, और x64-platform पर चल रहा हूं।

क्या किसी को भी मैक्स-फ़ंक्शन प्रोफ़ाइल करने का एक अच्छा तरीका पता है? मैटलैब के भीतर से शुरू होने पर मुझे किस टूल का उपयोग करना चाहिए और मैं इसका उपयोग कैसे करूं? या सी ++ - कोड प्रोफाइल करने का कोई अन्य तरीका है?

उत्तर

8

एकमात्र तरीका यह है कि मैंने ऐसा करने में कामयाब रहा है, काम को करने और एक अलग रैपर (मैक्सफंक्शन के बजाए) लिखना है जो परीक्षण डेटा के साथ .mat फ़ाइलों को लोड करता है और एक स्टैंडअलोन निष्पादन योग्य के रूप में चलता है। इसके बाद इसका उपयोग करके प्रोफाइल किया जा सकता है उदा। gprof

+0

टिप के लिए धन्यवाद। यह एक अच्छा दृष्टिकोण है। मेरी एकमात्र समस्या यह है कि मैक्सफंक्शन में इनपुट बड़े matlab structs का एक बड़ा समूह है। रैपर में इन सभी चीजों को चलाने में सक्षम होने के लिए मुझे कोड लिखने की ज़रूरत है, जो मुझे इस पर जाने और किसी भी विचार के बिना इसे रोकने से रोकता है। – AnnaR

+1

का पालन नहीं करते हैं। क्या आप अपने सभी structs matlab के अंदर नहीं बना सकते हैं और उन्हें एक .mat फ़ाइल में सहेज सकते हैं? (यानी जो कुछ भी पहले आपके मैक्स फ़ंक्शन में इनपुट तर्क था, अब एक .mat फ़ाइल में सहेजता है और डिस्क से नए रैपर द्वारा पढ़ा जाता है। – second

+0

अपने मैक्स फ़ाइलों को सीधे valgrind का उपयोग करना संभव है। [this] (http : //stackoverflow.com/questions/11220250/how-do-i-profile-a-mex-function-in-matlab/12405131#12405131) उत्तर। – angainor

3

क्या वीसी आईडीई के तहत पूरी चीज को चलाने का कोई तरीका है। जैसा कि आप "स्टार्टअप ऐप के रूप में मैटलैब का उपयोग करके डीएलएल Foo.dll डीबग" कह सकते हैं।

फिर, यदि फंक्शन बार आप Foo.dll में उपयोग कर रहे हैं < 1 सेकंड में चलाता है, तो सुनिश्चित करें कि मैटलैब इसे कई बार कॉल करता है, या इसे कई बार कॉल करने के लिए डीएलएल में एक रैपर फ़ंक्शन जोड़ता है।

यदि आप उस बिंदु पर जा सकते हैं, तो आप manual call stack sampling technique का उपयोग कर सकते हैं, जो वास्तव में लोकप्रिय होने या किसी उपकरण की स्थापना की आवश्यकता के बावजूद काम करता है।

1

पहले से सुझाए गए जुर्माना के अलावा दो संभावित समाधान।

  1. एक स्क्रिप्ट लिखना संभव है जो डेटा लोड करता है, आपके मैक्स फ़ंक्शन चलाता है, और फिर बाहर निकलता है। इसके बाद आप प्रोफाइलर को उस स्क्रिप्ट के साथ मैटलैब निष्पादन योग्य कह सकते हैं। जब मैं अपने कुडा मैक्स कार्यों का प्रोफाइल कर रहा था, तो यह मेरे लिए एनवीडिया के विजुअल प्रोफाइलर के साथ काम करता था।

  2. यदि आपने विजुअल स्टूडियो में मैक्स फ़ंक्शन बनाया है, तो आपको मैटलैब प्रक्रिया से संलग्न करने में सक्षम होना चाहिए और फिर डिबगिंग या प्रोफाइलिंग के लिए फ़ंक्शन चलाएं।

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