समानांतर प्रोग्रामिंग मॉडल

From Vigyanwiki
Revision as of 19:09, 10 July 2023 by alpha>Indicwiki (Created page with "{{Short description|Abstraction of parallel computer architecture}} कम्प्यूटिंग में, एक समानांतर प्रोग्रा...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

कम्प्यूटिंग में, एक समानांतर प्रोग्रामिंग मॉडल समानांतर कंप्यूटिंग आर्किटेक्चर का एक एब्स्ट्रैक्शन (सॉफ्टवेयर इंजीनियरिंग) है, जिसके साथ कंप्यूटर प्रोग्राम में एल्गोरिदम और उनकी संरचना को व्यक्त करना सुविधाजनक है। एक प्रोग्रामिंग मॉडल का मूल्य उसकी सामान्यता पर आंका जा सकता है: विभिन्न आर्किटेक्चर के लिए विभिन्न समस्याओं की एक श्रृंखला को कितनी अच्छी तरह व्यक्त किया जा सकता है, और इसका प्रदर्शन: संकलित प्रोग्राम कितनी कुशलता से निष्पादित हो सकते हैं।[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


यह भी देखें

संदर्भ

  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