Matlab

2012-03-28 10 views
6

से .NET प्रदर्शन मेरे पास मैटलैब में लिखा गया एक बड़ा सिमुलेशन सूट है, लेकिन अन्य आंतरिक परियोजनाओं (साथ ही निष्पादन गति) के साथ बेहतर इंटरफेसिंग के बारे में चिंताओं के कारण मैं कुछ कार्यक्षमता को .NET पर ले जाने और ऐसी वस्तुओं को कॉल करने के बारे में सोच रहा हूं Matlab के भीतर से। से Matlab के भीतर .NET ऑब्जेक्ट्स को कॉल करने से जुड़े ओवरहेड क्या है?Matlab

मैं एक त्वरित परीक्षण विभिन्न वस्तुओं के भीतर सरल उपयोग और काम के संचालन के मैटलैब के भीतर से अपने दम पर भाग गया संक्षिप्त अध्ययन:

यहाँ एक अच्छा discussion on Matlab OO उस के बारे में नेट

संपादित बात नहीं करता है जिसमें औपचारिक मैटलैब ऑब्जेक्ट्स (आर2011 बी), जावा और .NET प्रत्येक 1,000,000 बार कॉलिंग शामिल हैं। विधि कॉल आंतरिक लूपिंग को संदर्भित करता है, संपत्ति/फ़ील्ड कॉल मैटलैब से सार्वजनिक क्षेत्र तक पहुंचने और मैटलैब में लूपिंग का संदर्भ लेती है। अंतिम परिणाम मुझे .NET के लिए ओवरहेड के रूप में पहेली करते हैं, जावा से बहुत अधिक है लेकिन वास्तविक रन-टाइम लगभग आधा है। क्या हो रहा है?

 
    Access(s) Assign(s) Type of object/call 
    --- MATLAB --- 
    0.003361 0.004268 'myObj.field' 
    0.003403 0.004263 'myStruct.field' 
    0.003376 0.003392 'myVar' 
    0.152629 0.303579 'myHandleObj.field' 
    25.79159 -   'TestConstant.const' 
    0.003384 -   'myTestConstant.const' (instance) 
    0.006794 0.008689 'TestObj.methods' 
    0.157509 0.303357 'TestHandleObj.methods' 

    --- NON-MATLAB --- 
    10.70006 16.42527 'JavaObj fields' 
    0.005063 0.005441 'JavaObj methods' 
    43.49988 43.96159 'NetObj fields' 
    0.002194 0.002306 'NetObj methods' 
+3

सभी प्रश्नों के उत्तर आप इस आप सोच 'हम्म, वहाँ तय करने का कोई रास्ता नहीं है छोड़ दिया हो जाएगा करने के लिए मिल के अंत में, तर्क से अकेले, कितना भूमि के ऊपर मैटलैब के भीतर से नेट वस्तुओं बुला साथ जुड़ा हुआ है, मैं हूँ इसे अपने सिस्टम पर अपने आवेदन के लिए मापना है। आप अब ओवरहेड को मापना शुरू कर सकते हैं। –

+0

मैं वास्तव में एक संक्षिप्त अध्ययन मैं साझा कर सकते हैं कर किया था, लेकिन मैं कम से कम 100 प्रतिनिधि है, इसलिए मैं अभी तक अपने ही सवाल का जवाब नहीं दे सकते। xP –

+0

मैं अपने डेटा देखने के लिए उत्सुक, आप अपने प्रश्न संपादित नहीं कर सकते इसे शामिल करने की? चर्चा में कुछ डेटा इंजेक्शन के लिए –

उत्तर

0

एक चल रहा एप्लिकेशन जीडी I/GD I + उपकरण का उपयोग करके डेटा को पुन: गणना और पुन: पेश करने के लिए संसाधनों का उपभोग करता है। दोनों परिचालन एक-दूसरे से जुड़े नहीं हैं। पुनर्मूल्यांकन का अर्थ है वर्गीकरण को छोड़कर सॉर्टिंग, फ़िल्टरिंग, ग्रुपिंग और अन्य सभी परिचालन।

2

मैटलैब में .NET विधियों के साथ काम करते समय एक महत्वपूर्ण ओवरहेड है।

v = zeros(10000,1); 
for i=1:3 
    rnd = System.Random(); 
    tic; for j=1:10000, v(j) = rnd.NextDouble(); end; toc; 

    dt = System.DateTime(2014,1,28,0,0,0); 
    tic; for j=1:10000, dt = dt.AddSeconds(1); end; toc; 
end 

यह मेरा पीसी एप्लिकेशन पर मैटलैब में लेता है:

मैं एक छोटे से (8.0.0.783 (R2012b)) Matlab में परीक्षण किया। पहले लूप के लिए 0.5 सेकंड और दूसरे लूप के लिए 1 सेकंड। शुद्ध .NET कोड में 0.00015 और 0.0002 सेकंड लगते हैं। तो मैटलैब में .NET ऑब्जेक्ट विधि को कॉल करते समय ओवरहेड .NET ऑब्जेक्ट और विधि पर निर्भर करता है।

अधिक जटिल .NET ऑब्जेक्ट विधियों के लिए, ओवरहेड और भी खराब हो सकता है। मैं एक विशेष वैज्ञानिक डेटा प्रारूप में फ़ाइलों तक पहुंचने के लिए .NET API के लिए ज़िम्मेदार हूं।

यह .NET API का उपयोग मैटलैब के भीतर से किया जा सकता है। बदतर मामले में आप प्रत्येक बार एक .NET रीड विधि (टाइम-सीरीज़ फाइल) को कॉल करते समय केवल एक डबल या फ्लोट वैल्यू पढ़ते हैं: हर बार कई वस्तुओं के लिए एक मान (डबल या फ्लोट) होता है)।

ऐसी फ़ाइल पढ़ने के लिए एक स्क्रिप्ट से पता चलता है कि मेरे लैपटॉप पर मैटलैब 1.000 कॉल से कम से कम 1.000 कॉल कर सकता है।

मजाकिया बात यह है कि अगर मैं एक ही कोड को मैटलैब फ़ंक्शन में डालता हूं (मूल रूप से फ़ंक्शन read_file() को स्क्रिप्ट में पहली पंक्ति के रूप में रखता है), मैटलैब प्रति सेकंड 6.500 .NET कॉल करता है। तो एक फ़ंक्शन के अंदर, जब मैटलैब उन .NET विधियों को कॉल करने की बात आती है, तो स्क्रिप्ट के अंदर से 8 गुना तेज होता है। यह उपरोक्त परीक्षण उदाहरण के साथ पुन: उत्पन्न नहीं है।

नीचे की रेखा यह है कि Matlab के भीतर से .NET विधि को कॉल करने में एक महत्वपूर्ण ओवरहेड है। "चैट" के बजाय .NET api "chunky" बनाना महत्वपूर्ण है।

हमने उपयोगिता में "चंकी सहायक" विधि का एक सेट बनाकर हमारे मुद्दों को हल किया है .NET dll, जो सभी पढ़ता है, एक बड़े मैट्रिक्स में डेटा एकत्र करता है, और मैटलिक्स को एक कॉल में मैटलिक्स देता है, मूल रूप से Matlab-.NET सीमा पर गतिविधि को कम करना।

अंतर्निहित।जब नेट मैटबैब के भीतर से चलाया जाता है तो नेट .NET एप्लिकेशन के भीतर से नेट कोड को तेज़ लगता है।