मेरे पास कुछ मैटलैब कोड हैं जिन्हें तेज करने की आवश्यकता है। प्रोफाइलिंग के माध्यम से, मैंने निष्पादन को धीमा करने में अपराधी के रूप में एक विशेष कार्य की पहचान की है। इस फ़ंक्शन को लूप के भीतर सैकड़ों बार बुलाया जाता है।मैटलैब: क्या एक ही मैप फ़ंक्शन को बार-बार लूप से कॉल करना बहुत अधिक ओवरहेड होता है?
मेरा पहला विचार यह कार्य करने के लिए फ़ंक्शन को मैक्स (मैटलैब कोडर का उपयोग करके) में परिवर्तित करना था। हालांकि, सामान्य प्रोग्रामिंग भावना मुझे बताती है कि मैटलैब और मैक्स कोड के बीच इंटरफ़ेस कुछ ओवरहेड का कारण बन जाएगा, जिसका मतलब है कि इस मैक्स फ़ंक्शन को हजारों बार बुलाया जाना अच्छा विचार नहीं हो सकता है। क्या ये सही है? या मैटलैब कुछ जादू करता है जब यह वही मैक्स को ओवरहेड को हटाने के लिए बार-बार कहा जाता है?
अगर वहाँ महत्वपूर्ण ओवरहेड है, मैं इतना के रूप में कार्य ही है और तो इस बात का एक MEX बनाने के लिए लूप जोड़ने के लिए कोड के पुनर्गठन के बारे में सोच रहा हूँ। ऐसा करने से पहले, मैं इस पर खर्च किए गए समय को उचित ठहराने के लिए अपनी धारणा को मान्य करना चाहता हूं।
अद्यतन:
मैं @ angainor के सुझाव की कोशिश की, और निम्न कोड के साथ बनाया donothing.m:
function nothing = donothing(dummy) %#codegen
nothing = dummy;
end
फिर, मैं एक MEX समारोह इस से donothing_mex के रूप में बनाया है, और निम्नलिखित कोड की कोशिश की :
tic;
for i=1:1000000
donothing_mex(5);
end
toc;
परिणाम यह था कि समारोह में दस लाख कॉल लगभग 9 सेकंड लग गए। यह हमारे उद्देश्यों के लिए एक महत्वपूर्ण ओवरहेड नहीं है, इसलिए अब मुझे लगता है कि मैं अकेले बुलाए गए फ़ंक्शन को मैक्स में बदल दूंगा। हालांकि, एक लूप से फ़ंक्शन को कॉल करना जो दस लाख बार निष्पादित करता है, यह पीछे की ओर एक सुंदर बेवकूफ विचार प्रतीत होता है, क्योंकि यह प्रदर्शन महत्वपूर्ण कोड है, इसलिए लूप को मैक्स फ़ंक्शन में ले जाना अभी भी पुस्तकों में है, लेकिन बहुत कम प्राथमिकता के साथ।
निश्चित रूप से लूप को कोड पर ले जाएं। इसे मैक्स कोड की केवल 2 या 3 अतिरिक्त लाइनों की आवश्यकता होनी चाहिए और आपको 9 से 9 सेकंड्स बचाएंगे। – twerdster
@ एंजैनॉर के उत्तर पर आपकी टिप्पणियों के आधार पर, आपके द्वारा उठाए जा रहे दृष्टिकोण में [XY समस्या] का अत्याचार है (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem), उदाहरण के लिए, एमएक्स जिसे आप एक प्रदर्शन समस्या हल करने के लिए बनाना चाहते हैं * हो सकता है * मैटलैब में बस एक तेज़ समाधान हो सकता है, सिर्फ एक जिसे आपने पहले नहीं सोचा था। क्या आप शायद उस लूप में जो गणना करना चाहते हैं उसका सार पोस्ट कर सकते हैं? –
@RodyOldenhuis यह भी एक अच्छा मुद्दा है। [समयपूर्व अनुकूलन सभी बुराइयों की जड़ है] (http://shreevatsa.wordpress.com/2008/05/16/premature-optimization-is-the-root-of-all-evil/);) – angainor