2012-04-12 18 views
7

MATLAB में parfor के बारे में एक सरल सवाल है। मैं लूप के लिए नियमित और नियमित रूप से बदलने के लिए अपने कार्यक्रम में एक ध्वज सेट करना चाहता हूं। असल में, मुझे इस कार्यक्षमता की आवश्यकता है ताकि मेरे कोड के कुछ हिस्सों को "डीबग" मोड में ग्राफिक्स अपडेट कर सकें, फिर जब ध्वज बंद हो जाए, तो गति के लिए ग्राफिक्स अपडेट के साथ पैराफोर्स का उपयोग करें।क्या मैटलैब PARFOR लूप प्रोग्रामेटिक रूप से चालू/बंद हो सकता है?

तो, मैं कुछ सरल की तलाश में हूँ यह कार्यक्षमता है कि:

if (flag) 
    for i = 1:n 
else 
    parfor i = 1:n 
end 

    % Do loop tasks. 

    end 

किसी भी मदद की बहुत सराहना की जाएगी! धन्यवाद!

+0

के लिए वैकल्पिक तर्क का उपयोग करें? – Mikhail

+0

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

उत्तर

5

नहीं, यह संभव नहीं है। हालांकि, अगर आप एक अलग समारोह में पाश शरीर लपेट कर सकते हैं, या तो आप एक parfor या एक for पाश कॉल शरीर, यानी

if (flag) 
    parfor i=1:n 
     out(i) = loopBody(i) 
    end 
else 
    for i=1:n 
     out(i) = loopBody(i) 
    end 
end 

वैकल्पिक रूप से हो सकता है, ताकि आप आप कोड संपादित कर सकते हैं या तो parfor या for आपके लूप के सामने, जो मैं अक्सर कर रहा हूं।

+2

यदि यह 1 अप्रैल था, तो मैं टिप्पणी करूंगा कि "मैं चाहता हूं कि MATLAB की परिभाषा' # परिभाषित हो! तो हम 'लूप पैराफोर्ड' परिभाषित कर सकते हैं या '# परिभाषित कर सकते हैं 'और हमारे पास यह समस्या नहीं होगी!" –

+2

@ ली-औंगवाईप: हाँ, यह वास्तव में सुविधाजनक होगा। डीबगिंग के लिए 'parfor' बेकार है। मैं उम्मीद करता हूं कि आर2015 ए के आसपास, समस्या ठीक हो गई है, हालांकि। – Jonas

4

जब आप matlabpool close द्वारा पूल बंद करते हैं, parforfor की तरह व्यवहार करता है और सभी ग्राफिक्स हैंडलिंग की अनुमति देता है। इसलिए आपको डिबगिंग के दौरान पूल बंद करने की आवश्यकता है।

+0

'parfor'' के लिए 'व्यवहार नहीं करता है, भले ही श्रमिकों का कोई पूल न हो। लूप पुनरावृत्तियों के क्रम की गारंटी नहीं है और उन्हें किसी भी क्रम में निष्पादित किया जा सकता है। आम तौर पर, यह सुनिश्चित करने के लिए कि आप सामान्य क्रम में उन पर भरोसा नहीं करते हैं, वे वास्तव में * रिवर्स * ऑर्डर में निष्पादित होते हैं। –

+1

ध्यान दें कि यह अब सच नहीं है - MATLAB और PCT * के हाल के संस्करण स्वचालित रूप से आपके लिए पूल खोल सकते हैं, इसलिए आपको मेरे उत्तर के अनुसार 'parfor' पर श्रमिक तर्क की वैकल्पिक संख्या का उपयोग करने की आवश्यकता हो सकती है। – Edric

5

एक और विकल्प - आरक्षित करता है 1 का एक पूल आकार आपकी समस्या का समाधान PARFOR

if flag 
    arg = Inf; 
else 
    arg = 0; 
end 
parfor (idx = 1:n, arg) 
    ... 
end