समानांतर प्रोग्रामिंग मॉडल: Difference between revisions

From Vigyanwiki
No edit summary
 
(10 intermediate revisions by 3 users not shown)
Line 6: Line 6:


==समानांतर प्रोग्रामिंग मॉडल का वर्गीकरण==
==समानांतर प्रोग्रामिंग मॉडल का वर्गीकरण==
समानांतर प्रोग्रामिंग मॉडल के वर्गीकरण को मोटे तौर पर दो क्षेत्रोंː प्रक्रिया प्रभाव तथा समस्या अपघटनमें विभाजित किया जा सकता है।<ref>John E. Savage, Models of Computation: Exploring the Power of Computing, 2008, Chapter 7 (Parallel Computation), http://cs.brown.edu/~jes/book/ {{Webarchive|url=https://web.archive.org/web/20161105053330/http://cs.brown.edu/~jes/book/ |date=2016-11-05 }}</ref><ref>Ian Foster, Designing and Building Parallel Programs, 1995, Section 1.3, "A Parallel Programming Model", http://www.mcs.anl.gov/~itf/dbpp/text/node9.html</ref><ref>Blaise Barney, Introduction to Parallel Computing, "Models", 2015, Lawrence Livermore National Laboratory,
समानांतर प्रोग्रामिंग मॉडल के वर्गीकरण को सामान्यतः दो क्षेत्रोंː प्रक्रिया व्यवहार तथा समस्या अपघटन में विभाजित किया जा सकता है।<ref>John E. Savage, Models of Computation: Exploring the Power of Computing, 2008, Chapter 7 (Parallel Computation), http://cs.brown.edu/~jes/book/ {{Webarchive|url=https://web.archive.org/web/20161105053330/http://cs.brown.edu/~jes/book/ |date=2016-11-05 }}</ref><ref>Ian Foster, Designing and Building Parallel Programs, 1995, Section 1.3, "A Parallel Programming Model", http://www.mcs.anl.gov/~itf/dbpp/text/node9.html</ref><ref>Blaise Barney, Introduction to Parallel Computing, "Models", 2015, Lawrence Livermore National Laboratory,
https://computing.llnl.gov/tutorials/parallel_comp/#Models {{Webarchive|url=https://web.archive.org/web/20130610122229/https://computing.llnl.gov/tutorials/parallel_comp/#Models |date=2013-06-10 }}</ref>
https://computing.llnl.gov/tutorials/parallel_comp/#Models {{Webarchive|url=https://web.archive.org/web/20130610122229/https://computing.llnl.gov/tutorials/parallel_comp/#Models |date=2013-06-10 }}</ref>




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


====साझा स्मृति====
====साझा मेमोरी====
{{main|Shared memory (interprocess communication)}}
{{main|साझा मेमोरी (अंतरप्रक्रिया संचार)}}
साझा मेमोरी प्रक्रियाओं के बीच डेटा पास करने का एक प्रभावी साधन है। साझा-मेमोरी मॉडल में, समानांतर प्रक्रियाएं एक वैश्विक पता स्थान साझा करती हैं जिसे वे अतुल्यकालिक रूप से पढ़ते और लिखते हैं। अतुल्यकालिक समवर्ती पहुंच से [[दौड़ की स्थिति]] पैदा हो सकती है, और इनसे बचने के लिए [[लॉक (कंप्यूटर विज्ञान)]], [[सेमाफोर (प्रोग्रामिंग)]] और [[मॉनिटर (सिंक्रनाइज़ेशन)]] जैसे तंत्र का उपयोग किया जा सकता है। पारंपरिक [[मल्टी-कोर प्रोसेसर]] सीधे साझा मेमोरी का समर्थन करते हैं, जिसका फायदा उठाने के लिए कई समानांतर प्रोग्रामिंग भाषाओं और लाइब्रेरी, जैसे कि [[सिल्क (प्रोग्रामिंग भाषा)]], [[ओपनएमपी]] और [[थ्रेडिंग बिल्डिंग ब्लॉक्स]] को डिज़ाइन किया गया है।


====संदेश भेजना====
साझा मेमोरी, प्रक्रियाओं के बीच डेटा पास करने का एक प्रभावी साधन है। साझा-मेमोरी मॉडल में, समानांतर प्रक्रियाएं एक वैश्विक पता स्थान साझा करती हैं जिसे वे अतुल्यकालिक रूप से पढ़ते और लिखते हैं। अतुल्यकालिक समवर्ती पहुंच से [[दौड़ की स्थिति|रेस]] की स्थिति उत्पन्न हो सकती है, और इनसे बचने के लिए [[लॉक (कंप्यूटर विज्ञान)|लॉक]], [[सेमाफोर (प्रोग्रामिंग)|सेमाफोर]] तथा [[मॉनिटर (सिंक्रनाइज़ेशन)|मॉनिटर सिंक्रनाइज़ेशन]] जैसे तंत्र का उपयोग किया जा सकता है। पारंपरिक [[मल्टी-कोर प्रोसेसर]] सीधे साझा मेमोरी का समर्थन करते हैं, जिसका लाभ उठाने के लिए कई समानांतर प्रोग्रामिंग भाषाओं और लाइब्रेरी, जैसे कि [[सिल्क (प्रोग्रामिंग भाषा)|सिल्क]], [[ओपनएमपी]] और [[थ्रेडिंग बिल्डिंग ब्लॉक्स]] को प्ररूपित किया गया है।
{{main|Message passing}}
संदेश-पासिंग मॉडल में, समानांतर प्रक्रियाएं एक-दूसरे को संदेश भेजकर डेटा का आदान-प्रदान करती हैं। ये संचार अतुल्यकालिक हो सकते हैं, जहां रिसीवर के तैयार होने से पहले एक संदेश भेजा जा सकता है, या सिंक्रोनस, जहां रिसीवर को तैयार होना चाहिए। संचार अनुक्रमिक प्रक्रियाएं (सीएसपी) संदेश भेजने की औपचारिकता प्रक्रियाओं को जोड़ने के लिए तुल्यकालिक संचार चैनलों का उपयोग करती है, और [[ओकाम (प्रोग्रामिंग भाषा)]], [[लिम्बो (प्रोग्रामिंग भाषा)]] और गो (प्रोग्रामिंग भाषा) जैसी महत्वपूर्ण भाषाओं को जन्म देती है। इसके विपरीत, [[अभिनेता मॉडल]] एसिंक्रोनस संदेश पासिंग का उपयोग करता है और इसे [[डी (प्रोग्रामिंग भाषा)]], [[स्काला (प्रोग्रामिंग भाषा)]] और एसएएलएसए जैसी भाषाओं के डिजाइन में नियोजित किया गया है।


====विभाजित वैश्विक पता स्थान====
====मैसेज पासिंग====
{{main|Partitioned global address space}}
{{main|मैसेज पासिंग}}
विभाजित ग्लोबल एड्रेस स्पेस (पीजीएएस) मॉडल साझा मेमोरी और संदेश भेजने के बीच एक मध्य मार्ग प्रदान करते हैं। पीजीएएस एक वैश्विक मेमोरी एड्रेस स्पेस एब्स्ट्रैक्शन प्रदान करता है जो तार्किक रूप से विभाजित होता है, जहां प्रत्येक प्रक्रिया के लिए एक हिस्सा स्थानीय होता है। समानांतर प्रक्रियाएं साझा मेमोरी मॉडल की याद दिलाते हुए, वैश्विक पता स्थान पर अतुल्यकालिक रूप से संचालन (जैसे पढ़ना और लिखना) करके संचार करती हैं। हालाँकि, वैश्विक पता स्थान को किसी विशेष प्रक्रिया के साथ भागों में विभाजित करके, वे प्रोग्रामर को संदर्भ की स्थानीयता का फायदा उठाने और वितरित मेमोरी समानांतर कंप्यूटर पर कुशल कार्यान्वयन को सक्षम करने की अनुमति देते हैं। पीजीएएस कई समानांतर प्रोग्रामिंग भाषाओं और पुस्तकालयों द्वारा पेश किया जाता है, जैसे कि [[फोरट्रान 2008]], [[चैपल (प्रोग्रामिंग भाषा)]], [http://upcxx.lbl.gov UPC++], और [[SHMEM]]
 
मैसेज-पासिंग मॉडल में, समानांतर प्रक्रियाएं एक-दूसरे को संदेश भेजकर डेटा का आदान-प्रदान करती हैं। ये संचार अतुल्यकालिक सकते हैं, जहां रिसीवर के तैयार होने से पहले एक संदेश भेजा जा सकता है, या तुल्यकालिक भी हों सकते है, जहां रिसीवर पहले से ही तैयार रहता है। संचार अनुक्रमिक प्रक्रियाएं (सीएसपी) संदेश भेजने की औपचारिकता प्रक्रियाओं को जोड़ने के लिए तुल्यकालिक संचार चैनलों का उपयोग करती है, और [[ओकाम (प्रोग्रामिंग भाषा)]], [[लिम्बो (प्रोग्रामिंग भाषा)]] और गो (प्रोग्रामिंग भाषा) जैसी महत्वपूर्ण भाषाओं को उत्पन्न करती है। इसके विपरीत, [[अभिनेता मॉडल|ऐक्टर मॉडल]] अतुल्यकालिक मैसेज पासिंग का उपयोग करता है और इसे [[डी (प्रोग्रामिंग भाषा)|डी]], [[स्काला (प्रोग्रामिंग भाषा)|स्काला]] और एसएएलएसए जैसी भाषाओं के प्रारूपण में नियोजित किया गया है।
 
====विभाजित ग्लोबल एड्रेस स्पेस====
{{main|विभाजित ग्लोबल एड्रेस स्पेस}}
 
विभाजित ग्लोबल एड्रेस स्पेस (पीजीएएस) मॉडल साझा मेमोरी और मैसेज पासिंग के बीच एक मध्य मार्ग प्रदान करते हैं। पीजीएएस एक वैश्विक मेमोरी एड्रेस स्पेस अवधारणा प्रदान करता है जो तार्किक रूप से विभाजित होता है, जहां प्रत्येक प्रक्रिया के लिए एक भाग स्थानीय होता है। समानांतर प्रक्रियाएं साझा मेमोरी मॉडल की याद दिलाते हुए, वैश्विक पता स्थान पर अतुल्यकालिक रूप से संचालन करके अंतःक्रिया करती हैं। यद्यपि, वैश्विक पता स्थान को किसी विशेष प्रक्रिया के साथ भागों में विभाजित करके, वे प्रोग्रामर को संदर्भ की स्थानीयता का लाभ उठाने और वितरित मेमोरी समानांतर कंप्यूटर पर कुशल कार्यान्वयन को सक्षम करने की अनुमति देते हैं। पीजीएएस कई समानांतर प्रोग्रामिंग भाषाओं और लाइब्रेरी जैसे कि [[फोरट्रान 2008]], [[चैपल (प्रोग्रामिंग भाषा)|चैपल]], [http://upcxx.lbl.gov यूपीसी++], और [[SHMEM|श्मेम]] द्वारा प्रस्तुत किया जाता है।


====अंतर्निहित अंतःक्रिया====
====अंतर्निहित अंतःक्रिया====
{{main|Implicit parallelism}}
{{main|अंतर्निहित अंतःक्रिया}}
एक अंतर्निहित मॉडल में, प्रोग्रामर को कोई प्रक्रिया इंटरैक्शन दिखाई नहीं देती है और इसके बजाय कंपाइलर और/या रनटाइम इसे निष्पादित करने के लिए जिम्मेदार है। अंतर्निहित समानता के दो उदाहरण [[डोमेन-विशिष्ट भाषा]]ओं के साथ हैं जहां उच्च-स्तरीय संचालन के भीतर समवर्तीता निर्धारित है, और [[कार्यात्मक प्रोग्रामिंग]] के साथ क्योंकि साइड इफेक्ट (कंप्यूटर विज्ञान) | साइड-इफेक्ट्स की अनुपस्थिति गैर-निर्भर कार्यों को समानांतर में निष्पादित करने की अनुमति देती है .<ref name="ParFuncProg">Hammond, Kevin. Parallel functional programming: An introduction. In International Symposium on Parallel Symbolic Computation, p. 46. 1994.</ref> हालाँकि, इस प्रकार की समानता को प्रबंधित करना कठिन है<ref>McBurney, D. L., and M. Ronan Sleep. "Transputer-based experiments with the ZAPP architecture." PARLE Parallel Architectures and Languages Europe. Springer Berlin Heidelberg, 1987.</ref> और [[समवर्ती हास्केल]] और [[समवर्ती एमएल]] जैसी कार्यात्मक भाषाएं समानता को स्पष्ट और सही ढंग से प्रबंधित करने के लिए सुविधाएँ प्रदान करती हैं।
 
एक अंतर्निहित मॉडल में, प्रोग्रामर को कोई प्रक्रिया दिखाई नहीं देती है और इसके अतिरिक्त कंपाइलर और/या रनटाइम इसे निष्पादित करने के लिए उत्तरदायी होता है। अंतर्निहित समानता के दो उदाहरण [[डोमेन-विशिष्ट भाषा]]ओं के साथ हैं जहां उच्च-स्तरीय संचालन के भीतर समवर्तीता निर्धारित है, और [[कार्यात्मक प्रोग्रामिंग]] के साथ क्योंकि साइड इफेक्ट की अनुपस्थिति गैर-निर्भर कार्यों को समानांतर रूप से निष्पादित करने की अनुमति देती है .<ref name="ParFuncProg">Hammond, Kevin. Parallel functional programming: An introduction. In International Symposium on Parallel Symbolic Computation, p. 46. 1994.</ref> यद्यपि, इस प्रकार की समानता को प्रबंधित करना कठिन है<ref>McBurney, D. L., and M. Ronan Sleep. "Transputer-based experiments with the ZAPP architecture." PARLE Parallel Architectures and Languages Europe. Springer Berlin Heidelberg, 1987.</ref> और [[समवर्ती हास्केल]] और [[समवर्ती एमएल]] जैसी कार्यात्मक भाषाएं समानता को स्पष्ट और सही ढंग से प्रबंधित करने के लिए सुविधाएँ प्रदान करती हैं।


===समस्या अपघटन===
===समस्या अपघटन===
एक समानांतर प्रोग्राम एक साथ निष्पादित होने वाली प्रक्रियाओं से बना होता है। समस्या अपघटन उस तरीके से संबंधित है जिसमें घटक प्रक्रियाएं तैयार की जाती हैं।<ref>Ian Foster, Designing and Building Parallel Programs, 1995, Section 2.2, "Partitioning", http://www.mcs.anl.gov/~itf/dbpp/text/node16.html</ref><ref>Blaise Barney, Introduction to Parallel Computing, "Partitioning", 2015, Lawrence Livermore National Laboratory, https://computing.llnl.gov/tutorials/parallel_comp/#DesignPartitioning {{Webarchive|url=https://web.archive.org/web/20130610122229/https://computing.llnl.gov/tutorials/parallel_comp/#DesignPartitioning |date=2013-06-10 }}</ref>
एक समानांतर प्रोग्राम समानांतर रूप से निष्पादित होने वाली प्रक्रियाओं से बना होता है। समस्या अपघटन उस विधि से संबंधित है जिसमें घटक प्रक्रियाएं समानांतर रूप से तैयार की जाती हैं।<ref>Ian Foster, Designing and Building Parallel Programs, 1995, Section 2.2, "Partitioning", http://www.mcs.anl.gov/~itf/dbpp/text/node16.html</ref><ref>Blaise Barney, Introduction to Parallel Computing, "Partitioning", 2015, Lawrence Livermore National Laboratory, https://computing.llnl.gov/tutorials/parallel_comp/#DesignPartitioning {{Webarchive|url=https://web.archive.org/web/20130610122229/https://computing.llnl.gov/tutorials/parallel_comp/#DesignPartitioning |date=2013-06-10 }}</ref>




====कार्य समानता====
====कार्य समानांतरता====
{{main|Task parallelism}}
{{main|कार्य समानांतरता}}
एक कार्य-समानांतर मॉडल प्रक्रियाओं, या निष्पादन के धागों पर केंद्रित होता है। ये प्रक्रियाएँ अक्सर व्यवहारिक रूप से भिन्न होंगी, जो संचार की आवश्यकता पर जोर देती हैं। कार्य समानता संदेश-संप्रेषण संचार को व्यक्त करने का एक स्वाभाविक तरीका है। फ्लिन की वर्गीकरण में, कार्य समानता को आमतौर पर एकाधिक निर्देश, एकाधिक डेटा/फ्लिन की वर्गीकरण #एमपीएमडी या एकाधिक निर्देश, एकल डेटा के रूप में वर्गीकृत किया जाता है।


====डेटा समानता====
एक कार्य-समानांतर मॉडल प्रक्रियाओं, या निष्पादन के थ्रेड पर केंद्रित होता है। ये प्रक्रियाएँ प्रायः व्यवहारिक रूप से भिन्न होती हैं, जो संचार की आवश्यकता पर जोर देती हैं। कार्य समानता संदेश-संप्रेषण संचार को व्यक्त करने का एक स्वाभाविक तरीका है। फ्लिन के वर्गीकरण में, कार्य समानता को सामान्यतः एकाधिक निर्देश या एकल डेटा के रूप में वर्गीकृत किया जाता है।
{{main|Data parallelism}}
एक डेटा-समानांतर मॉडल डेटा सेट पर संचालन करने पर केंद्रित होता है, आमतौर पर एक नियमित रूप से संरचित सरणी। कार्यों का एक सेट इस डेटा पर काम करेगा, लेकिन स्वतंत्र रूप से असंयुक्त विभाजनों पर। फ्लिन की वर्गीकरण में, डेटा समानता को आमतौर पर मल्टीपल इंस्ट्रक्शन, मल्टीपल डेटा/[[एसपीएमडी]] या सिंगल इंस्ट्रक्शन, मल्टीपल डेटा के रूप में वर्गीकृत किया जाता है।


====अंतर्निहित समानता====
====डेटा समानांतरता====
{{main|Implicit parallelism}}
{{main|डेटा समानांतरता}}
अंतर्निहित प्रक्रिया इंटरैक्शन के साथ, समानता का एक अंतर्निहित मॉडल प्रोग्रामर को कुछ भी नहीं बताता है क्योंकि कंपाइलर, रनटाइम या हार्डवेयर जिम्मेदार है। उदाहरण के लिए, कंपाइलरों में, [[स्वचालित समानांतरीकरण]] अनुक्रमिक कोड को समानांतर कोड में परिवर्तित करने की प्रक्रिया है, और कंप्यूटर आर्किटेक्चर में, [[सुपरस्केलर प्रोसेसर]] एक तंत्र है जिसके तहत निर्देश-स्तरीय समानता का उपयोग समानांतर में संचालन करने के लिए किया जाता है।
 
एक डेटा-समानांतर मॉडल डेटा समुच्चय सामान्यतः एक नियमित रूप से संरचित सरणी के संचालन करने पर केंद्रित होता है। प्रक्रियाओ का एक समुच्चय इस डेटा के असंयुक्त विभाजनों परपर स्वतंत्र रूप से कार्य करेगा। फ्लिन के वर्गीकरण में, डेटा समानता को सामान्यतः बहु निर्देश, [[एसपीएमडी]] या एकल निर्देश, मल्टीपल डेटा के रूप में वर्गीकृत किया जाता है।
 
====अंतर्निहित अंतःक्रिया====
{{main|निहित समरूपता}}
 
अंतर्निहित प्रक्रिया व्यवहार के साथ, समानता का एक अंतर्निहित मॉडल प्रोग्रामर को कुछ भी नहीं बताता है क्योंकि कंपाइलर, रनटाइम या हार्डवेयर उत्तरदायी है। उदाहरण के लिए, कंपाइलरों में, [[स्वचालित समानांतरीकरण]] अनुक्रमिक कोड को समानांतर कोड में परिवर्तित करने की प्रक्रिया है, और कंप्यूटर आर्किटेक्चर में, [[सुपरस्केलर प्रोसेसर]] एक तंत्र है जिसके अंतर्गत निर्देश-स्तरीय समानता का उपयोग समानांतर प्रोग्राम में संचालन करने के लिए किया जाता है।


==शब्दावली==
==शब्दावली==
समानांतर प्रोग्रामिंग मॉडल, गणना के मॉडल से निकटता से संबंधित हैं। समानांतर संगणना का एक मॉडल एक अमूर्त है जिसका उपयोग कम्प्यूटेशनल प्रक्रियाओं की लागत का विश्लेषण करने के लिए किया जाता है, लेकिन इसका व्यावहारिक होना जरूरी नहीं है, क्योंकि इसे हार्डवेयर और/या सॉफ्टवेयर में कुशलतापूर्वक लागू किया जा सकता है। इसके विपरीत, एक प्रोग्रामिंग मॉडल विशेष रूप से हार्डवेयर और सॉफ्टवेयर कार्यान्वयन के व्यावहारिक विचारों को दर्शाता है।<ref>Skillicorn, David B., and Domenico Talia, Models and languages for parallel computation, ACM Computing Surveys, 30.2 123–169 (1998), https://www.cs.utexas.edu/users/browne/CS392Cf2000/papers/ModelsOfParallelComputation-Skillicorn.pdf</ref>
समानांतर प्रोग्रामिंग मॉडल, गणना के मॉडल से निकटता से संबंधित हैं। समानांतर संगणना का एक मॉडल एक अवधारणा है जिसका उपयोग संगणनीय प्रक्रियाओं की लागत का विश्लेषण करने के लिए किया जाता है, परंतु इसका व्यावहारिक होना जरूरी नहीं है, क्योंकि इसे हार्डवेयर और/या सॉफ्टवेयर में कुशलतापूर्वक लागू किया जा सकता है। इसके विपरीत, एक प्रोग्रामिंग मॉडल विशेष रूप से हार्डवेयर और सॉफ्टवेयर कार्यान्वयन के व्यावहारिक विचारों को दर्शाता है।<ref>Skillicorn, David B., and Domenico Talia, Models and languages for parallel computation, ACM Computing Surveys, 30.2 123–169 (1998), https://www.cs.utexas.edu/users/browne/CS392Cf2000/papers/ModelsOfParallelComputation-Skillicorn.pdf</ref>
एक समानांतर प्रोग्रामिंग भाषा एक या प्रोग्रामिंग मॉडल के संयोजन पर आधारित हो सकती है। उदाहरण के लिए, [[उच्च प्रदर्शन फोरट्रान]] साझा-मेमोरी इंटरैक्शन और डेटा-समानांतर समस्या अपघटन पर आधारित है, और गो (प्रोग्रामिंग भाषा) साझा-मेमोरी और संदेश-पासिंग इंटरैक्शन के लिए तंत्र प्रदान करता है।


==उदाहरण समानांतर प्रोग्रामिंग मॉडल==
समानांतर प्रोग्रामिंग भाषा एक या अधिक प्रोग्रामिंग मॉडल के संयोजन पर आधारित हो सकती है। उदाहरण के लिए, [[उच्च प्रदर्शन फोरट्रान]] साझा-मेमोरी अंतःक्रिया तथा डेटा-समानांतर समस्या अपघटन पर आधारित है, और गो, साझा-मेमोरी तथा मैसेज-पासिंग अन्तःक्रिया के लिए तंत्र प्रदान करता है।
 
==समानांतर प्रोग्रामिंग मॉडल के उदाहरण ==
{| class="wikitable"
{| class="wikitable"
! Name || Class of interaction || Class of decomposition || Example implementations
! नाम || अंतःक्रिया की श्रेणी || वियोजन की श्रेणी || कार्यान्वयन के उदाहरण
|-
|-
| [[Actor model]]
| [[Actor model|ऐक्टर मॉडल]]
| Asynchronous message passing
| अतुल्यकालिक संदेश भेजना
| Task
| कार्य
| [[D (programming language)|D]], [[Erlang (programming language)|Erlang]], [[Scala (programming language)|Scala]], SALSA
| [[डी (प्रोग्रामिंग भाषा)|डी]], [[ईरलैंग (प्रोग्रामिंग भाषा)|ईरलैंग]], [[स्काला (प्रोग्रामिंग भाषा)|स्काला]], साल्सा
|-  
|-  
| [[Bulk synchronous parallel]]
| [[Bulk synchronous parallel|प्रकाय तुल्यकालिक समानांतर]]
| Shared memory
| सहभाजी मैमोरी
| Task
| कार्य
| [[Apache Giraph]], [[Apache Hama]], [[BSPlib]]
| [[अपाचे गिराफ]], [[अपाचे हामा]], [[बीएसपीलिब]]
|-
|-
| [[Communicating sequential processes]]
| [[Communicating sequential processes|अनुक्रमिक प्रक्रियाओं का संचार]]
| Synchronous message passing
| सिंक्रोनस मैसेज पासिंग
| Task
| कार्य
| [[Ada (programming language)|Ada]], [[Occam (programming language)|Occam]], [[VerilogCSP]], [[Go (programming language)|Go]]
| [[एडा (प्रोग्रामिंग भाषा)|एडा]], [[ऑकम (प्रोग्रामिंग भाषा)|ऑकम]], [[वेरिलॉगसीएसपी]], [[गो (प्रोग्रामिंग भाषा)|गो]]
|-
|-
| [[Circuit (computer science)|Circuits]]
| [[Circuit (computer science)|सर्किट]]
| Message passing
| मैसेज पासिंग
| Task
| कार्य
| [[Verilog]], [[VHDL]]
| [[वेरिलॉग]], [[वीएचडीएल]]
|-
|-
| [[Dataflow programming|Dataflow]]
| [[Dataflow programming|डाटाफ़्लो]]
| Message passing
| मैसेज पासिंग
| Task
| कार्य
| [[Lustre (programming language)|Lustre]], [[TensorFlow]], [[Apache Flink]]
| [[लस्ट्र (प्रोग्रामिंग भाषा)|लस्ट्र]], [[टेंसरफ्लो]], [[अपाचे फ्लिंक]]
|-
|-
| [[Functional programming|Functional]]
| [[Functional programming|क्रियात्मक]]
| Message passing
| मैसेज पासिंग
| Task
| कार्य
| [[Concurrent Haskell]], [[Concurrent ML]]
| [[कंकरेंट हासकेल]], [[कंकरेंट एमएल]]
|-
|-
| [[LogP machine]]
| [[LogP machine|लॉगपी यंत्र]]
| Synchronous message passing
| सिंक्रोनस मैसेज पासिंग
| Not specified
| निर्दिष्ट नहीं है
| None
| कोई नहीं
|-
|-
| [[Parallel random access machine]]
| [[Parallel random access machine|समानांतर रैंडम एक्सेस यंत्र]]
| Shared memory
| सहभाजी मैमोरी
| Data
| डाटा
| [[Cilk (programming language)|Cilk]], [[CUDA]], [[OpenMP]], [[Threading Building Blocks]], [[XMTC]]
| [[सिल्क (प्रोग्रामिंग भाषा)|सिल्क]], [[कूडा]], [[ओपनएमपी]], [[थ्रेडिंग बिल्डिंग ब्लॉक्स]], [[एक्सएमटीसी]]
|-
|-
| [[SPMD]] [[Partitioned global address space|PGAS]]
| एसपीएमडी पीजीएएस
| Partitioned global address space
| विभाजित वैश्विक पता स्थान
| Data
| डाटा
| [[Fortran 2008]], [[Unified Parallel C]], [http://upcxx.lbl.gov UPC++], [[SHMEM]]
| [[फोर्ट्रैन 2008]], [[यूनिफाइड पैरलेल सी]], [http://upcxx.lbl.gov UPC++], [[श्मेम]]
|-
|-
| Global-view [[Task parallelism]]
| वैश्विक प्रदर्शन [[Task parallelism|कार्य अनुरूपता]]
| Partitioned global address space
| विभाजित वैश्विक पता स्थान
| Task
| कार्य
| [[Chapel (programming language)|Chapel]], [[X10 (programming language)|X10]]
| [[चैपल (प्रोग्रामिंग भाषा)|चैपल]], [[एक्स10 (प्रोग्रामिंग भाषा)|एक्स10]]
|}
|}




Line 127: Line 145:
{{Parallel Computing}}
{{Parallel Computing}}


{{DEFAULTSORT:Parallel Programming Model}}[[Category: समानांतर कंप्यूटिंग|प्रोग्रामिंग मॉडल]] [[Category: प्रोग्रामिंग प्रतिमान]] [[Category: समवर्ती प्रोग्रामिंग भाषाएँ]]
{{DEFAULTSORT:Parallel Programming Model}}
 
 


[[Category: Machine Translated Page]]
[[Category:Articles with hatnote templates targeting a nonexistent page|Parallel Programming Model]]
[[Category:Created On 10/07/2023]]
[[Category:Collapse templates|Parallel Programming Model]]
[[Category:Created On 10/07/2023|Parallel Programming Model]]
[[Category:Lua-based templates|Parallel Programming Model]]
[[Category:Machine Translated Page|Parallel Programming Model]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Parallel Programming Model]]
[[Category:Pages with script errors|Parallel Programming Model]]
[[Category:Short description with empty Wikidata description|Parallel Programming Model]]
[[Category:Sidebars with styles needing conversion|Parallel Programming Model]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready|Parallel Programming Model]]
[[Category:Templates generating microformats|Parallel Programming Model]]
[[Category:Templates that add a tracking category|Parallel Programming Model]]
[[Category:Templates that are not mobile friendly|Parallel Programming Model]]
[[Category:Templates that generate short descriptions|Parallel Programming Model]]
[[Category:Templates using TemplateData|Parallel Programming Model]]
[[Category:Webarchive template wayback links]]
[[Category:Wikipedia metatemplates|Parallel Programming Model]]
[[Category:प्रोग्रामिंग प्रतिमान|Parallel Programming Model]]
[[Category:समवर्ती प्रोग्रामिंग भाषाएँ|Parallel Programming Model]]
[[Category:समानांतर कंप्यूटिंग|प्रोग्रामिंग मॉडल]]

Latest revision as of 12:30, 28 July 2023

कम्प्यूटिंग में, समानांतर प्रोग्रामिंग मॉडल, समानांतर कंप्यूटिंग आर्किटेक्चर की एक अवधारणा है, जिसके माध्यम से विधिकलन और कंप्यूटर प्रोग्राम में उनके समावेश को सुविधापूर्वक व्यक्त किया जा सकता है। किसी प्रोग्रामिंग मॉडल की उपयोगिता, उसकी सामान्यता : विभिन्न आर्किटेक्चर के लिए विभिन्न समस्याओं की एक श्रृंखला को कितनी अच्छी तरह व्यक्त किया जा सकता है, और इसका प्रदर्शन: संकलित प्रोग्राम कितनी कुशलता से निष्पादित हो सकते हैं पर निर्भर करती है।[1] समानांतर प्रोग्रामिंग मॉडल का कार्यान्वयन किसी अनुक्रमिक प्रोग्रामिंग भाषा से प्राप्त लाइब्रेरी के रूप में, उपलब्ध भाषा के विस्तार के रूप में, या संपूर्णतः नवीन भाषा के रूप में हो सकता है।

किसी विशेष प्रोग्रामिंग मॉडल के लिए साधारण सहमति महत्वपूर्ण है क्योंकि इससे मॉडल के समर्थन के साथ विभिन्न समानांतर कंप्यूटर निर्मित किए जाते हैं, जिससे सॉफ्टवेयर पोर्टेबिलिटी की सुविधा प्राप्त होती है। इस अर्थ में, प्रोग्रामिंग मॉडल को हार्डवेयर और सॉफ्टवेयर के बीच ब्रिजिंग मॉडल के रूप में भी जाना जाता है।[2]


समानांतर प्रोग्रामिंग मॉडल का वर्गीकरण

समानांतर प्रोग्रामिंग मॉडल के वर्गीकरण को सामान्यतः दो क्षेत्रोंː प्रक्रिया व्यवहार तथा समस्या अपघटन में विभाजित किया जा सकता है।[3][4][5]


प्रक्रिया व्यवहार

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

साझा मेमोरी

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

मैसेज पासिंग

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

विभाजित ग्लोबल एड्रेस स्पेस

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

अंतर्निहित अंतःक्रिया

एक अंतर्निहित मॉडल में, प्रोग्रामर को कोई प्रक्रिया दिखाई नहीं देती है और इसके अतिरिक्त कंपाइलर और/या रनटाइम इसे निष्पादित करने के लिए उत्तरदायी होता है। अंतर्निहित समानता के दो उदाहरण डोमेन-विशिष्ट भाषाओं के साथ हैं जहां उच्च-स्तरीय संचालन के भीतर समवर्तीता निर्धारित है, और कार्यात्मक प्रोग्रामिंग के साथ क्योंकि साइड इफेक्ट की अनुपस्थिति गैर-निर्भर कार्यों को समानांतर रूप से निष्पादित करने की अनुमति देती है .[6] यद्यपि, इस प्रकार की समानता को प्रबंधित करना कठिन है[7] और समवर्ती हास्केल और समवर्ती एमएल जैसी कार्यात्मक भाषाएं समानता को स्पष्ट और सही ढंग से प्रबंधित करने के लिए सुविधाएँ प्रदान करती हैं।

समस्या अपघटन

एक समानांतर प्रोग्राम समानांतर रूप से निष्पादित होने वाली प्रक्रियाओं से बना होता है। समस्या अपघटन उस विधि से संबंधित है जिसमें घटक प्रक्रियाएं समानांतर रूप से तैयार की जाती हैं।[8][9]


कार्य समानांतरता

एक कार्य-समानांतर मॉडल प्रक्रियाओं, या निष्पादन के थ्रेड पर केंद्रित होता है। ये प्रक्रियाएँ प्रायः व्यवहारिक रूप से भिन्न होती हैं, जो संचार की आवश्यकता पर जोर देती हैं। कार्य समानता संदेश-संप्रेषण संचार को व्यक्त करने का एक स्वाभाविक तरीका है। फ्लिन के वर्गीकरण में, कार्य समानता को सामान्यतः एकाधिक निर्देश या एकल डेटा के रूप में वर्गीकृत किया जाता है।

डेटा समानांतरता

एक डेटा-समानांतर मॉडल डेटा समुच्चय सामान्यतः एक नियमित रूप से संरचित सरणी के संचालन करने पर केंद्रित होता है। प्रक्रियाओ का एक समुच्चय इस डेटा के असंयुक्त विभाजनों परपर स्वतंत्र रूप से कार्य करेगा। फ्लिन के वर्गीकरण में, डेटा समानता को सामान्यतः बहु निर्देश, एसपीएमडी या एकल निर्देश, मल्टीपल डेटा के रूप में वर्गीकृत किया जाता है।

अंतर्निहित अंतःक्रिया

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

शब्दावली

समानांतर प्रोग्रामिंग मॉडल, गणना के मॉडल से निकटता से संबंधित हैं। समानांतर संगणना का एक मॉडल एक अवधारणा है जिसका उपयोग संगणनीय प्रक्रियाओं की लागत का विश्लेषण करने के लिए किया जाता है, परंतु इसका व्यावहारिक होना जरूरी नहीं है, क्योंकि इसे हार्डवेयर और/या सॉफ्टवेयर में कुशलतापूर्वक लागू किया जा सकता है। इसके विपरीत, एक प्रोग्रामिंग मॉडल विशेष रूप से हार्डवेयर और सॉफ्टवेयर कार्यान्वयन के व्यावहारिक विचारों को दर्शाता है।[10]

समानांतर प्रोग्रामिंग भाषा एक या अधिक प्रोग्रामिंग मॉडल के संयोजन पर आधारित हो सकती है। उदाहरण के लिए, उच्च प्रदर्शन फोरट्रान साझा-मेमोरी अंतःक्रिया तथा डेटा-समानांतर समस्या अपघटन पर आधारित है, और गो, साझा-मेमोरी तथा मैसेज-पासिंग अन्तःक्रिया के लिए तंत्र प्रदान करता है।

समानांतर प्रोग्रामिंग मॉडल के उदाहरण

नाम अंतःक्रिया की श्रेणी वियोजन की श्रेणी कार्यान्वयन के उदाहरण
ऐक्टर मॉडल अतुल्यकालिक संदेश भेजना कार्य डी, ईरलैंग, स्काला, साल्सा
प्रकाय तुल्यकालिक समानांतर सहभाजी मैमोरी कार्य अपाचे गिराफ, अपाचे हामा, बीएसपीलिब
अनुक्रमिक प्रक्रियाओं का संचार सिंक्रोनस मैसेज पासिंग कार्य एडा, ऑकम, वेरिलॉगसीएसपी, गो
सर्किट मैसेज पासिंग कार्य वेरिलॉग, वीएचडीएल
डाटाफ़्लो मैसेज पासिंग कार्य लस्ट्र, टेंसरफ्लो, अपाचे फ्लिंक
क्रियात्मक मैसेज पासिंग कार्य कंकरेंट हासकेल, कंकरेंट एमएल
लॉगपी यंत्र सिंक्रोनस मैसेज पासिंग निर्दिष्ट नहीं है कोई नहीं
समानांतर रैंडम एक्सेस यंत्र सहभाजी मैमोरी डाटा सिल्क, कूडा, ओपनएमपी, थ्रेडिंग बिल्डिंग ब्लॉक्स, एक्सएमटीसी
एसपीएमडी पीजीएएस विभाजित वैश्विक पता स्थान डाटा फोर्ट्रैन 2008, यूनिफाइड पैरलेल सी, UPC++, श्मेम
वैश्विक प्रदर्शन कार्य अनुरूपता विभाजित वैश्विक पता स्थान कार्य चैपल, एक्स10







यह भी देखें

संदर्भ

  1. Skillicorn, David B., "Models for practical parallel computation", International Journal of Parallel Programming, 20.2 133–158 (1991), https://www.ida.liu.se/~chrke55/papers/modelsurvey.pdf
  2. Leslie G. Valiant, "A bridging model for parallel computation", Communications of the ACM, Volume 33, Issue 8, August, 1990, pages 103–111.
  3. John E. Savage, Models of Computation: Exploring the Power of Computing, 2008, Chapter 7 (Parallel Computation), http://cs.brown.edu/~jes/book/ Archived 2016-11-05 at the Wayback Machine
  4. Ian Foster, Designing and Building Parallel Programs, 1995, Section 1.3, "A Parallel Programming Model", http://www.mcs.anl.gov/~itf/dbpp/text/node9.html
  5. Blaise Barney, Introduction to Parallel Computing, "Models", 2015, Lawrence Livermore National Laboratory, https://computing.llnl.gov/tutorials/parallel_comp/#Models Archived 2013-06-10 at the Wayback Machine
  6. Hammond, Kevin. Parallel functional programming: An introduction. In International Symposium on Parallel Symbolic Computation, p. 46. 1994.
  7. McBurney, D. L., and M. Ronan Sleep. "Transputer-based experiments with the ZAPP architecture." PARLE Parallel Architectures and Languages Europe. Springer Berlin Heidelberg, 1987.
  8. Ian Foster, Designing and Building Parallel Programs, 1995, Section 2.2, "Partitioning", http://www.mcs.anl.gov/~itf/dbpp/text/node16.html
  9. Blaise Barney, Introduction to Parallel Computing, "Partitioning", 2015, Lawrence Livermore National Laboratory, https://computing.llnl.gov/tutorials/parallel_comp/#DesignPartitioning Archived 2013-06-10 at the Wayback Machine
  10. Skillicorn, David B., and Domenico Talia, Models and languages for parallel computation, ACM Computing Surveys, 30.2 123–169 (1998), https://www.cs.utexas.edu/users/browne/CS392Cf2000/papers/ModelsOfParallelComputation-Skillicorn.pdf


अग्रिम पठन

  • Blaise Barney, Introduction to Parallel Computing, Lawrence Livermore National Laboratory, archived from the original on 2013-06-10, retrieved 2015-11-22
  • Murray I. Cole., Algorithmic Skeletons: Structured Management of Parallel Computation (PDF), University of Glasgow
  • J. Darlinton; M. Ghanem; H. W. To (1993), "Structured Parallel Programming", In Programming Models for Massively Parallel Computers. IEEE Computer Society Press: 160–169, doi:10.1109/PMMP.1993.315543, ISBN 0-8186-4900-3, S2CID 15265646
  • Ian Foster, Designing and Building Parallel Programs, Argonne National Laboratory