पाइपलाइन (कंप्यूटिंग)

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

कंप्यूटर से संबंधित पाइपलाइनों में सम्मलित हैं:
 * निर्देश पाइपलाइन, जैसे कि क्लासिक आरआईएससी पाइपलाइन, जो केंद्रीय प्रसंस्करण इकाइयों (सीपीयू) और अन्य माइक्रोप्रोसेसर में एक ही डिजिटल इलेक्ट्रॉनिक्स के साथ कई निर्देशों के अतिव्यापी निष्पादन की अनुमति देने के लिए उपयोग की जाती हैं। सर्किटरी को सामान्यतः चरणों में विभाजित किया जाता है और प्रत्येक चरण एक समय में एक निर्देश के एक विशिष्ट भाग को संसाधित करता है, आंशिक परिणामों को अगले चरण में पारित करता है। चरणों के उदाहरण निर्देश डिकोड, अंकगणित/तर्क और रजिस्टर फ़ेच हैं। वे सुपरस्क्लेर निष्पादन, ऑपरेंड अग्रेषण, सट्टा निष्पादन और आउट-ऑफ-ऑर्डर निष्पादन की तकनीकों से संबंधित हैं।
 * ग्राफिक्स पाइपलाइने, जो अधिकांश ग्राफ़िक्स प्रोसेसिंग यूनिट्स (जीपीयू) में पाई जाने वाली ग्राफिक्स पाइपलाइनें, जिनमें कई अंकगणितीय इकाइयाँ या पूर्ण सीपीयू होते हैं, जो सामान्य रेंडरिंग ऑपरेशंस (परिप्रेक्ष्य प्रक्षेपण, विंडो क्लिपिंग रंग और प्रकाश गणना, रेंडरिंग, आदि) के विभिन्न चरणों को लागू करते हैं।
 * सॉफ्टवेयर पाइपलाइन, जिसमें कंप्यूटिंग प्रक्रियाओं (कमांड, प्रोग्राम रन, टास्क, थ्रेड्स, प्रक्रियाएं, आदि) का एक क्रम होता है, अवधारणात्मक रूप से समानांतर में निष्पादित होता है, एक प्रक्रिया के आउटपुट स्ट्रीम को अगले एक की इनपुट स्ट्रीम के रूप में स्वचालित रूप से फीड किया जाता है। यूनिक्स सिस्टम कॉल पाइपलाइन (यूनिक्स) इस अवधारणा का एक उत्कृष्ट उदाहरण है।
 * HTTP पाइपलाइनिंग, एक ही टीसीपी कनेक्शन के माध्यम से कई HTTP अनुरोध जारी करने की तकनीक, एक नया जारी करने से पहले पिछले एक के समाप्त होने की प्रतीक्षा किए बिना।

कुछ ऑपरेटिंग सिस्टम एक पाइपलाइन में चलने वाले कई प्रोग्रामों को स्ट्रिंग करने के लिए UNIX- जैसे यूनिक्स-जैसा सिंटैक्स प्रदान सकते हैं, लेकिन बाद वाले को वास्तविक पाइपलाइनिंग अतिरिक्त सरल सीरियल निष्पादन के रूप में करते हैं - अर्थात्, प्रत्येक प्रोग्राम के समाप्त होने की प्रतीक्षा करके अगला शुरू करने से पहले होता है।

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

मान लीजिए कि एक कार को असेंबल करने के लिए तीन कार्यों की आवश्यकता होती है जिसमें क्रमशः 20, 10 और 15 मिनट लगते हैं।  फिर, यदि तीनों कार्य एक ही स्टेशन द्वारा किए जाते हैं, तो कारखाना हर 45 मिनट में एक कार का उत्पादन करेगा। तीन स्टेशनों की पाइपलाइन का उपयोग करके, कारखाना पहली कार को 45 मिनट में और फिर हर 20 मिनट में एक नई कार का उत्पादन करेगा।

जैसा कि इस उदाहरण से पता चलता है, पाइपलाइनिंग विलंबता (इंजीनियरिंग) को को कम नहीं करता है, अर्थात, एक आइटम के लिए पूरे सिस्टम से गुजरने का कुल समय। चूँकि यह सिस्टम के थ्रूपुट को बढ़ाता है, यानी वह दर जिस पर पहले आइटम के बाद नई वस्तुओं को संसाधित किया जाता है।

चरणों को संतुलित करना
चूंकि एक पाइपलाइन का थ्रूपुट उसके सबसे धीमे तत्व से बेहतर नहीं हो सकता है, इसलिए डिजाइनर को काम और संसाधनों को चरणों के बीच विभाजित करने का प्रयास करना चाहिए ताकि वे सभी अपने कार्यों को पूरा करने में समान समय ले सकें। उपरोक्त कार असेंबली उदाहरण में, यदि तीन कार्यों में 20, 10 और 15 मिनटअतिरिक्त प्रत्येक में 15 मिनट लगते हैं, तो विलंबता अभी भी 45 मिनट होगी, लेकिन 20अतिरिक्त हर 15 मिनट में एक नई कार समाप्त हो जाएगी।

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

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

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

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

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

वस्तुओं के बीच निर्भरता
कुछ अनुप्रयोगों में, किसी चरण A द्वारा किसी आइटम Y का प्रसंस्करण पाइपलाइन के कुछ बाद के चरण B द्वारा पिछले आइटम X को संसाधित करने के परिणाम या प्रभाव पर निर्भर हो सकता है। उस स्थिति में, चरण A आइटम Y को तब तक ठीक से संसाधित नहीं कर सकता जब तक कि आइटम X ने चरण B को साफ़ नहीं कर दिया हो।

निर्देश पाइपलाइनों में यह स्थिति बहुत बार होती है। उदाहरण के लिए, मान लीजिए कि Y एक अंकगणितीय निर्देश है जो एक रजिस्टर की सामग्री को पढ़ता है जिसे पहले के निर्देश X द्वारा संशोधित किया गया था। मान लीजिए कि A वह चरण है जो निर्देश संचालन को प्राप्त करता है, और B वह चरण है जो परिणाम लिखता है। निर्दिष्ट रजिस्टर में। यदि चरण A, निर्देश X के चरण B तक पहुँचने से पहले निर्देश Y को संसाधित करने का प्रयास करता है, तो रजिस्टर में अभी भी पुराना मान हो सकता है, और Y का प्रभाव गलत होगा।

इस तरह के विरोधों को सही ढंग से संभालने के लिए, पाइपलाइन को अतिरिक्त सर्किटरी या तर्क प्रदान किया जाना चाहिए जो उनका पता लगाता है और उचित कार्रवाई करता है। ऐसा करने की रणनीति में सम्मलित हैं:
 * रुकावट: प्रत्येक प्रभावित अवस्था, जैसे A, को तब तक के लिए रोक दिया जाता है जब तक कि निर्भरता का समाधान नहीं हो जाता है - अर्थात, जब तक आवश्यक जानकारी उपलब्ध नहीं हो जाती है और / या आवश्यक स्थिति प्राप्त नहीं हो जाती है।
 * पुनर्क्रमित आइटम: स्टालिंगअतिरिक्त, चरण ए आइटम वाई को एक तरफ रख सकता है और इसके इनपुट स्ट्रीम में किसी भी बाद के आइटम जेड की तलाश कर सकता है जिसमें किसी भी पहले के आइटम के साथ कोई निर्भरता लंबित नहीं है। निर्देश पाइपलाइनों में, इस तकनीक को आउट-ऑफ़-ऑर्डर निष्पादन कहा जाता है।
 * अनुमान और बैकट्रैक: आइटम-टू-आइटम निर्भरता का एक महत्वपूर्ण उदाहरण एक सशर्त शाखा निर्देश एक्स को एक निर्देश पाइपलाइन द्वारा संभालना है। पाइपलाइन का पहला चरण A, जो अगले निर्देश Y को निष्पादित करने के लिए प्राप्त करता है, अपना कार्य तब तक नहीं कर सकता जब तक कि X ने अपना ओपेरंड प्राप्त नहीं किया है और निर्धारित किया है कि शाखा को लिया जाना है या नहीं। इसमें कई क्लॉक साइकिल लग सकते हैं, क्योंकि X का ऑपरेंड मुख्य मेमोरी से डेटा लाने वाले पिछले निर्देशों पर निर्भर हो सकता है।
 * X के समाप्त होने की प्रतीक्षा करते हुए रुकनेअतिरिक्त, चरण A अनुमान लगा सकता है कि शाखा ली जाएगी या नहीं, और उस अनुमान के आधार पर अगला निर्देश Y प्राप्त करें। यदि अनुमान बाद में गलत निकला (उम्मीद है कि शायद ही कभी), सिस्टम को पीछे हटना होगा और सही विकल्प के साथ फिर से शुरू करना होगा। अर्थात्, चरण ए द्वारा मशीन की स्थिति में किए गए सभी परिवर्तन और उस अनुमान के आधार पर बाद के चरणों को पूर्ववत करना होगा, पाइपलाइन में पहले से ही एक्स के बाद के निर्देशों को फ़्लश करना होगा, और चरण ए को फिर से शुरू करना होगा सही निर्देश सूचक। यह शाखा भविष्यवाणी रणनीति सट्टा निष्पादन का एक विशेष मामला है।

विशिष्ट सॉफ्टवेयर कार्यान्वयन
प्रभावी ढंग से कार्यान्वित करने के लिए, डेटा पाइपलाइनों को उपलब्ध सीपीयू कोर को काम भेजने के लिए सीपीयू अनुसूची बनाना रणनीति की आवश्यकता होती है, और डेटा संरचनाओं का उपयोग जिस पर पाइपलाइन चरण संचालित होंगे। उदाहरण के लिए, UNIX डेरिवेटिव ऑपरेटिंग सिस्टम द्वारा कार्यान्वित पाइपों का उपयोग करके विभिन्न प्रक्रियाओं के मानक IO को पाइपलाइन कमांड कर सकते हैं।

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

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

इसके अलावा, अलग-अलग प्रसंस्करण तत्वों के बीच वस्तुओं का स्थानांतरण विलंबता बढ़ा सकता है, खासकर लंबी पाइपलाइनों के लिए।

पाइपलाइनिंग की अतिरिक्त जटिलता लागत काफी हो सकती है यदि विभिन्न मदों के प्रसंस्करण के बीच निर्भरताएं हैं, खासकर अगर उन्हें संभालने के लिए अनुमान और बैकट्रैक रणनीति का उपयोग किया जाता है। दरअसल, जटिल निर्देश सेटों के लिए उस रणनीति को लागू करने की लागत ने जोखिम और वीएलआईडब्ल्यू जैसे कंप्यूटर आर्किटेक्चर को सरल बनाने के लिए कुछ मौलिक प्रस्तावों को प्रेरित किया है। मशीन निर्देशों को पुनर्व्यवस्थित करने के कार्य के साथ संकलक्स पर भी बोझ डाला गया है ताकि निर्देश पाइपलाइनों के प्रदर्शन में सुधार किया जा सके।

नई प्रौद्योगिकियां
यह सच है कि हाल के वर्षों में अनुप्रयोगों और उनके अंतर्निहित हार्डवेयर की मांग महत्वपूर्ण रही है। उदाहरण के लिए, एकल नोड अनुप्रयोगों के साथ पाइपलाइनों का निर्माण करना जो कि डेटा पंक्ति के माध्यम से पंक्तिबद्ध होता है, अब बड़े डेटा की मात्रा और विविधता के साथ संभव नहीं है। चूँकि, Hadoop, या हाल ही में Apache Spark जैसे डेटा एनालिटिक्स इंजन के आगमन के साथ, कई प्रोसेसिंग नोड्स में बड़े डेटासेट वितरित करना संभव हो गया है, जिससे एप्लिकेशन पहले की तुलना में कई सौ गुना अधिक दक्षता की ऊंचाइयों तक पहुंच सकते हैं। इसका प्रभाव आज यह है कि इस तरह से वितरित प्रसंस्करण का उपयोग करने वाला एक मध्य-स्तरीय पीसी भी बड़े डेटा पाइपलाइनों के निर्माण और संचालन को संभाल सकता है।

यह भी देखें

 * डेटा प्रवाह
 * थ्रूपुट
 * समानांतर कंप्यूटिंग
 * निर्देश पाइपलाइन
 * क्लासिक आरआईएससी पाइपलाइन
 * ग्राफिक्स पाइपलाइन
 * पाइपलाइन (सॉफ्टवेयर)
 * पाइपलाइन (यूनिक्स)
 * वीएम के लिए हार्टमैन पाइपलाइन
 * एमवीएस के लिए बैचपाइप्स
 * ज्यामिति पाइपलाइन
 * एक्सएमएल पाइपलाइन
 * मंचन घटना संचालित वास्तुकला

ग्रन्थसूची

 * For a standard discussion on pipelining in parallel computing see
 * For a standard discussion on pipelining in parallel computing see