Matlab

2010-10-30 14 views
8

में समांतर प्रसंस्करण का उपयोग कैसे करें मैं एक समय श्रृंखला आधारित गणना पर काम कर रहा हूं। गणना का प्रत्येक पुनरावृत्ति स्वतंत्र है। क्या कोई भी मैटलैब में समांतर प्रसंस्करण का उपयोग करने पर कुछ टिप्स/ऑनलाइन प्राइमर्स साझा कर सकता है? वास्तविक कोड के अंदर यह कैसे निर्दिष्ट किया जा सकता है?Matlab

उत्तर

12

जब से तुम समानांतर टूलबॉक्स की पहुंच है, मेरा सुझाव है कि आप पहली बार देखना होगा कि आपने यह आसान तरीका कर सकते हैं।

असल में, बजाय

for i=1:lots 
    out(:,i)=do(something); 
end 

लिखने की आप

parfor i=1:lots 
    out(:,i)=do(something); 
end 

फिर लिखते हैं, आप matlabpool का उपयोग श्रमिकों के एक नंबर बनाने के लिए (आप के साथ अपने स्थानीय मशीन पर 8 की एक अधिकतम हो सकता है टूलबॉक्स, और रिमोट क्लस्टर पर टन यदि आपके पास एक वितरित कंप्यूटिंग सर्वर लाइसेंस भी है), और आप कोड चलाते हैं, और जब आपके पुनरावृत्तियों को 8 कोर के बजाए चलाया जाता है तो अच्छी गति लाभ दिखाई देते हैं।

हालांकि parfor मार्ग सबसे आसान है, यह सही बॉक्स से बाहर काम कर सकते हैं नहीं है, क्योंकि आप अपने अनुक्रमण गलत कर सकते हैं, या आप में mlint चेतावनी को देखो एक समस्याग्रस्त रास्ते में आदि एक सरणी को संदर्भित किया जा सकता है संपादक, प्रलेखन पढ़ें, और अच्छे पुराने परीक्षण और त्रुटि पर भरोसा करते हैं, और आपको इसे उचित रूप से तेज़ी से समझना चाहिए। यदि आपके पास घोंसले वाले लूप हैं, तो अक्सर यह सबसे अच्छा सबसे अच्छा समानांतर होता है और यह सुनिश्चित करता है कि यह कई पुनरावृत्तियों को करता है - यह केवल अच्छा डिज़ाइन नहीं है, इससे आपको उस समस्या की मात्रा भी कम हो जाती है जो आपको परेशानी दे सकती है।

ध्यान दें कि विशेष रूप से यदि आप स्थानीय मशीन पर कोड चलाते हैं, तो आप स्मृति समस्याओं में भाग सकते हैं (जो समानांतर मोड में वास्तव में धीमी निष्पादन में प्रकट हो सकता है क्योंकि आप पेजिंग कर रहे हैं): प्रत्येक कार्यकर्ता को वर्कस्पेस की एक प्रति प्राप्त होती है, इसलिए यदि आपकी गणना में 500 एमबी सरणी बनाना शामिल है, तो 8 श्रमिकों को कुल 4 जीबी रैम की आवश्यकता होगी - और फिर आपने मूल प्रक्रिया की रैम की गणना भी शुरू नहीं की है! इसके अलावा, यह केवल आपकी मशीन पर एन -1 कोर का उपयोग करने के लिए अच्छा हो सकता है, ताकि कंप्यूटर पर चलने वाली अन्य प्रक्रियाओं के लिए अभी भी एक कोर छोड़ा जा सके (जैसे एक अनिवार्य एंटीवायरस ...)।

+0

केवल सबसे कम लूप को समानांतर करना क्यों सर्वोत्तम है? मैंने .NET के लिए देखे गए सभी साहित्यों के विपरीत पढ़ा है। आम तौर पर, बड़े बाहरी लूप को समानांतर करने से आंतरिक लूप के समानांतर होने से कम धागे बनाने के ऊपरी हिस्से में वृद्धि होती है। –

+1

@ जोएल बी: आप एक लूप को समानांतर करना चाहते हैं जो बहुत सारे पुनरावृत्तियों को करता है, क्योंकि एक लूप चलाने के बाद, 1024-कोर क्लस्टर पर 500 पुनरावृत्तियों काफी कचरा है। बेशक, समांतर लूप के मूल को थ्रेड निर्माण ओवरहेड से अधिक समय लेना चाहिए। हालांकि, यह Matlab में लगभग हमेशा सच है, क्योंकि आपको बहुत कम लूप की आवश्यकता होती है, और इस प्रकार आंतरिकतम लूप के भीतर भी गणना काफी भारी होती है। – Jonas

+1

लेकिन सिर्फ एक क्वाड-कोर एकल पीसी के बारे में क्या? शायद बाहरी पाश कर रहे हैं और अधिक समझ में आता है? क्या यह कहना उचित होगा कि मेरे लूप में एक बड़ा कंप्यूटर क्लस्टर होने पर आंतरिक लूप समानांतर होता है, लेकिन बाहरी लूप को समानांतर करने के लिए बेहतर होता है यदि मेरे पास केवल एक सिंगल, बहु-कोर पीसी है? –

5

Mathworks अपनी ही parallel computing toolbox प्रदान करता है। यदि आप इसे खरीदना नहीं चाहते हैं, तो कुछ विकल्प

  • आप अपनी स्वयं की मेक्स फ़ाइल लिख सकते हैं और pthreads या OpenMP का उपयोग कर सकते हैं।
  • हालांकि
  • सुनिश्चित करें कि आप कोड के समानांतर भाग में किसी भी मेक्स API कॉल नहीं करते हैं, क्योंकि वे सुरक्षित नहीं हैं धागा
  • आप एमपीआई के माध्यम से मोटे कणों का समानांतरवाद चाहते हैं तो आप parmatlab
साथ की कोशिश कर सकते pmatlab
  • ही

    संपादित करें: लिंक जोड़ने Parallel MATLAB with openmp mex files

    मैंने केवल पहले प्रयास किया है।

  • +1

    आपको यह भी जानने में रुचि हो सकती है कि हाल ही में समांतर कंप्यूटिंग टूलबॉक्स (आर 2010 बी) ने सीयूडीए-आधारित जीपीयू कंप्यूटिंग की शुरुआत की है (गणना की क्षमता का समर्थन करने वाले एनवीडिया कार्ड की आवश्यकता है 1.3): http://www.mathworks.com/discovery/matlab-gpu .html – Amro

    2

    भूल जाते हैं कि कई Matlab कार्यों को पहले से ही कर रहे हैं थ्रेड न करें। सावधानीपूर्वक प्रोग्रामिंग करके आप उनका लाभ उठा सकते हैं - अपने संस्करण के लिए प्रलेखन की जांच करें क्योंकि मैथवर्क प्रत्येक नई रिलीज के साथ सीमा और बहुप्रचारित कार्यों की संख्या में वृद्धि कर रहे हैं। उदाहरण के लिए, ऐसा लगता है कि 2010a में मल्टीथ्रेड fft एस है जो समय श्रृंखला प्रसंस्करण के लिए उपयोगी हो सकता है।

    आंतरिक बहु सूत्रण नहीं है कि तुम क्या जरूरत है, तो पता चलता है @srean तो के रूप में, पैरलल कंप्यूटिंग उपकरण बॉक्स उपलब्ध है। मेरे पैसे के लिए (या बल्कि, मेरे नियोक्ता के पैसे) यह जाने का तरीका है, जिससे आप चीजों को बोल्ट करने के बजाए मैटलैब में समानांतर प्रोग्राम कर सकते हैं। मुझे यह भी स्वीकार करना है कि मैं टूलबॉक्स और इसकी पेशकश की सुविधाओं से काफी प्रभावित हूं।

    +0

    मेरे पास मैटलैब के समांतर कंप्यूटिंग टूलबॉक्स तक पहुंच है। क्या आप इसका उपयोग करने पर किसी भी अच्छे प्राइमर्स/उदाहरण साझा कर सकते हैं? – Eduardas

    +2

    @ एडवर्ड: मैंने पीसीटी पर गणित 2 दिवसीय प्रशिक्षण पाठ्यक्रम में भाग लिया, दस्तावेज़ीकरण पढ़ा और इसे अपने लिए काम किया। लेकिन मेरे पास फोरट्रान और एमपीआई और ओपनएमपी के साथ समानांतर प्रोग्रामिंग में पृष्ठभूमि है। Matlab सेंट्रल Matlab के साथ समानांतर कंप्यूटिंग पर सामान की मात्रा में वृद्धि हुई है, जो शुरू करने के लिए एक जगह हो सकती है। –