समानांतर प्रोग्रामिंग मॉडल
कम्प्यूटिंग में, समानांतर प्रोग्रामिंग मॉडल, समानांतर कंप्यूटिंग आर्किटेक्चर की एक अवधारणा है, जिसके माध्यम से विधिकलन और कंप्यूटर प्रोग्राम में उनके समावेश को सुविधापूर्वक व्यक्त किया जा सकता है। किसी प्रोग्रामिंग मॉडल की उपयोगिता, उसकी सामान्यता : विभिन्न आर्किटेक्चर के लिए विभिन्न समस्याओं की एक श्रृंखला को कितनी अच्छी तरह व्यक्त किया जा सकता है, और इसका प्रदर्शन: संकलित प्रोग्राम कितनी कुशलता से निष्पादित हो सकते हैं पर निर्भर करती है।[1] समानांतर प्रोग्रामिंग मॉडल का कार्यान्वयन किसी अनुक्रमिक प्रोग्रामिंग भाषा से प्राप्त लाइब्रेरी के रूप में, उपलब्ध भाषा के विस्तार के रूप में, या संपूर्णतः नवीन भाषा के रूप में हो सकता है।
किसी विशेष प्रोग्रामिंग मॉडल के लिए साधारण सहमति महत्वपूर्ण है क्योंकि इससे मॉडल के समर्थन के साथ विभिन्न समानांतर कंप्यूटर निर्मित किए जाते हैं, जिससे सॉफ्टवेयर पोर्टेबिलिटी की सुविधा प्राप्त होती है। इस अर्थ में, प्रोग्रामिंग मॉडल को हार्डवेयर और सॉफ्टवेयर के बीच ब्रिजिंग मॉडल के रूप में भी जाना जाता है।[2]
समानांतर प्रोग्रामिंग मॉडल का वर्गीकरण
समानांतर प्रोग्रामिंग मॉडल के वर्गीकरण को सामान्यतः दो क्षेत्रोंː प्रक्रिया व्यवहार तथा समस्या अपघटन में विभाजित किया जा सकता है।[3][4][5]
प्रक्रिया व्यवहार
प्रक्रिया व्यवहार उन तंत्रों से संबंधित है जिनके द्वारा समानांतर प्रक्रियाएं एक दूसरे के साथ अंतःक्रिया करने में सक्षम होती हैं। अंतःक्रिया के सबसे सामान्य रूप साझा मेमोरी और संदेश पठन हैं, परंतु अंतःक्रिया अंतर्निहित भी हो सकती है।
साझा मेमोरी
साझा मेमोरी, प्रक्रियाओं के बीच डेटा पास करने का एक प्रभावी साधन है। साझा-मेमोरी मॉडल में, समानांतर प्रक्रियाएं एक वैश्विक पता स्थान साझा करती हैं जिसे वे अतुल्यकालिक रूप से पढ़ते और लिखते हैं। अतुल्यकालिक समवर्ती पहुंच से रेस की स्थिति उत्पन्न हो सकती है, और इनसे बचने के लिए लॉक, सेमाफोर तथा मॉनिटर सिंक्रनाइज़ेशन जैसे तंत्र का उपयोग किया जा सकता है। पारंपरिक मल्टी-कोर प्रोसेसर सीधे साझा मेमोरी का समर्थन करते हैं, जिसका लाभ उठाने के लिए कई समानांतर प्रोग्रामिंग भाषाओं और लाइब्रेरी, जैसे कि सिल्क, ओपनएमपी और थ्रेडिंग बिल्डिंग ब्लॉक्स को प्ररूपित किया गया है।
मैसेज पासिंग
मैसेज-पासिंग मॉडल में, समानांतर प्रक्रियाएं एक-दूसरे को संदेश भेजकर डेटा का आदान-प्रदान करती हैं। ये संचार अतुल्यकालिक सकते हैं, जहां रिसीवर के तैयार होने से पहले एक संदेश भेजा जा सकता है, या तुल्यकालिक भी हों सकते है, जहां रिसीवर पहले से ही तैयार रहता है। संचार अनुक्रमिक प्रक्रियाएं (सीएसपी) संदेश भेजने की औपचारिकता प्रक्रियाओं को जोड़ने के लिए तुल्यकालिक संचार चैनलों का उपयोग करती है, और ओकाम (प्रोग्रामिंग भाषा), लिम्बो (प्रोग्रामिंग भाषा) और गो (प्रोग्रामिंग भाषा) जैसी महत्वपूर्ण भाषाओं को उत्पन्न करती है। इसके विपरीत, ऐक्टर मॉडल अतुल्यकालिक मैसेज पासिंग का उपयोग करता है और इसे डी, स्काला और एसएएलएसए जैसी भाषाओं के प्रारूपण में नियोजित किया गया है।
विभाजित ग्लोबल एड्रेस स्पेस
विभाजित ग्लोबल एड्रेस स्पेस (पीजीएएस) मॉडल साझा मेमोरी और मैसेज पासिंग के बीच एक मध्य मार्ग प्रदान करते हैं। पीजीएएस एक वैश्विक मेमोरी एड्रेस स्पेस अवधारणा प्रदान करता है जो तार्किक रूप से विभाजित होता है, जहां प्रत्येक प्रक्रिया के लिए एक भाग स्थानीय होता है। समानांतर प्रक्रियाएं साझा मेमोरी मॉडल की याद दिलाते हुए, वैश्विक पता स्थान पर अतुल्यकालिक रूप से संचालन करके अंतःक्रिया करती हैं। यद्यपि, वैश्विक पता स्थान को किसी विशेष प्रक्रिया के साथ भागों में विभाजित करके, वे प्रोग्रामर को संदर्भ की स्थानीयता का लाभ उठाने और वितरित मेमोरी समानांतर कंप्यूटर पर कुशल कार्यान्वयन को सक्षम करने की अनुमति देते हैं। पीजीएएस कई समानांतर प्रोग्रामिंग भाषाओं और लाइब्रेरी जैसे कि फोरट्रान 2008, चैपल, यूपीसी++, और श्मेम द्वारा प्रस्तुत किया जाता है।
अंतर्निहित अंतःक्रिया
एक अंतर्निहित मॉडल में, प्रोग्रामर को कोई प्रक्रिया दिखाई नहीं देती है और इसके अतिरिक्त कंपाइलर और/या रनटाइम इसे निष्पादित करने के लिए उत्तरदायी होता है। अंतर्निहित समानता के दो उदाहरण डोमेन-विशिष्ट भाषाओं के साथ हैं जहां उच्च-स्तरीय संचालन के भीतर समवर्तीता निर्धारित है, और कार्यात्मक प्रोग्रामिंग के साथ क्योंकि साइड इफेक्ट की अनुपस्थिति गैर-निर्भर कार्यों को समानांतर रूप से निष्पादित करने की अनुमति देती है .[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