2009-07-02 11 views
8

क्या हम सिंगल सीपीयू पर एक दूसरे के साथ "समानांतर कोडिंग" और "मल्टीथ्रेडिंग कोडिंग" का उपयोग कर सकते हैं?समांतर कोडिंग बनाम मल्टीथ्रेडिंग (एकल सीपीयू पर)

मुझे दोनों में अधिक अनुभव नहीं है, लेकिन मैं उपरोक्त में से किसी एक को अपनी कोडिंग शैली को स्थानांतरित करना चाहता हूं।

जैसा कि मैंने पाया कि अबकल एक दिन में कई एकल आवेदन अप्रचलित हैं, जो कैरियर की संभावना के रूप में भविष्य के सॉफ्टवेयर उद्योग के लिए बेहतर होगा?

उत्तर

0

मुझे यकीन नहीं है कि आपको "समानांतर कोडिंग" क्या लगता है, लेकिन समांतर कोडिंग जैसा कि मैं समझता हूं, यह सीपीयू द्वारा समानांतर में निष्पादित कोड को संदर्भित करता है, और इसलिए मल्टीथ्रेड कोड उस विवरण के अंदर आता है।

इस तरह, जाहिर है कि आप उन्हें एक दूसरे के रूप में उपयोग कर सकते हैं (जैसा कि एक दूसरे के अंदर आता है)।

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

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

2

प्रश्न थोड़ा उलझन में है क्योंकि आप एकाधिक धागे में समांतर संचालन कर सकते हैं, लेकिन सभी बहु-थ्रेड अनुप्रयोग समानांतर कंप्यूटिंग का उपयोग नहीं कर रहे हैं। समानांतर कोड में, आपके पास आमतौर पर कई "श्रमिक" होते हैं जो परिणामों को असीमित रूप से वापस करने के लिए डेटा का एक सेट उपभोग करते हैं। लेकिन मल्टीथ्रेड का उपयोग व्यापक दायरे में किया जाता है, जैसे जीयूआई, अवरुद्ध I/O और नेटवर्किंग।

एक या कई सीपीयू होने पर बहुत कुछ नहीं बदलता है, क्योंकि प्रबंधन इस बात पर निर्भर करता है कि आपका ओएस थ्रेड और प्रक्रियाओं को कैसे संभाल सकता है।

मल्टीथ्रेडिंग हर जगह उपयोगी होगी, समानांतर प्रतिदिन कंप्यूटिंग प्रतिमान नहीं है, इसलिए यह करियर की संभावना में "आला" हो सकता है।

2

कुछ डेमो मैंने .NET 4.0 में देखा, समांतर कोड परिवर्तन थ्रेड करने के बाद आसान लगते हैं। "फॉर लूप्स" और समांतर प्रसंस्करण का समर्थन करने के लिए अन्य चीजों के लिए नया वाक्यविन्यास है। तो एक अंतर है।

मुझे लगता है कि भविष्य में आप दोनों करेंगे, लेकिन मुझे लगता है कि समांतर समर्थन बेहतर और आसान होगा। आपको अभी भी पृष्ठभूमि संचालन और अन्य चीजों के लिए धागे की आवश्यकता है।

+0

http द्वारा लिखित द्वारा किया जाता है: //channel9.msdn। कॉम/पोस्ट/विजुअलस्टूडियो/उपयोग-द-समांतर-एक्सटेंशन-टू-द-नेट-फ्रेमवर्क/ – eschneider

1

तथ्य यह है कि आप एक एकल सीपीयू पर "असली" समांतरता प्राप्त नहीं कर सकते हैं। कई पुस्तकालय हैं (जैसे सी के एमपीआई) जो इस क्षेत्र पर थोड़ा सा मदद करते हैं। लेकिन paralellism की अवधारणा यह नहीं है कि लोकप्रिय समाधान पर काम कर रहे डेवलपर्स के बीच उपयोग किया जाता है।

इन दिनों मल्टीथ्रेडिंग एक ही सीपीयू पर एकाधिक कोर की शुरूआत के लिए आम है, यह थ्रेड libs और थ्रेडसेफ प्रकार, विधियों, कक्षाओं आदि के लिए हर भाषा में लागू करने के लिए आसान और लगभग पारदर्शी है। इस तरह आप paralellism अनुकरण कर सकते हैं।

वैसे भी, यदि आप इसके साथ शुरुआत कर रहे हैं, तो समवर्ती और थ्रेडिंग विषयों के बारे में पढ़कर शुरू करें। और निश्चित रूप से, धागे + समांतरता एक साथ अच्छा काम करते हैं।

+0

मल्टीथ्रेडिंग वास्तव में किसी भी भाषा में आसान नहीं है, सिवाय इसके कि एर्लांग में छोड़कर। –

+0

मैंने erlang पर erlang और paralellism के बारे में बहुत कुछ सुना है। दुर्भाग्य से मैं इस भाषा को नहीं जानता। आसान मल्टीथ्रेडिंग द्वारा, मेरा मतलब है कि कई धागे बनाना और उन्हें सुसंगत रूप से काम करना। मुझे पता है कि यह मामूली नहीं है, लेकिन थ्रेडिंग की बजाय आपकी समस्या के लिए एक और समाधान की तलाश करना मुश्किल नहीं है। –

+0

@ जॉर्ज - मुझे नहीं लगता कि एरलांग धागे का उपयोग करता है, लेकिन हल्के वजन वाली प्रोग्राम जो मल्टी-थ्रेडेड प्रोग्रामिंग लिखने के लिए मेमोरी – bubaker

12

लक्ष्य प्रसंस्करण आर्किटेक्चर में मुख्य अंतर के साथ मल्टीथ्रेडिंग और समांतर कोडिंग/कंप्यूटिंग के बीच निश्चित रूप से ओवरलैप है।

बहु सूत्रण साझा स्मृति के साथ एक एकल CPU पर एक भी प्रक्रिया के भीतर संगामिति के लाभों का फायदा उठाने के लिए इस्तेमाल किया गया है। कई सीपीयू वाले मशीन पर एक ही प्रोग्राम चलाने से महत्वपूर्ण गति हो सकती है, लेकिन अक्सर इरादे के बजाय बोनस होता है (हाल ही में)। कई ओएस में थ्रेडिंग मॉडल होते हैं (उदा। pthreads), जो लाभान्वित होते हैं लेकिन एकाधिक CPU की आवश्यकता नहीं होती है।

Multiprocessingसमानांतर प्रोग्रामिंग को निशाना बनाने से अधिक CPU के लिए मानक मॉडल, एक बड़ा मशीन पर कई CPUs के साथ जल्दी SMP मशीनों से है, तो एक पर कई सीपीयू/कोर करने के लिए वापस कई मशीनों के लिए कंप्यूटिंग क्लस्टर के लिए, और अब एकल कंप्यूटर MPI एक मानक है जो कई अलग-अलग आर्किटेक्चर में काम कर सकता है।

बेशक, कोई OpenMP जैसे भाषा ढांचे के साथ धागे का उपयोग करके समानांतर डिज़ाइन प्रोग्राम कर सकता है। मैंने मल्टीकंपोनेंट जीयूआई/अनुप्रयोगों के बारे में सुना है जो अलग-अलग प्रसंस्करण पर भरोसा करते हैं जो सैद्धांतिक रूप से कहीं भी चल सकता है। व्यावहारिक रूप से, उत्तरार्द्ध से पहले की तुलना में अधिक है।

शायद मुख्य भेद तब होता है जब प्रोग्राम एकाधिक मशीनों पर चलता है, जहां मल्टीथ्रेडिंग का उपयोग करना व्यावहारिक नहीं है, और स्मृति साझा करने वाले मौजूदा अनुप्रयोग काम नहीं करेंगे।

0

सरल भाषा बहु सूत्रण में अपने आप में सीपीयू में उपलब्ध है और समानांतर प्रोग्रामिंग एक स्पष्ट कार्य या तो संकलक या मेरे निर्माणों प्रोग्रामर "#pragma"

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