उत्तर

32

मल्टीथ्रेड प्रोग्रामिंग समानांतर है, लेकिन समांतर प्रोग्रामिंग आवश्यक रूप से बहुप्रचारित नहीं है।

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

+2

AFAIK, एक कोर प्रोसेसर पर, थ्रेडिंग समानांतर नहीं है। यह समवर्ती है, लेकिन समांतर नहीं है। –

+0

@ आयनट: http: //thesaurus.reference।कॉम/ब्राउज़/समवर्ती <- यदि आप पहले परिणाम के 'समानार्थी' शीर्षलेख के अंतर्गत देखेंगे। –

+5

समवर्ती और समानांतर के बीच मैं जो अंतर करता हूं वह यह है कि समानांतर वास्तव में एक साथ होता है, जबकि समवर्ती ऐसा लगता है जैसे यह एक साथ था। धागे के बीच स्विच इतना तेज़ है कि ऐसा लगता है कि यह समानांतर था, लेकिन ऐसा नहीं है। हो सकता है कि इसे नामित अन्य शर्तें हों, लेकिन मैं यही समझता हूं। –

28

आवश्यक। आप कई प्रक्रियाओं और यहां तक ​​कि कई मशीनों के बीच नौकरियां वितरित कर सकते हैं - मैं वर्ग को "बहु-थ्रेडेड" प्रोग्रामिंग के रूप में वर्गीकृत नहीं कर सकता क्योंकि प्रत्येक प्रक्रिया केवल एक थ्रेड का उपयोग कर सकती है, लेकिन यह निश्चित रूप से समांतर प्रोग्रामिंग है। माना जाता है कि आप तब तर्क दे सकते हैं कि कई प्रक्रियाओं के साथ पूरी तरह से सिस्टम के भीतर कई धागे हैं ...

आखिरकार, इस तरह की परिभाषा केवल संदर्भ के भीतर उपयोगी होती है। आपके विशेष मामले में, यह क्या अंतर होगा? या यह सिर्फ ब्याज से बाहर है?

+1

क्या हमें समांतर प्रोग्रामिंग होने के लिए सिम पर भी विचार करना चाहिए? हम समानांतर में एकाधिक डेटा पर एक ही ऑपरेशन कर रहे हैं, लेकिन मुझे नहीं पता कि इसे समानांतर प्रोग्रामिंग की परिभाषा में शामिल करने के लिए माइक्रो-समानांतरता के रूप में माना जाता है या नहीं। –

+0

मैं कहूंगा कि सिमड अधिक समांतर हार्डवेयर डिज़ाइन था, लेकिन मुझे लगता है कि कुछ स्तर पर आपको समर्पित समांतर हार्डवेयर जैसे प्रोग्रामिंग पक्ष पर विचार करना होगा। जीपीयू के लिए प्रोग्रामिंग के बारे में क्या? –

26

नहीं बहुभाषी प्रोग्रामिंग का मतलब है कि आपके पास एक ही प्रक्रिया है, और यह प्रक्रिया धागे का एक गुच्छा उत्पन्न करती है। सभी थ्रेड एक ही समय में चल रहे हैं, लेकिन वे सभी एक ही प्रक्रिया स्थान के नीचे हैं: वे एक ही मेमोरी तक पहुंच सकते हैं, एक ही खुली फ़ाइल डिस्क्रिप्टर हैं, और इसी तरह।

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

इसके विपरीत, ओपनएमपी मल्टीथ्रेडिंग और साझा-स्मृति के माध्यम से समांतरता प्राप्त करता है। आप कंपाइलर को विशेष निर्देश निर्दिष्ट करते हैं, और यह स्वचालित रूप से आपके लिए समानांतर निष्पादन करता है।

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

+0

ओउ, तो इसका मतलब है कि 1 प्रक्रिया एन प्रक्रिया द्वारा संसाधित की जाती है 1 नौकरी एन थ्रेड –

+0

द्वारा संसाधित नहीं की जाती है मुझे लगता है कि बहु-प्रक्रिया आर्किटेक्चर के लिए ओपनएमपी-शैली समांतरता पर काम किया जा रहा है ... मुझे याद नहीं है अगर यह ओपनएमपी का हिस्सा है, या कुछ और? –

+1

@Eko: बिल्कुल नहीं। एमपीआई एक ही कार्यक्रम के एन उदाहरण शुरू करता है, प्रत्येक एक विशेष चर में एक अलग आईडी संख्या के साथ (MPI_Comm_Rank के लिए देखो)। उन एन उदाहरणों के साथ क्या करना है आप पर निर्भर है। –

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