कार्य समानता

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

विवरण
मल्टीप्रोसेसर तन्त्र में कार्य समानता तब उपलब्धता की जाती है। जब प्रत्येक प्रोसेसर एक ही या अलग डेटा पर एक अलग थ्रेड (या प्रक्रिया) निष्पादित करता है। धागे समान या भिन्न कोड निष्पादित कर सकते हैं। सामान्य स्थिति में विभिन्न प्रकार के निष्पादन सूत्र कार्य करते समय एक दूसरे के साथ संवाद करते हैं। किन्तु यह एक आवश्यकता नहीं है। संचार सामान्यतः कार्यप्रवाह के भाग के रूप में डेटा को एक थ्रेड से दूसरे थ्रेड में पास करके भेजता है।

एक सरल उदाहरण के रूप में यदि कोई तन्त्र 2-प्रोसेसर तन्त्र (सीपीयू a और b) पर एक समानांतर वातावरण में कोड चला रहा है और हम कार्य a और b करना चाहते हैं। सीपीयू a को कार्य A और सीपीयू b को कार्य B करने के लिए एक साथ बताना संभव है। जिससे निष्पादन का समय कम हो जाता है। नीचे बताए नियम के अनुसार नियमानुसार (प्रोग्रामिंग) का उपयोग करके कार्यों को संचालित किया जा सकता है।

कार्य समानता डेटा (डेटा समानता) के विपरीत प्रसंस्करण (अर्थात् धागे) की वितरित (समानांतर) प्रकृति पर महत्वपूर्ण योगदान प्रदान करती है। अधिकांशतः वास्तविक कार्यक्रम कार्य समांतरता और डेटा समांतरता के बीच निरंतरता पर कहीं गिरते हैं।

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

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

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

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

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


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

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

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

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

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

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

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

यह भी देखें

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