कार्य समानता

कार्य समानता (फ़ंक्शन समानता और नियंत्रण समानता के रूप में भी जाना जाता है) समानांतर कंप्यूटिंग वातावरण में कई केंद्रीय प्रसंस्करण इकाइयों में कंप्यूटर कोड के समानांतरकरण का एक रूप है। कार्य समानता कार्य (कंप्यूटिंग) को वितरित करने पर केंद्रित है - विभिन्न प्रोसेसरों में प्रक्रिया (कंप्यूटिंग) या थ्रेड (कंप्यूटिंग) द्वारा समवर्ती प्रदर्शन किया जाता है। डेटा समांतरता के विपरीत जिसमें डेटा के विभिन्न घटकों पर एक ही कार्य चलाना शामिल है, एक ही डेटा पर एक ही समय में कई अलग-अलग कार्यों को चलाकर कार्य समानता को अलग किया जाता है। एक सामान्य प्रकार का कार्य समानता पाइपलाइन (कंप्यूटिंग) है, जिसमें अलग-अलग कार्यों की एक श्रृंखला के माध्यम से डेटा के एक सेट को स्थानांतरित करना शामिल है, जहां प्रत्येक कार्य दूसरों से स्वतंत्र रूप से निष्पादित हो सकता है।

विवरण
मल्टीप्रोसेसर सिस्टम में, कार्य समानता तब हासिल की जाती है जब प्रत्येक प्रोसेसर एक ही या अलग डेटा पर एक अलग थ्रेड (या प्रक्रिया) निष्पादित करता है। धागे समान या भिन्न कोड निष्पादित कर सकते हैं। सामान्य स्थिति में, अलग-अलग निष्पादन सूत्र काम करते समय एक दूसरे के साथ संवाद करते हैं, लेकिन यह एक आवश्यकता नहीं है। संचार आमतौर पर कार्यप्रवाह  के भाग के रूप में डेटा को एक थ्रेड से दूसरे थ्रेड में पास करके होता है। एक सरल उदाहरण के रूप में, यदि कोई सिस्टम 2-प्रोसेसर सिस्टम (सीपीयू ए और बी) पर एक विकट: समानांतर वातावरण में कोड चला रहा है और हम कार्य ए और बी करना चाहते हैं, तो सीपीयू ए को कार्य ए करने के लिए कहना संभव है। और CPU b कार्य B को एक साथ करने के लिए, जिससे निष्पादन के रन टाइम (प्रोग्राम जीवनचक्र चरण) को कम किया जा सके। नीचे बताए अनुसार सशर्त (प्रोग्रामिंग) का उपयोग करके कार्यों को सौंपा जा सकता है।

कार्य समानता डेटा (डेटा समानता) के विपरीत प्रसंस्करण (यानी धागे) की वितरित (समानांतर) प्रकृति पर जोर देती है। अधिकांश वास्तविक कार्यक्रम कार्य समांतरता और डेटा समांतरता के बीच निरंतरता पर कहीं गिर जाते हैं। थ्रेड-लेवल पैरेललिज्म (TLP) एक एप्लिकेशन में निहित समानांतर कंप्यूटिंग है जो एक साथ कई धागा (कंप्यूटर विज्ञान)  चलाता है। इस प्रकार की समानता बड़े पैमाने पर डेटाबेस जैसे वाणिज्यिक सर्वर (कंप्यूटिंग) के लिए लिखे गए अनुप्रयोगों में पाई जाती है। एक साथ कई थ्रेड चलाकर, ये एप्लिकेशन उच्च मात्रा में I/O और मेमोरी सिस्टम विलंबता को सहन करने में सक्षम होते हैं, जो उनके कार्यभार को बढ़ा सकते हैं - जबकि एक थ्रेड मेमोरी या डिस्क एक्सेस की प्रतीक्षा में देरी कर रहा है, अन्य थ्रेड्स उपयोगी कार्य कर सकते हैं।

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

उदाहरण
नीचे दिया गया स्यूडोकोड कार्य समानता को दर्शाता है:

कार्यक्रम: ... अगर सीपीयू = ए तब कार्य ए करो और अगर सीपीयू = बी तो टास्क बी करो अगर अंत ... अंत कार्यक्रम

कार्यक्रम का लक्ष्य कुछ शुद्ध कुल कार्य (ए+बी) करना है। यदि हम उपरोक्त कोड को लिखते हैं और इसे 2-प्रोसेसर सिस्टम पर लॉन्च करते हैं, तो रनटाइम पर्यावरण इसे निम्नानुसार निष्पादित करेगा।


 * एक SPMD (एकल प्रोग्राम, एकाधिक डेटा) सिस्टम में, दोनों CPU कोड निष्पादित करेंगे।
 * एक समानांतर वातावरण में, दोनों की एक ही डेटा तक पहुंच होगी।
 * अगर क्लॉज सीपीयू के बीच अंतर करता है। सीपीयू ए इफ पर ट्रू रीड करेगा और सीपीयू बी इफ पर ट्रू रीड करेगा, इस प्रकार उनका अपना कार्य होगा।
 * अब, दोनों CPU एक साथ अलग-अलग कोड ब्लॉक निष्पादित करते हैं, एक साथ अलग-अलग कार्य करते हैं।

सीपीयू द्वारा निष्पादित कोड a :

कार्यक्रम: ... कार्य ए करो ... अंत कार्यक्रम

सीपीयू बी द्वारा निष्पादित कोड:

कार्यक्रम: ... टास्क बी करो ... अंत कार्यक्रम

इस अवधारणा को अब किसी भी संख्या में प्रोसेसर के लिए सामान्यीकृत किया जा सकता है।

भाषा समर्थन
कार्य समानता को सामान्य प्रयोजन वाली भाषाओं में या तो अंतर्निहित सुविधाओं या पुस्तकालयों द्वारा समर्थित किया जा सकता है। उल्लेखनीय उदाहरणों में शामिल हैं: ठीक-ठाक कार्य-समानांतर भाषाओं के उदाहरण हार्डवेयर विवरण भाषाओं जैसे Verilog और वीएचडीएल के दायरे में पाए जा सकते हैं।
 * अदा: कार्य (अंतर्निहित)
 * C++ (Intel): थ्रेडिंग बिल्डिंग ब्लॉक्स
 * सी++ (इंटेल): सिल्क मोर
 * C++ (ओपन सोर्स/Apache 2.0): RaftLib
 * सी, सी++, ऑब्जेक्टिव-सी, स्विफ्ट (ऐप्पल): ग्रैंड सेंट्रल डिस्पैच
 * डी: टास्क (कंप्यूटिंग) और फाइबर (कंप्यूटर विज्ञान)
 * डेल्फी (System.Threading.TParallel)
 * गो: गोरोटीन्स
 * जावा: जावा संगामिति
 * .NET: कार्य समानांतर लाइब्रेरी

यह भी देखें

 * एल्गोरिथम कंकाल
 * डेटा समानता
 * फोर्क-जॉइन मॉडल
 * समानांतर प्रोग्रामिंग मॉडल