समानांतर प्रोग्रामिंग मॉडल: Difference between revisions
(Created page with "{{Short description|Abstraction of parallel computer architecture}} कम्प्यूटिंग में, एक समानांतर प्रोग्रा...") |
No edit summary |
||
Line 1: | Line 1: | ||
{{Short description|Abstraction of parallel computer architecture}} | {{Short description|Abstraction of parallel computer architecture}} | ||
[[ कम्प्यूटिंग ]] में, | [[ कम्प्यूटिंग ]] में, '''समानांतर प्रोग्रामिंग मॉडल''', [[समानांतर कंप्यूटिंग]] आर्किटेक्चर की एक अवधारणा है, जिसके माध्यम से [[एल्गोरिदम|विधिकलन]] और [[कंप्यूटर प्रोग्राम]] में उनके समावेश को सुविधापूर्वक व्यक्त किया जा सकता है। किसी प्रोग्रामिंग मॉडल की उपयोगिता, उसकी ''सामान्यता'' : विभिन्न आर्किटेक्चर के लिए विभिन्न समस्याओं की एक श्रृंखला को कितनी अच्छी तरह व्यक्त किया जा सकता है, और इसका ''प्रदर्शन'': संकलित प्रोग्राम कितनी कुशलता से निष्पादित हो सकते हैं पर निर्भर करती है।<ref>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</ref> समानांतर प्रोग्रामिंग मॉडल का कार्यान्वयन किसी [[अनुक्रमिक प्रोग्रामिंग]] भाषा से प्राप्त [[लाइब्रेरी (कंप्यूटिंग)|लाइब्रेरी]] के रूप में, उपलब्ध भाषा के विस्तार के रूप में, या संपूर्णतः नवीन भाषा के रूप में हो सकता है। | ||
किसी विशेष प्रोग्रामिंग मॉडल के | किसी विशेष प्रोग्रामिंग मॉडल के लिए साधारण सहमति महत्वपूर्ण है क्योंकि इससे मॉडल के समर्थन के साथ विभिन्न समानांतर कंप्यूटर निर्मित किए जाते हैं, जिससे सॉफ्टवेयर [[सॉफ्टवेयर पोर्टेबिलिटी|पोर्टेबिलिटी]] की सुविधा प्राप्त होती है। इस अर्थ में, प्रोग्रामिंग मॉडल को हार्डवेयर और सॉफ्टवेयर के बीच [[ब्रिजिंग मॉडल]] के रूप में भी जाना जाता है।<ref name="Valiant1990">Leslie G. Valiant, "A bridging model for parallel computation", Communications of the ACM, Volume 33, Issue 8, August, 1990, pages 103–111.</ref> | ||
Revision as of 20:18, 15 July 2023
कम्प्यूटिंग में, समानांतर प्रोग्रामिंग मॉडल, समानांतर कंप्यूटिंग आर्किटेक्चर की एक अवधारणा है, जिसके माध्यम से विधिकलन और कंप्यूटर प्रोग्राम में उनके समावेश को सुविधापूर्वक व्यक्त किया जा सकता है। किसी प्रोग्रामिंग मॉडल की उपयोगिता, उसकी सामान्यता : विभिन्न आर्किटेक्चर के लिए विभिन्न समस्याओं की एक श्रृंखला को कितनी अच्छी तरह व्यक्त किया जा सकता है, और इसका प्रदर्शन: संकलित प्रोग्राम कितनी कुशलता से निष्पादित हो सकते हैं पर निर्भर करती है।[1] समानांतर प्रोग्रामिंग मॉडल का कार्यान्वयन किसी अनुक्रमिक प्रोग्रामिंग भाषा से प्राप्त लाइब्रेरी के रूप में, उपलब्ध भाषा के विस्तार के रूप में, या संपूर्णतः नवीन भाषा के रूप में हो सकता है।
किसी विशेष प्रोग्रामिंग मॉडल के लिए साधारण सहमति महत्वपूर्ण है क्योंकि इससे मॉडल के समर्थन के साथ विभिन्न समानांतर कंप्यूटर निर्मित किए जाते हैं, जिससे सॉफ्टवेयर पोर्टेबिलिटी की सुविधा प्राप्त होती है। इस अर्थ में, प्रोग्रामिंग मॉडल को हार्डवेयर और सॉफ्टवेयर के बीच ब्रिजिंग मॉडल के रूप में भी जाना जाता है।[2]
समानांतर प्रोग्रामिंग मॉडल का वर्गीकरण
समानांतर प्रोग्रामिंग मॉडल के वर्गीकरण को मोटे तौर पर दो क्षेत्रों में विभाजित किया जा सकता है: प्रक्रिया इंटरैक्शन और समस्या अपघटन।[3][4][5]
प्रक्रिया अंतःक्रिया
प्रक्रिया अंतःक्रिया उन तंत्रों से संबंधित है जिनके द्वारा समानांतर प्रक्रियाएं एक दूसरे के साथ संवाद करने में सक्षम होती हैं। इंटरैक्शन के सबसे सामान्य रूप साझा मेमोरी और संदेश भेजना हैं, लेकिन इंटरैक्शन अंतर्निहित (प्रोग्रामर के लिए अदृश्य) भी हो सकता है।
साझा स्मृति
साझा मेमोरी प्रक्रियाओं के बीच डेटा पास करने का एक प्रभावी साधन है। साझा-मेमोरी मॉडल में, समानांतर प्रक्रियाएं एक वैश्विक पता स्थान साझा करती हैं जिसे वे अतुल्यकालिक रूप से पढ़ते और लिखते हैं। अतुल्यकालिक समवर्ती पहुंच से दौड़ की स्थिति पैदा हो सकती है, और इनसे बचने के लिए लॉक (कंप्यूटर विज्ञान), सेमाफोर (प्रोग्रामिंग) और मॉनिटर (सिंक्रनाइज़ेशन) जैसे तंत्र का उपयोग किया जा सकता है। पारंपरिक मल्टी-कोर प्रोसेसर सीधे साझा मेमोरी का समर्थन करते हैं, जिसका फायदा उठाने के लिए कई समानांतर प्रोग्रामिंग भाषाओं और लाइब्रेरी, जैसे कि सिल्क (प्रोग्रामिंग भाषा), ओपनएमपी और थ्रेडिंग बिल्डिंग ब्लॉक्स को डिज़ाइन किया गया है।
संदेश भेजना
संदेश-पासिंग मॉडल में, समानांतर प्रक्रियाएं एक-दूसरे को संदेश भेजकर डेटा का आदान-प्रदान करती हैं। ये संचार अतुल्यकालिक हो सकते हैं, जहां रिसीवर के तैयार होने से पहले एक संदेश भेजा जा सकता है, या सिंक्रोनस, जहां रिसीवर को तैयार होना चाहिए। संचार अनुक्रमिक प्रक्रियाएं (सीएसपी) संदेश भेजने की औपचारिकता प्रक्रियाओं को जोड़ने के लिए तुल्यकालिक संचार चैनलों का उपयोग करती है, और ओकाम (प्रोग्रामिंग भाषा), लिम्बो (प्रोग्रामिंग भाषा) और गो (प्रोग्रामिंग भाषा) जैसी महत्वपूर्ण भाषाओं को जन्म देती है। इसके विपरीत, अभिनेता मॉडल एसिंक्रोनस संदेश पासिंग का उपयोग करता है और इसे डी (प्रोग्रामिंग भाषा), स्काला (प्रोग्रामिंग भाषा) और एसएएलएसए जैसी भाषाओं के डिजाइन में नियोजित किया गया है।
विभाजित वैश्विक पता स्थान
विभाजित ग्लोबल एड्रेस स्पेस (पीजीएएस) मॉडल साझा मेमोरी और संदेश भेजने के बीच एक मध्य मार्ग प्रदान करते हैं। पीजीएएस एक वैश्विक मेमोरी एड्रेस स्पेस एब्स्ट्रैक्शन प्रदान करता है जो तार्किक रूप से विभाजित होता है, जहां प्रत्येक प्रक्रिया के लिए एक हिस्सा स्थानीय होता है। समानांतर प्रक्रियाएं साझा मेमोरी मॉडल की याद दिलाते हुए, वैश्विक पता स्थान पर अतुल्यकालिक रूप से संचालन (जैसे पढ़ना और लिखना) करके संचार करती हैं। हालाँकि, वैश्विक पता स्थान को किसी विशेष प्रक्रिया के साथ भागों में विभाजित करके, वे प्रोग्रामर को संदर्भ की स्थानीयता का फायदा उठाने और वितरित मेमोरी समानांतर कंप्यूटर पर कुशल कार्यान्वयन को सक्षम करने की अनुमति देते हैं। पीजीएएस कई समानांतर प्रोग्रामिंग भाषाओं और पुस्तकालयों द्वारा पेश किया जाता है, जैसे कि फोरट्रान 2008, चैपल (प्रोग्रामिंग भाषा), UPC++, और SHMEM।
अंतर्निहित अंतःक्रिया
एक अंतर्निहित मॉडल में, प्रोग्रामर को कोई प्रक्रिया इंटरैक्शन दिखाई नहीं देती है और इसके बजाय कंपाइलर और/या रनटाइम इसे निष्पादित करने के लिए जिम्मेदार है। अंतर्निहित समानता के दो उदाहरण डोमेन-विशिष्ट भाषाओं के साथ हैं जहां उच्च-स्तरीय संचालन के भीतर समवर्तीता निर्धारित है, और कार्यात्मक प्रोग्रामिंग के साथ क्योंकि साइड इफेक्ट (कंप्यूटर विज्ञान) | साइड-इफेक्ट्स की अनुपस्थिति गैर-निर्भर कार्यों को समानांतर में निष्पादित करने की अनुमति देती है .[6] हालाँकि, इस प्रकार की समानता को प्रबंधित करना कठिन है[7] और समवर्ती हास्केल और समवर्ती एमएल जैसी कार्यात्मक भाषाएं समानता को स्पष्ट और सही ढंग से प्रबंधित करने के लिए सुविधाएँ प्रदान करती हैं।
समस्या अपघटन
एक समानांतर प्रोग्राम एक साथ निष्पादित होने वाली प्रक्रियाओं से बना होता है। समस्या अपघटन उस तरीके से संबंधित है जिसमें घटक प्रक्रियाएं तैयार की जाती हैं।[8][9]
कार्य समानता
एक कार्य-समानांतर मॉडल प्रक्रियाओं, या निष्पादन के धागों पर केंद्रित होता है। ये प्रक्रियाएँ अक्सर व्यवहारिक रूप से भिन्न होंगी, जो संचार की आवश्यकता पर जोर देती हैं। कार्य समानता संदेश-संप्रेषण संचार को व्यक्त करने का एक स्वाभाविक तरीका है। फ्लिन की वर्गीकरण में, कार्य समानता को आमतौर पर एकाधिक निर्देश, एकाधिक डेटा/फ्लिन की वर्गीकरण #एमपीएमडी या एकाधिक निर्देश, एकल डेटा के रूप में वर्गीकृत किया जाता है।
डेटा समानता
एक डेटा-समानांतर मॉडल डेटा सेट पर संचालन करने पर केंद्रित होता है, आमतौर पर एक नियमित रूप से संरचित सरणी। कार्यों का एक सेट इस डेटा पर काम करेगा, लेकिन स्वतंत्र रूप से असंयुक्त विभाजनों पर। फ्लिन की वर्गीकरण में, डेटा समानता को आमतौर पर मल्टीपल इंस्ट्रक्शन, मल्टीपल डेटा/एसपीएमडी या सिंगल इंस्ट्रक्शन, मल्टीपल डेटा के रूप में वर्गीकृत किया जाता है।
अंतर्निहित समानता
अंतर्निहित प्रक्रिया इंटरैक्शन के साथ, समानता का एक अंतर्निहित मॉडल प्रोग्रामर को कुछ भी नहीं बताता है क्योंकि कंपाइलर, रनटाइम या हार्डवेयर जिम्मेदार है। उदाहरण के लिए, कंपाइलरों में, स्वचालित समानांतरीकरण अनुक्रमिक कोड को समानांतर कोड में परिवर्तित करने की प्रक्रिया है, और कंप्यूटर आर्किटेक्चर में, सुपरस्केलर प्रोसेसर एक तंत्र है जिसके तहत निर्देश-स्तरीय समानता का उपयोग समानांतर में संचालन करने के लिए किया जाता है।
शब्दावली
समानांतर प्रोग्रामिंग मॉडल, गणना के मॉडल से निकटता से संबंधित हैं। समानांतर संगणना का एक मॉडल एक अमूर्त है जिसका उपयोग कम्प्यूटेशनल प्रक्रियाओं की लागत का विश्लेषण करने के लिए किया जाता है, लेकिन इसका व्यावहारिक होना जरूरी नहीं है, क्योंकि इसे हार्डवेयर और/या सॉफ्टवेयर में कुशलतापूर्वक लागू किया जा सकता है। इसके विपरीत, एक प्रोग्रामिंग मॉडल विशेष रूप से हार्डवेयर और सॉफ्टवेयर कार्यान्वयन के व्यावहारिक विचारों को दर्शाता है।[10] एक समानांतर प्रोग्रामिंग भाषा एक या प्रोग्रामिंग मॉडल के संयोजन पर आधारित हो सकती है। उदाहरण के लिए, उच्च प्रदर्शन फोरट्रान साझा-मेमोरी इंटरैक्शन और डेटा-समानांतर समस्या अपघटन पर आधारित है, और गो (प्रोग्रामिंग भाषा) साझा-मेमोरी और संदेश-पासिंग इंटरैक्शन के लिए तंत्र प्रदान करता है।
उदाहरण समानांतर प्रोग्रामिंग मॉडल
Name | Class of interaction | Class of decomposition | Example implementations |
---|---|---|---|
Actor model | Asynchronous message passing | Task | D, Erlang, Scala, SALSA |
Bulk synchronous parallel | Shared memory | Task | Apache Giraph, Apache Hama, BSPlib |
Communicating sequential processes | Synchronous message passing | Task | Ada, Occam, VerilogCSP, Go |
Circuits | Message passing | Task | Verilog, VHDL |
Dataflow | Message passing | Task | Lustre, TensorFlow, Apache Flink |
Functional | Message passing | Task | Concurrent Haskell, Concurrent ML |
LogP machine | Synchronous message passing | Not specified | None |
Parallel random access machine | Shared memory | Data | Cilk, CUDA, OpenMP, Threading Building Blocks, XMTC |
SPMD PGAS | Partitioned global address space | Data | Fortran 2008, Unified Parallel C, UPC++, SHMEM |
Global-view Task parallelism | Partitioned global address space | Task | Chapel, X10 |
यह भी देखें
- स्वचालित समानांतरीकरण
- ब्रिजिंग मॉडल
- समवर्ती कंप्यूटिंग
- समानांतरता की डिग्री
- स्पष्ट समानता
- समवर्ती और समानांतर प्रोग्रामिंग भाषाओं की सूची
- शफ़ल एक्सचेंज के साथ ऑप्टिकल मल्टी-ट्री
- समानांतर बाहरी मेमोरी (मॉडल)
संदर्भ
- ↑ 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
- ↑ Leslie G. Valiant, "A bridging model for parallel computation", Communications of the ACM, Volume 33, Issue 8, August, 1990, pages 103–111.
- ↑ 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
- ↑ 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
- ↑ 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
- ↑ Hammond, Kevin. Parallel functional programming: An introduction. In International Symposium on Parallel Symbolic Computation, p. 46. 1994.
- ↑ McBurney, D. L., and M. Ronan Sleep. "Transputer-based experiments with the ZAPP architecture." PARLE Parallel Architectures and Languages Europe. Springer Berlin Heidelberg, 1987.
- ↑ Ian Foster, Designing and Building Parallel Programs, 1995, Section 2.2, "Partitioning", http://www.mcs.anl.gov/~itf/dbpp/text/node16.html
- ↑ 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
- ↑ 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