स्ट्रीम प्रसंस्करण: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Programming paradigm for parallel processing of data streams}} कंप्यूटर विज्ञान में, स्ट्रीम प्...")
 
 
(9 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Short description|Programming paradigm for parallel processing of data streams}}
{{Short description|Programming paradigm for parallel processing of data streams}}
[[कंप्यूटर विज्ञान]] में, स्ट्रीम प्रोसेसिंग (इवेंट स्ट्रीम प्रोसेसिंग, [[आकड़ों का प्रवाह]] प्रोसेसिंग, या डिस्ट्रीब्यूटेड स्ट्रीम प्रोसेसिंग के रूप में भी जाना जाता है) एक [[प्रोग्रामिंग प्रतिमान]] है, जो [[गणना]] के केंद्रीय इनपुट और आउटपुट ऑब्जेक्ट के रूप में डेटा स्ट्रीम, या समय में घटनाओं के अनुक्रम को देखता है। स्ट्रीम प्रोसेसिंग में [[डेटाफ्लो प्रोग्रामिंग]], [[ प्रतिक्रियाशील प्रोग्रामिंग ]] और [[वितरित अभिकलन]] [[डाटा प्रासेसिंग]] शामिल हैं।<ref>[https://www.jonathanbeard.io/blog/2015/09/19/streaming-and-dataflow.html A SHORT INTRO TO STREAM PROCESSING]</ref> स्ट्रीम प्रोसेसिंग सिस्टम का उद्देश्य डेटा स्ट्रीम के लिए [[समानांतर कंप्यूटिंग]] का पर्दाफाश करना और कुशल कार्यान्वयन के लिए [[स्ट्रीमिंग एल्गोरिदम]] पर भरोसा करना है। इन प्रणालियों के समाधान स्टैक में अभिकलन व्यक्त करने के लिए [[प्रोग्रामिंग मॉडल]] और क्वेरी भाषा जैसे घटक शामिल हैं; वितरण और [[शेड्यूलिंग (कंप्यूटिंग)]] के लिए [[डेटा स्ट्रीम प्रबंधन प्रणाली]]; और [[फ्लोटिंग-पॉइंट यूनिट]], [[ ग्राफ़िक्स प्रोसेसिंग युनिट ]] और [[क्षेत्र में प्रोग्राम की जा सकने वाली द्वार श्रंखला]] सहित हार्डवेयर त्वरण के लिए हार्डवेयर घटक।<ref>[http://impact.crhc.illinois.edu/shared/papers/fcuda2009.pdf FCUDA: Enabling Efficient Compilation of CUDA Kernels onto FPGAs]</ref>
[[कंप्यूटर विज्ञान]] में '''स्ट्रीम प्रसंस्करण,''' जिसे संभावित स्ट्रीम प्रसंस्करण, डेटा स्ट्रीम प्रसंस्करण या वितरित स्ट्रीम प्रसंस्करण के रूप में भी जाना जाता है। यह एक प्रोग्रामिंग प्रतिमान है जो डेटा स्ट्रीम या समय में घटनाओं के अनुक्रम को गणना के केंद्रीय इनपुट और आउटपुट के रूप में देखता है। स्ट्रीम प्रसंस्करण में [[डेटाफ्लो प्रोग्रामिंग|डेटा प्रोग्रामिंग]], [[ प्रतिक्रियाशील प्रोग्रामिंग |डेटा संचार प्रोग्रामिंग]] और वितरित डेटा प्रसंस्करण सम्मिलित है<ref>[https://www.jonathanbeard.io/blog/2015/09/19/streaming-and-dataflow.html A SHORT INTRO TO STREAM PROCESSING]</ref> स्ट्रीम प्रसंस्करण सिस्टम का लक्ष्य डेटा स्ट्रीम के लिए [[समानांतर कंप्यूटिंग]] को विकसित करना और कुशल कार्यान्वयन के लिए संचार एल्गोरिदम पर विश्वास करना है। इन प्रणालियों के सॉफ़्टवेयर प्रक्रिया में वितरण और शेड्यूलिंग के लिए गणना स्ट्रीम प्रबंधन सिस्टम और फ्लोटिंग-पॉइंट इकाइयों, [[ ग्राफ़िक्स प्रोसेसिंग युनिट |ग्राफ़िक्स प्रसंस्करण]] इकाइयों और स्थानीय-प्रोग्रामेबल गेट एरेज़ सहित त्वरण के लिए हार्डवेयर घटकों को व्यक्त करने के लिए [[प्रोग्रामिंग मॉडल]] और क्वेरी भाषा जैसे घटक सम्मिलित हैं।<ref>[http://impact.crhc.illinois.edu/shared/papers/fcuda2009.pdf FCUDA: Enabling Efficient Compilation of CUDA Kernels onto FPGAs]</ref>
धारा प्रसंस्करण प्रतिमान प्रदर्शन किए जा सकने वाले समानांतर संगणना को प्रतिबंधित करके समानांतर सॉफ्टवेयर और हार्डवेयर को सरल बनाता है। डेटा के अनुक्रम (एक स्ट्रीम) को देखते हुए, ऑपरेशन की एक श्रृंखला (गणना कर्नेल) स्ट्रीम में प्रत्येक तत्व पर लागू होती है। कर्नेल फ़ंक्शंस आमतौर पर [[पाइपलाइन (कंप्यूटिंग)]] होते हैं, और बाहरी मेमोरी इंटरैक्शन से जुड़े बैंडविड्थ में नुकसान को कम करने के लिए इष्टतम स्थानीय ऑन-चिप मेमोरी पुन: उपयोग का प्रयास किया जाता है। यूनिफ़ॉर्म स्ट्रीमिंग, जहाँ स्ट्रीम में सभी तत्वों पर एक कर्नेल फ़ंक्शन लागू होता है, विशिष्ट है। चूंकि कर्नेल और स्ट्रीम एब्सट्रैक्शन डेटा निर्भरता को उजागर करते हैं, इसलिए कंपाइलर टूल ऑन-चिप प्रबंधन कार्यों को पूरी तरह से स्वचालित और अनुकूलित कर सकते हैं। स्ट्रीम प्रोसेसिंग हार्डवेयर [[स्कोरबोर्डिंग]] का उपयोग कर सकता है, उदाहरण के लिए, निर्भरता ज्ञात होने पर [[ प्रत्यक्ष मेमोरी एक्सेस ]] (डीएमए) आरंभ करने के लिए। मैनुअल डीएमए प्रबंधन के उन्मूलन से सॉफ्टवेयर जटिलता कम हो जाती है, और हार्डवेयर कैश्ड I/O के लिए एक संबद्ध उन्मूलन, डेटा क्षेत्र विस्तार को कम कर देता है जिसे अंकगणितीय तर्क इकाइयों जैसे विशेष कम्प्यूटेशनल इकाइयों द्वारा सेवा में शामिल किया जाना है।


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


== अनुप्रयोग ==
== अनुप्रयोग ==
स्ट्रीम प्रोसेसिंग अनिवार्य रूप से डेटा-केंद्रित मॉडल द्वारा संचालित एक समझौता है जो पारंपरिक डीएसपी या जीपीयू-प्रकार के अनुप्रयोगों (जैसे छवि, वीडियो और [[ अंकीय संकेत प्रक्रिया ]]) के लिए बहुत अच्छी तरह से काम करता है, लेकिन अधिक यादृच्छिक डेटा एक्सेस के साथ सामान्य प्रयोजन प्रसंस्करण के लिए कम है ( जैसे डेटाबेस)। मॉडल में कुछ लचीलेपन का त्याग करके, निहितार्थ आसान, तेज और अधिक कुशल निष्पादन की अनुमति देते हैं। संदर्भ के आधार पर, [[सेंट्रल प्रोसेसिंग यूनिट]] डिजाइन को अधिकतम दक्षता या लचीलेपन के लिए ट्रेड-ऑफ के लिए ट्यून किया जा सकता है।
स्ट्रीम प्रसंस्करण अनिवार्य रूप से एक समझौता है, जो डेटा-केंद्रित मॉडल द्वारा संचालित होता है जो पारंपरिक डीएसपी या जीपीयू प्रकार के अनुप्रयोगों (जैसे छवि, वीडियो और डिजिटल संकेत प्रसंस्करण) के लिए बहुत अच्छी तरह से कार्य करता है, लेकिन अधिक यादृच्छिक डेटा नियंत्रण के साथ सामान्य प्रयोजन प्रसंस्करण जैसे डेटाबेस के लिए अपेक्षाकृत कम कार्य करता है। मॉडल में कुछ नम्यता का त्याग करके निहितार्थ आसान, तीव्र और अधिक कुशल निष्पादन की स्वीकृति देते हैं। संदर्भ के आधार पर प्रोसेसर डिज़ाइन को अधिकतम दक्षता, नम्यता या ट्रेड-ऑफ़ के लिए ट्यून किया जा सकता है।
 
स्ट्रीम प्रोसेसिंग उन अनुप्रयोगों के लिए विशेष रूप से उपयुक्त है जो तीन अनुप्रयोग विशेषताओं को प्रदर्शित करते हैं:{{Citation needed|date=June 2008}}
* गणना तीव्रता, I/O या वैश्विक स्मृति संदर्भ प्रति अंकगणितीय संचालन की संख्या। आज कई सिग्नल प्रोसेसिंग अनुप्रयोगों में यह 50:1 से अधिक है और एल्गोरिथम जटिलता के साथ बढ़ रहा है।
* डेटा समानांतरता एक कर्नेल में मौजूद है यदि एक इनपुट स्ट्रीम के सभी रिकॉर्ड पर एक ही फ़ंक्शन लागू किया जाता है और पिछले रिकॉर्ड के परिणामों की प्रतीक्षा किए बिना एक साथ कई रिकॉर्ड संसाधित किए जा सकते हैं।
* डेटा लोकेलिटी एक विशिष्ट प्रकार का टेम्पोरल लोकेलिटी है जो सिग्नल और मीडिया प्रोसेसिंग एप्लिकेशन में आम है, जहां डेटा एक बार उत्पन्न होता है, एप्लिकेशन में एक या दो बार बाद में पढ़ा जाता है, और फिर कभी नहीं पढ़ा जाता है। कर्नेल के बीच इंटरमीडिएट स्ट्रीम और साथ ही कर्नेल फ़ंक्शंस के भीतर इंटरमीडिएट डेटा स्ट्रीम प्रोसेसिंग प्रोग्रामिंग मॉडल का उपयोग करके इस इलाके को सीधे कैप्चर कर सकते हैं।
 
स्ट्रीम के भीतर रिकॉर्ड के उदाहरणों में शामिल हैं:
* ग्राफिक्स में, प्रत्येक रिकॉर्ड त्रिकोण के लिए शीर्ष, सामान्य और रंग जानकारी हो सकता है;
* इमेज प्रोसेसिंग में, प्रत्येक रिकॉर्ड एक इमेज से एक पिक्सेल हो सकता है;
* एक वीडियो एनकोडर में, प्रत्येक रिकॉर्ड 256 पिक्सेल का हो सकता है जो डेटा का एक मैक्रोब्लॉक बनाता है; या
* वायरलेस सिग्नल प्रोसेसिंग में, प्रत्येक रिकॉर्ड एंटीना से प्राप्त नमूनों का अनुक्रम हो सकता है।


प्रत्येक रिकॉर्ड के लिए हम केवल इनपुट से पढ़ सकते हैं, उस पर संचालन कर सकते हैं और आउटपुट पर लिख सकते हैं। एकाधिक इनपुट और एकाधिक आउटपुट होने की अनुमति है, लेकिन कभी भी स्मृति का एक टुकड़ा जो पठनीय और लिखने योग्य दोनों नहीं है। <!-- We could discuss weeks on whatever this can be considered generally true by pointing out the implications of the exact wording. -->
स्ट्रीम प्रसंस्करण उन अनुप्रयोगों के लिए विशेष रूप से उपयुक्त है जो तीन अनुप्रयोग विशेषताओं को प्रदर्शित करते हैं:{{Citation needed|date=June 2008}}
* '''तीव्रता की गणना'''- प्रति इनपुट/आउटपुट या वैश्विक मेमोरी संदर्भ अंकगणितीय संचालन की संख्या को आज कई संकेत प्रसंस्करण अनुप्रयोगों में यह 50:1 से भी अधिक है और एल्गोरिथम जटिलता के साथ बढ़ रहा है।
* '''डेटा समानता''' - यदि इनपुट स्ट्रीम के सभी रिकॉर्ड पर एक ही फ़ंक्शन प्रयुक्त किया जाता है और पिछले रिकॉर्ड के परिणामों की प्रतीक्षा किए बिना कई रिकॉर्ड को एक साथ संसाधित किया जा सकता है, तो कर्नेल में डेटा समानता सम्मिलित होती है।
* '''डेटा स्थानीयता'''- यह एक विशिष्ट प्रकार की अस्थायी स्थानीयता है जो संकेत और मीडिया प्रसंस्करण अनुप्रयोगों में सामान्य है जहां डेटा एक बार तैयार किया जाता है, बाद में एप्लिकेशन में एक या दो बार पढ़ा जाता है और फिर कभी नहीं पढ़ा जाता है। कर्नेल के बीच पारित मध्यवर्ती स्ट्रीम और साथ ही कर्नेल फ़ंक्शंन के भीतर मध्यवर्ती डेटा स्ट्रीम प्रसंस्करण प्रोग्रामिंग मॉडल का उपयोग करके प्रत्यक्ष स्थानीयता को अधिकृत कर सकते हैं।


स्ट्रीम प्रसंस्करण के भीतर रिकॉर्ड के उदाहरणों में सम्मिलित हैं:
* ग्राफ़िक्स में प्रत्येक रिकॉर्ड एक त्रिभुज के शीर्ष, सामान्य और रंग की जानकारी हो सकती है।
* छवि प्रसंस्करण में प्रत्येक रिकॉर्ड एक छवि से एक पिक्सेल हो सकता है।
* एक वीडियो एनकोडर में प्रत्येक रिकॉर्ड 256 पिक्सेल का हो सकता है जो डेटा का एक मैक्रोब्लॉक बनाता है।
* वायरलेस संकेत प्रसंस्करण में प्रत्येक रिकॉर्ड एंटीना से प्राप्त प्रतिरूप का अनुक्रम हो सकता है।


प्रत्येक रिकॉर्ड के लिए हम केवल इनपुट से पढ़ सकते हैं, उस पर संचालन कर सकते हैं और आउटपुट पर लिख सकते हैं। एकाधिक इनपुट और एकाधिक आउटपुट होने की स्वीकृति है लेकिन कभी भी मेमोरी का एक भाग जो पठनीय और लिखने योग्य दोनों नहीं है।<!-- We could discuss weeks on whatever this can be considered generally true by pointing out the implications of the exact wording. -->
== कोड उदाहरण ==
== कोड उदाहरण ==
चित्रण के माध्यम से, निम्नलिखित कोड के टुकड़े घटना प्रवाह के भीतर पैटर्न का पता लगाने का प्रदर्शन करते हैं। पहला निरंतर [[SQL]] क्वेरी (एक क्वेरी जो टाइमस्टैम्प और विंडो अवधि के आधार पर आने वाले डेटा को हमेशा के लिए संसाधित करती है) का उपयोग करके डेटा स्ट्रीम को संसाधित करने का एक उदाहरण है। यह कोड खंड दो डेटा स्ट्रीमों में से एक को दर्शाता है, एक स्टॉक ऑर्डर के लिए, और एक परिणामी स्टॉक ट्रेडों के लिए। क्वेरी ऑर्डर दिए जाने के एक सेकंड के भीतर ट्रेड द्वारा मिलान किए गए सभी ऑर्डर की एक स्ट्रीम आउटपुट करती है। आउटपुट स्ट्रीम को टाइमस्टैम्प द्वारा सॉर्ट किया जाता है, इस मामले में, ऑर्डर स्ट्रीम से टाइमस्टैम्प।
उदाहरण के रूप मे निम्नलिखित कोड खंड घटना धाराओं के भीतर पैटर्न का पता लगाने का प्रदर्शन करते हैं। पहला एक सतत एसक्यूएल क्वेरी (एक क्वेरी जो टाइमस्टैम्प और विंडो अवधि के आधार पर आने वाले डेटा को सदैव के लिए संसाधित करती है) का उपयोग करके डेटा स्ट्रीम को संसाधित करने का एक उदाहरण है। यह कोड खंड दो डेटा स्ट्रीम के संबंध को दर्शाता है, एक स्टॉक अनुक्रम के लिए और दूसरा परिणामी स्टॉक ट्रेडों के लिए अनुक्रम दिए जाने के एक सेकंड के भीतर क्वेरी किसी ट्रेड द्वारा मिलान किए गए सभी अनुक्रम की एक स्ट्रीम आउटपुट करती है। इस स्थिति में अनुक्रम स्ट्रीम से टाइमस्टैम्प आउटपुट स्ट्रीम को टाइमस्टैम्प द्वारा क्रमबद्ध किया जाता है।


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
Line 33: Line 32:
ON Orders.orderId = Trades.orderId;
ON Orders.orderId = Trades.orderId;
</syntaxhighlight>
</syntaxhighlight>
एक अन्य नमूना कोड टुकड़ा चर्च की घंटी बजने, टक्सीडो या सुबह के सूट में एक आदमी की उपस्थिति, बहने वाले सफेद गाउन में एक महिला और हवा में उड़ते चावल जैसी बाहरी घटनाओं के प्रवाह के बीच शादियों का पता लगाता है। एक जटिल या समग्र घटना वह है जो व्यक्तिगत साधारण घटनाओं से होती है: एक शादी हो रही है।
एक अन्य प्रतिदर्श कोड खंड बाहरी "घटनाओं" के संचार के बीच शादियों का पता लगाता है, जैसे कि चर्च की घंटियाँ बजना, टक्सीडो पहने एक आदमी की उपस्थिति या सुबह का सूट पहने हुए सफेद गाउन में एक महिला और हवा में उड़ते चावल, एक "जटिल" या "मिश्रित" घटना है जो व्यक्तिगत सरल घटनाओं से अनुमान लगाती है कि एक शादी हो रही है।


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
Line 43: Line 42:
ACTION Wedding
ACTION Wedding
</syntaxhighlight>
</syntaxhighlight>
== पिछले समानांतर प्रतिमानों से तुलना ==
== पिछले समानांतर प्रतिमानों से तुलना ==
बेसिक कंप्यूटर एक अनुक्रमिक निष्पादन प्रतिमान से शुरू हुए। पारंपरिक सेंट्रल प्रोसेसिंग यूनिट एकल निर्देश, एकल डेटा आधारित हैं, जिसका अर्थ है कि वे अवधारणात्मक रूप से एक समय में केवल एक ही ऑपरेशन करते हैं।
आधारिक कंप्यूटरों का प्रारम्भिक अनुक्रमिक निष्पादन प्रतिमान से हुआ है। पारंपरिक सीपीयू एसआईएसडी आधारित होते हैं, जिसका अर्थ है कि वे वैचारिक रूप से एक समय में केवल एक ही ऑपरेशन करते हैं। जैसे-जैसे विश्व मे कंप्यूटिंग आवश्यकताएं विकसित हुईं, प्रबंधित किए जाने वाले डेटा की मात्रा बहुत तीव्रता से बढ़ी जिससे यह स्पष्ट था कि अनुक्रमिक प्रोग्रामिंग मॉडल प्रसंस्करण क्षमता की बढ़ती आवश्यकता का सामना नहीं कर सका। और अधिक मात्रा में गणना करने के लिए वैकल्पिक तरीके खोजने पर कई प्रयास किए गए हैं लेकिन एकमात्र समाधान समानांतर निष्पादन के कुछ स्तर का लाभ प्राप्त था। उन प्रयासों का परिणाम एसआईएमडी था, एक प्रोग्रामिंग प्रतिमान जो एक निर्देश को (अलग-अलग) डेटा के कई उदाहरणों पर प्रयुक्त करने की स्वीकृति देता था। अधिकांश समय एसआईएमडी का उपयोग एसडब्ल्यूएआर परिवेश में किया जा रहा था। अधिक जटिल संरचनाओं का उपयोग करके कोई भी एमआईएमडी समानता भी प्राप्त कर सकता है।
जैसे-जैसे दुनिया की कंप्यूटिंग ज़रूरतें विकसित हुईं, प्रबंधित किए जाने वाले डेटा की मात्रा बहुत तेज़ी से बढ़ी। यह स्पष्ट था कि अनुक्रमिक प्रोग्रामिंग मॉडल प्रसंस्करण शक्ति की बढ़ती आवश्यकता का सामना नहीं कर सका। भारी मात्रा में संगणना करने के लिए वैकल्पिक तरीके खोजने के लिए कई प्रयास किए गए हैं लेकिन एकमात्र समाधान समानांतर निष्पादन के कुछ स्तर का फायदा उठाना था। उन प्रयासों का परिणाम एकल निर्देश, एकाधिक डेटा, एक प्रोग्रामिंग प्रतिमान था जिसने एक निर्देश को (अलग) डेटा के कई उदाहरणों पर लागू करने की अनुमति दी थी। अधिकांश समय, SIMD का उपयोग [[SWAR]] वातावरण में किया जा रहा था। अधिक जटिल संरचनाओं का उपयोग करके, एकाधिक निर्देश, एकाधिक डेटा समांतरता भी हो सकती है।


यद्यपि वे दो प्रतिमान कुशल थे, वास्तविक दुनिया के कार्यान्वयन स्मृति संरेखण समस्याओं से लेकर तुल्यकालन के मुद्दों और सीमित समानता तक की सीमाओं से ग्रस्त थे। स्टैंड-अलोन घटकों के रूप में केवल कुछ SIMD प्रोसेसर बचे हैं; अधिकांश मानक सीपीयू में एम्बेडेड थे।
यद्यपि वे दो प्रतिमान कुशल थे, वास्तविक दुनिया के कार्यान्वयन मेमोरी संरेखण समस्याओं से लेकर समकालिक समस्याओ और सीमित समानता तक सीमाओं से ग्रस्त थे। स्वचलित घटकों के रूप में केवल कुछ एसआईएमडी प्रोसेसर ही बचे हैं। अधिकांश मानक सीपीयू में अंतः स्थापित थे।


100 4-घटक [[वेक्टर (ज्यामितीय)]] (यानी कुल 400 नंबर) वाले दो सरणियों को जोड़ने वाले एक साधारण कार्यक्रम पर विचार करें।
100* 4-घटक [[वेक्टर (ज्यामितीय)|सदिश (ज्यामितीय)]] अर्थात कुल 400 संख्या वाली दो तालिकाओ को जोड़ने वाले एक साधारण प्रोग्राम पर विचार करें।


=== पारंपरिक, अनुक्रमिक प्रतिमान ===
=== पारंपरिक, अनुक्रमिक प्रतिमान ===
Line 58: Line 54:
     result[i] = source0[i] + source1[i];
     result[i] = source0[i] + source1[i];
</syntaxhighlight>
</syntaxhighlight>
यह अनुक्रमिक प्रतिमान है जो सबसे अधिक परिचित है। भिन्नताएं मौजूद हैं (जैसे आंतरिक लूप, संरचनाएं और ऐसे), लेकिन अंततः वे उस निर्माण के लिए उबालते हैं।
यह अनुक्रमिक प्रतिमान है जो सबसे अधिक परिचित है। इसमे अनेक विविधताएं सम्मिलित हैं जैसे कि आंतरिक लूप, संरचनाएं और इसी प्रकार लेकिन अंततः वे उस निर्माण तक सीमित हो जाती हैं।


=== समानांतर SIMD प्रतिमान, पैक्ड रजिस्टर (SWAR) ===
=== समानांतर एसआईएमडी प्रतिमान, पैक्ड रजिस्टर (एसडब्ल्यूएआर) ===
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
for (int el = 0; el < 100; el++) // for each vector
for (int el = 0; el < 100; el++) // for each vector
     vector_sum(result[el], source0[el], source1[el]);
     vector_sum(result[el], source0[el], source1[el]);
</syntaxhighlight>
</syntaxhighlight>
यह वास्तव में अतिसरलीकृत है। यह निर्देश मानता है <code>vector_sum</code> काम करता है। यद्यपि [[आंतरिक कार्य]] के साथ ऐसा ही होता है, वास्तव में यहां बहुत अधिक जानकारी पर ध्यान नहीं दिया जाता है जैसे वेक्टर घटकों की संख्या और उनके डेटा प्रारूप। यह स्पष्टता के लिए किया जाता है।
यह वास्तव में अतिसरलीकृत है। यह मानता है कि निर्देश <code>vector_sum</code> कार्य करता है। यद्यपि [[आंतरिक कार्य|आंतरिक अनुदेश]] के साथ ऐसा ही होता है, वास्तव में यहां बहुत अधिक जानकारी पर ध्यान नहीं दिया जाता है जैसे सदिश घटकों की संख्या और उनके डेटा प्रारूप मे यह स्पष्टता के लिए किया जाता है।


हालाँकि, आप देख सकते हैं कि यह विधि डिकोड किए गए निर्देशों की संख्या को numElements * ComponentsPerElement से numElements तक कम कर देती है। कूदने के निर्देशों की संख्या भी कम हो जाती है, क्योंकि लूप कम बार चलता है। ये लाभ चार गणितीय संक्रियाओं के समानांतर निष्पादन से उत्पन्न होते हैं।
हालाँकि, आप देख सकते हैं, यह विधि डिकोड किए गए निर्देशों की संख्या को <code>numElements</code> <code>PerElement</code> से <code>numElements</code> तक अपेक्षाकृत कम कर देती है। जंप निर्देशों की संख्या भी कम हो गई है, क्योंकि लूप कम बार चलाया जाता है। ये लाभ चार गणितीय परिचालनों के समानांतर निष्पादन के परिणामस्वरूप होते हैं।


हालांकि क्या हुआ है कि पैक किए गए SIMD रजिस्टर में एक निश्चित मात्रा में डेटा होता है, इसलिए अधिक समानता प्राप्त करना संभव नहीं है। गति कुछ हद तक उस धारणा से सीमित है जिसे हमने चार समानांतर संचालन करने के लिए बनाया है (कृपया ध्यान दें कि यह [[AltiVec]] और [[स्ट्रीमिंग SIMD एक्सटेंशन]] दोनों के लिए सामान्य है)।
हालाँकि हुआ यह है कि पैक किए गए एसआईएमडी रजिस्टर में एक निश्चित मात्रा में डेटा होता है इसलिए अधिक समानता प्राप्त करना संभव नहीं है। गति में वृद्धि कुछ स्थिति तक उस धारणा से सीमित है जो हमने चार समानांतर संचालन करने के लिए बनाई थी। कृपया ध्यान दें कि यह <code>AltiVec</code> और एसएसई दोनों के लिए सामान्य है।


=== समानांतर धारा प्रतिमान (SIMD/MIMD) ===
=== समानांतर धारा प्रतिमान (एसआईएमडी/एमआईएमडी) ===
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
// This is a fictional language for demonstration purposes.
// This is a fictional language for demonstration purposes.
Line 78: Line 74:
result = kernel.invoke(elements)
result = kernel.invoke(elements)
</syntaxhighlight>
</syntaxhighlight>
इस प्रतिमान में, प्रत्येक घटक ब्लॉक को अलग से परिभाषित करने के बजाय, पूरे डेटासेट को परिभाषित किया गया है। डेटा के सेट का वर्णन पहली दो पंक्तियों में माना जाता है। उसके बाद, परिणाम स्रोतों और कर्नेल से अनुमान लगाया जाता है। सरलता के लिए, इनपुट और आउटपुट डेटा के बीच 1:1 मैपिंग होती है, लेकिन ऐसा होना ज़रूरी नहीं है। एप्लाइड कर्नेल भी अधिक जटिल हो सकते हैं।
इस प्रतिमान में प्रत्येक घटक ब्लॉक को अलग से परिभाषित करने के अतिरिक्त संपूर्ण डेटा समुच्चय को परिभाषित किया गया है। डेटा के समुच्चय का वर्णन पहली दो पंक्तियों में किया जाना माना जाता है। उसके बाद स्रोतों और कर्नेल से परिणाम का अनुमान लगाया जाता है। सरलता के लिए इनपुट और आउटपुट डेटा के बीच 1:1 समानता है लेकिन इसकी आवश्यकता नहीं है। प्रयुक्त संख्या भी अधिक जटिल हो सकती है।


इस प्रतिमान का कार्यान्वयन आंतरिक रूप से लूप को अनलॉक कर सकता है। यह थ्रूपुट को चिप जटिलता के साथ स्केल करने की अनुमति देता है, आसानी से सैकड़ों एएलयू का उपयोग करता है।<ref>IEEE Journal of Solid-State Circuits:[http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4443192 "A Programmable 512 GOPS Stream Processor for Signal, Image, and Video Processing"], Stanford University and Stream Processors, Inc.</ref><ref>Khailany, Dally, Rixner, Kapasi, Owens and Towles: [http://cva.stanford.edu/publications/2003/khailany_im_scalability.pdf "Exploring VLSI Scalability of Stream Processors"], Stanford and Rice University.</ref> जटिल डेटा पैटर्न का उन्मूलन इस अतिरिक्त शक्ति को उपलब्ध कराता है।
इस प्रतिमान का कार्यान्वयन आंतरिक रूप से एक लूप को विवृत कर सकता है। यह चिप जटिलता के साथ थ्रूपुट को स्केल करने की स्वीकृति देती है। यह आसानी से सैकड़ों एएलयू का उपयोग करता है।<ref>IEEE Journal of Solid-State Circuits:[http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4443192 "A Programmable 512 GOPS Stream Processor for Signal, Image, and Video Processing"], Stanford University and Stream Processors, Inc.</ref><ref>Khailany, Dally, Rixner, Kapasi, Owens and Towles: [http://cva.stanford.edu/publications/2003/khailany_im_scalability.pdf "Exploring VLSI Scalability of Stream Processors"], Stanford and Rice University.</ref> जटिल डेटा पैटर्न का उन्मूलन इस अतिरिक्त क्षमता को उपलब्ध कराता है।


जबकि स्ट्रीम प्रोसेसिंग SIMD/MIMD प्रोसेसिंग की एक शाखा है, उन्हें भ्रमित नहीं होना चाहिए। यद्यपि SIMD कार्यान्वयन अक्सर स्ट्रीमिंग तरीके से काम कर सकता है, उनका प्रदर्शन तुलनीय नहीं है: मॉडल एक बहुत ही अलग उपयोग पैटर्न की कल्पना करता है जो अपने आप में कहीं अधिक प्रदर्शन की अनुमति देता है।
जबकि स्ट्रीम प्रसंस्करण एसआईएमडी/एमआईएमडी प्रसंस्करण की एक शाखा है, उन्हें भ्रमित नहीं होना चाहिए। हालाँकि एसआईएमडी कार्यान्वयन प्रायः "स्ट्रीमिंग" प्रकार से कार्य कर सकता है। उनका प्रदर्शन तुलनीय नहीं है। मॉडल एक बहुत ही अलग उपयोग पैटर्न की कल्पना करता है जो अपने आप में कहीं अधिक प्रदर्शन की स्वीकृति देता है।


यह ध्यान दिया गया है कि मानक सीपीयू जैसे सामान्य प्रोसेसर पर लागू होने पर, केवल 1.5x स्पीडअप तक पहुंचा जा सकता है।<ref>Gummaraju and Rosenblum, [http://www.cs.utexas.edu/users/skeckler/wild04/Paper14.pdf "Stream processing in General-Purpose Processors"], Stanford University.</ref> इसके विपरीत, एड-हॉक स्ट्रीम प्रोसेसर आसानी से 10 गुना से अधिक प्रदर्शन तक पहुँचते हैं, मुख्य रूप से अधिक कुशल मेमोरी एक्सेस और समानांतर प्रसंस्करण के उच्च स्तर के लिए जिम्मेदार हैं।<ref>Kapasi, Dally, Rixner, Khailany, Owens, Ahn and Mattson, [http://cva.stanford.edu/publications/2003/ieeecomputer_stream.pdf "Programmable Stream Processors"], Universities of Stanford, Rice, California (Davis) and Reservoir Labs.</ref>
यह देखा गया है कि जब मानक सीपीयू जैसे सामान्य प्रोसेसर पर प्रयुक्त किया जाता है, तो केवल 1.5x स्पीडअप तक पहुंचा जा सकता है।<ref>Gummaraju and Rosenblum, [http://www.cs.utexas.edu/users/skeckler/wild04/Paper14.pdf "Stream processing in General-Purpose Processors"], Stanford University.</ref> इसके विपरीत, एड-हॉक स्ट्रीम प्रसंस्करण आसानी से 10 गुना से अधिक प्रदर्शन तक अभिगम्य हो जाते हैं। जिसका मुख्य कारण अधिक कुशल मेमोरी नियंत्रण और समानांतर प्रसंस्करण के उच्च स्तर हैं।<ref>Kapasi, Dally, Rixner, Khailany, Owens, Ahn and Mattson, [http://cva.stanford.edu/publications/2003/ieeecomputer_stream.pdf "Programmable Stream Processors"], Universities of Stanford, Rice, California (Davis) and Reservoir Labs.</ref>
हालांकि मॉडल द्वारा अनुमत लचीलेपन की विभिन्न डिग्री हैं, स्ट्रीम प्रोसेसर आमतौर पर कर्नेल या स्ट्रीम आकार पर कुछ सीमाएं लगाते हैं। उदाहरण के लिए, उपभोक्ता हार्डवेयर में अक्सर उच्च-परिशुद्धता गणित करने की क्षमता का अभाव होता है, जटिल अप्रत्यक्ष श्रृंखलाओं का अभाव होता है या निर्देशों की संख्या पर कम सीमा प्रस्तुत करता है जिसे निष्पादित किया जा सकता है।
 
यद्यपि मॉडल द्वारा अनुमत नम्यता की विभिन्न डिग्री हैं तो स्ट्रीम प्रसंस्करण सामान्यतः कर्नेल या स्ट्रीम आकार पर कुछ सीमाएं लगाते हैं। उदाहरण के लिए उपभोक्ता हार्डवेयर में प्रायः उच्च-परिशुद्धता गणित करने की क्षमता का अभाव होता है, जटिल अप्रत्यक्ष श्रृंखलाओं का अभाव होता है या निष्पादित किए जा सकने वाले निर्देशों की संख्या पर अपेक्षाकृत कम सीमाएँ प्रस्तुत होती हैं।


== अनुसंधान ==
== अनुसंधान ==
{{specific|section|date=February 2023}}
[[ स्टैनफोर्ड विश्वविद्यालय |स्टैनफोर्ड विश्वविद्यालय]] स्ट्रीम प्रसंस्करण परियोजनाओं में 1999 में प्रारम्भ किया गया था। स्टैनफोर्ड वास्तविक समय प्रोग्रामेबल शेडिंग परियोजना सम्मिलित है।<ref>{{Cite web |title= स्टैनफोर्ड रियल-टाइम प्रोग्रामेबल शेडिंग प्रोजेक्ट|work= Research group web site |author= Eric Chan |url= http://graphics.stanford.edu/projects/shading/ |access-date= March 9, 2017 }}</ref> काल्पनिक प्रोटोटाइप को 2002 में विकसित किया गया था।<ref>{{Cite web |title= इमेजिन - इमेज और सिग्नल प्रोसेसर|work= Group web site |url= http://cva.stanford.edu/projects/imagine/ |access-date= March 9, 2017 }}</ref> मेरिमैक नामक एक परियोजना लगभग 2004 तक चल रही है।<ref>{{Cite web |title= मेरिमैक - स्टैनफोर्ड स्ट्रीमिंग सुपरकंप्यूटर प्रोजेक्ट|work= Group web site |url= http://merrimac.stanford.edu/ |url-status= dead |archive-date= December 18, 2013 |archive-url= https://web.archive.org/web/20131218194055/http://merrimac.stanford.edu/ |access-date= March 9, 2017 }}</ref> एटी और टी ने स्ट्रीम-एन्हांस्ड प्रोसेसर पर भी शोध किया था क्योंकि ग्राफिक्स प्रसंस्करण इकाइयां गति और कार्यक्षमता दोनों में तीव्रता से विकसित हुईं है। इन प्रारम्भिक दिनों से दर्जनों स्ट्रीम प्रसंस्करण भाषाओं के साथ-साथ विशेष हार्डवेयर भी विकसित किए गए हैं।
[[ स्टैनफोर्ड विश्वविद्यालय ]] स्ट्रीम प्रोसेसिंग प्रोजेक्ट्स में स्टैनफोर्ड रियल-टाइम प्रोग्रामेबल शेडिंग प्रोजेक्ट शामिल है जो 1999 में शुरू हुआ था।<ref>{{Cite web |title= स्टैनफोर्ड रियल-टाइम प्रोग्रामेबल शेडिंग प्रोजेक्ट|work= Research group web site |author= Eric Chan |url= http://graphics.stanford.edu/projects/shading/ |access-date= March 9, 2017 }}</ref>
इमेजिन नामक एक प्रोटोटाइप को 2002 में विकसित किया गया था।<ref>{{Cite web |title= इमेजिन - इमेज और सिग्नल प्रोसेसर|work= Group web site |url= http://cva.stanford.edu/projects/imagine/ |access-date= March 9, 2017 }}</ref>
मेरिमैक नामक एक परियोजना लगभग 2004 तक चलती रही।<ref>{{Cite web |title= मेरिमैक - स्टैनफोर्ड स्ट्रीमिंग सुपरकंप्यूटर प्रोजेक्ट|work= Group web site |url= http://merrimac.stanford.edu/ |url-status= dead |archive-date= December 18, 2013 |archive-url= https://web.archive.org/web/20131218194055/http://merrimac.stanford.edu/ |access-date= March 9, 2017 }}</ref>
एटी एंड टी ने स्ट्रीम-एन्हांस्ड प्रोसेसर पर भी शोध किया क्योंकि ग्राफिक्स प्रोसेसिंग इकाइयां गति और कार्यक्षमता दोनों में तेजी से विकसित हुईं।{{ref|GPUasSTREAM}} इन शुरुआती दिनों से, दर्जनों स्ट्रीम प्रोसेसिंग भाषाएं विकसित की गई हैं, साथ ही विशेष हार्डवेयर भी।


=== प्रोग्रामिंग मॉडल नोट्स ===
=== प्रोग्रामिंग मॉडल नोट्स ===
समानांतर प्रसंस्करण के दायरे में सबसे तात्कालिक चुनौती उपयोग किए गए हार्डवेयर आर्किटेक्चर के प्रकार में नहीं है, लेकिन स्वीकार्य प्रदर्शन के साथ वास्तविक दुनिया के वातावरण में सिस्टम को प्रोग्राम करना कितना आसान होगा। इमेजिन जैसी मशीनें स्वचालित निर्भरता, मेमोरी आवंटन और डायरेक्ट मेमोरी एक्सेस शेड्यूलिंग के साथ सीधे सिंगल-थ्रेडेड मॉडल का उपयोग करती हैं। यह अपने आप में एमआईटी और स्टैनफोर्ड में प्रोग्रामर, टूल्स और हार्डवेयर के बीच कार्यों की इष्टतम परत खोजने के शोध का परिणाम है। प्रोग्रामर एल्गोरिदम को समानांतर हार्डवेयर में मैप करने में टूल को मात देते हैं, और टूल प्रोग्रामर को सबसे स्मार्ट मेमोरी एलोकेशन स्कीम आदि का पता लगाने में मात देते हैं। विशेष रूप से चिंता का विषय MIMD डिज़ाइन हैं जैसे [[सेल (माइक्रोप्रोसेसर)]], जिसके लिए प्रोग्रामर को कई कोर में एप्लिकेशन विभाजन से निपटने की आवश्यकता होती है। और प्रक्रिया तुल्यकालन और लोड संतुलन से निपटें।
समानांतर प्रसंस्करण के क्षेत्र में सबसे तात्कालिक चुनौती उपयोग किए गए हार्डवेयर संरचना के प्रकार में नहीं है, लेकिन वास्तविक समाज के वातावरण में स्वीकार्य प्रदर्शन के साथ सिस्टम को प्रोग्राम करना कितना आसान होगा। जैसी मशीनें स्वचालित निर्भरता, मेमोरी आवंटन और डीएमए शेड्यूलिंग के साथ एक सीधे एकल-थ्रेडेड मॉडल का उपयोग करती हैं। यह अपने आप में प्रोग्रामर, टूल और हार्डवेयर के बीच कार्यों की इष्टतम परत खोजने में एमआईटी और स्टैनफोर्ड के शोध का परिणाम है। प्रोग्रामर एल्गोरिदम को समानांतर हार्डवेयर में मैप करने में टूल को मात देते हैं और टूल सबसे स्मार्ट मेमोरी आवंटन योजनाओं आदि का पता लगाने में प्रोग्रामर को मात देते हैं। विशेष रूप से चिंता का विषय सेल जैसे एमआईएमडी डिजाइन हैं, जिसके लिए प्रोग्रामर को कई कोर में एप्लिकेशन विभाजन से निपटने और प्रक्रिया समकालिक से निपटने की आवश्यकता होती है। एसआईएमडी प्रोग्रामिंग का एक दोष ऐरे-ऑफ़-स्ट्रक्चर्स (एओएस) और स्ट्रक्चर-ऑफ़-ऐरेज़ (एसओए) का परिणाम था। प्रोग्रामर प्रायः मेमोरी में इकाइयों का प्रतिनिधित्व करते हैं। उदाहरण के लिए 3डी स्पेस में एक कण का स्थान, गेंद का रंग और उसका आकार नीचे दिया गया है:<syntaxhighlight lang="c">
 
SIMD प्रोग्रामिंग की एक खामी संरचना-की-सरणी (AoS) और संरचना-की-सरणी (SoA) का मुद्दा था। प्रोग्रामर अक्सर स्मृति में इकाइयों का प्रतिनिधित्व करते हैं, उदाहरण के लिए, 3डी अंतरिक्ष में एक कण का स्थान, गेंद का रंग और उसका आकार नीचे दिया गया है:
<syntaxhighlight lang="c">
  // A particle in a three-dimensional space.
  // A particle in a three-dimensional space.
struct particle_t {
struct particle_t {
Line 107: Line 97:
};
};
</syntaxhighlight>
</syntaxhighlight>
जब इन संरचनाओं में से कई स्मृति में मौजूद होते हैं तो उन्हें संरचनाओं (एओएस) टोपोलॉजी की एक सरणी में एक ऐरे डेटा संरचना बनाने के अंत में रखा जाता है। इसका मतलब यह है कि प्रत्येक कण के स्थान पर कुछ एल्गोरिदम लागू किया जाना चाहिए, बदले में इसे अन्य विशेषताओं वाले स्मृति स्थानों पर छोड़ देना चाहिए। यदि इन विशेषताओं की आवश्यकता नहीं है, तो इसका परिणाम CPU कैश के व्यर्थ उपयोग में होता है। इसके अतिरिक्त, एक SIMD निर्देश आमतौर पर उस डेटा की अपेक्षा करेगा जिस पर यह स्मृति में संगत होगा, तत्वों को [[डेटा संरचना संरेखण]] की भी आवश्यकता हो सकती है। डेटा के मेमोरी स्थान को संरचना से बाहर ले जाकर स्ट्रीम में कुशल पहुंच के लिए और एक को संचालित करने के लिए SIMD निर्देशों के लिए डेटा को बेहतर ढंग से व्यवस्थित किया जा सकता है। [[सरणियों की संरचना]] (SOA), जैसा कि नीचे दिखाया गया है, इसकी अनुमति दे सकती है।
जब इनमें से कई संरचनाएं मेमोरी में सम्मिलित होती हैं तो उन्हें संरचनाओं की एक सरणी (एओएस) टोपोलॉजी में एक सरणी बनाते हुए अंत तक रखा जाता है। इसका अर्थ यह है कि प्रत्येक कण के स्थान पर कुछ एल्गोरिदम प्रयुक्त किया जाना चाहिए, जिसके रूप मे इसे अन्य विशेषताओं वाले मेमोरी स्थानों को छोड़ देना चाहिए। यदि इन विशेषताओं की आवश्यकता नहीं है तो इसके परिणामस्वरूप सीपीयू कैश का व्यर्थ उपयोग होता है। इसके अतिरिक्त, एक एसआईएमडी निर्देश सामान्यतः यह उम्मीद करेगा कि वह जिस डेटा पर कार्य करेगा वह मेमोरी में निरंतर रहेगा, तत्वों को संरेखित करने की भी आवश्यकता हो सकती है। डेटा की मेमोरी एड्रेस को संरचना से बाहर ले जाकर स्ट्रीम में कुशल अभिगम्य के लिए और एसआईएमडी निर्देशों को संचालित करने के लिए डेटा को अपेक्षाकृत रूप से व्यवस्थित किया जा सकता है। सरणियों की संरचना (एसओए), जैसा कि नीचे दिखाया गया है, इसकी स्वीकृति दे सकती है।
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
struct particle_t {
struct particle_t {
Line 115: Line 105:
};
};
</syntaxhighlight>
</syntaxhighlight>
संरचना में डेटा रखने के बजाय, यह डेटा के लिए केवल पॉइंटर्स (मेमोरी लोकेशन) रखता है। कमियां यह हैं कि यदि किसी वस्तु की एक से अधिक विशेषताओं को संचालित किया जाना है, तो वे अब स्मृति में दूर हो सकती हैं और इसलिए कैश मिस हो सकती हैं। संरेखण और किसी भी आवश्यक पैडिंग से मेमोरी उपयोग में वृद्धि होती है। कुल मिलाकर, स्मृति प्रबंधन अधिक जटिल हो सकता है यदि संरचनाओं को उदाहरण के लिए जोड़ा और हटाया जाता है।
डेटा को संरचना में रखने के अतिरिक्त यह डेटा के लिए केवल पॉइंटर्स (मेमोरी एड्रेस) रखता है। दोष यह हैं कि यदि किसी वस्तु की एकाधिक विशेषताओं को संचालित किया जाना है तो वे अब मेमोरी में दूर हो सकते हैं और परिणामस्वरूप कैश मिस हो सकता है। संरेखण और किसी भी आवश्यक पैडिंग से मेमोरी उपयोग में वृद्धि होती है। सामान्यतः यदि उदाहरण के लिए संरचनाओं को जोड़ा और हटाया जाता है, तो मेमोरी प्रबंधन अधिक जटिल हो सकता है।


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


अधिक आधुनिक स्ट्रीम प्रोसेसिंग फ्रेमवर्क डेटा को लिटरल स्ट्रीम के रूप में संरचित करने के लिए एक FIFO जैसा इंटरफ़ेस प्रदान करते हैं। यह अमूर्त
अत्यधिक आधुनिक स्ट्रीम प्रसंस्करण फ्रेमवर्क डेटा को शाब्दिक स्ट्रीम के रूप में संरचित करने के लिए फीफो जैसा इंटरफ़ेस प्रदान करते हैं। यह अमूर्तता रनटाइम/हार्डवेयर को कुशल गणना के लिए उस ज्ञान का पूरा लाभ प्राप्त करने में सक्षम करते हुए डेटा निर्भरता को स्पष्ट रूप से निर्दिष्ट करने का एक साधन प्रदान करती है। सी++ के लिए अब तक के सबसे सरल{{citation needed|date=December 2018}} और सबसे कुशल{{citation needed|date=December 2018}} स्ट्रीम प्रसंस्करण प्रकारों में से एक राफ्टलिब है, जो C++ स्ट्रीम ऑपरेटरों का उपयोग करके डेटा संचार आरेख के रूप में स्वतंत्र कंप्यूट कर्नेल को एक साथ जोड़ने में सक्षम बनाता है।
इसका पूर्ण लाभ लेने के लिए रनटाइम/हार्डवेयर को सक्षम करते हुए निहित रूप से डेटा निर्भरताओं को निर्दिष्ट करने का एक साधन प्रदान करता है
कुशल गणना के लिए ज्ञान। सबसे सरल में से एक{{citation needed|date=December 2018}} और सबसे कुशल{{citation needed|date=December 2018}} C++ के लिए आज तक की स्ट्रीम प्रोसेसिंग पद्धतियां,
[[RaftLib]] है, जो C++ स्ट्रीम ऑपरेटरों का उपयोग करके डेटा प्रवाह ग्राफ़ के रूप में स्वतंत्र कंप्यूट कर्नेल को एक साथ जोड़ने में सक्षम बनाता है। उदहारण के लिए:
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
#include <raft>
#include <raft>
Line 161: Line 146:
}
}
</syntaxhighlight>
</syntaxhighlight>
=== संचार प्रसंस्करण के लिए गणना मॉडल ===
उच्च-स्तरीय भाषाओं में स्ट्रीमिंग अनुप्रयोगों को निर्दिष्ट करने के अतिरिक्त, कम्प्यूटेशन के मॉडल (एमओसीएस) का भी [[ डेटा प्रवाह |डेटा संचार]] मॉडल और प्रक्रिया-आधारित मॉडल के रूप में व्यापक रूप से उपयोग किया गया है।


=== सामान्य प्रसंस्करण संरचना ===
ऐतिहासिक रूप से सीपीयू ने अपेक्षाकृत धीमी गति से बढ़ती बाहरी मेमोरी बैंडविड्थ की तुलना में निरंतर बढ़ते प्रदर्शन के कारण मेमोरी नियंत्रण इष्टतमीकरण के विभिन्न स्तरों को प्रयुक्त करना प्रारम्भ कर दिया है। जैसे-जैसे यह अंतर बढ़ता गया, बड़ी मात्रा में डाई क्षेत्र मेमोरी विलंबता को छिपाने के लिए समर्पित कर दिया गया है। चूँकि उन कुछ एएलयू के लिए जानकारी और ऑपकोड लाना कीमती है। अपेक्षाकृत बहुत कम डाई क्षेत्र वास्तविक गणितीय मशीनरी के लिए समर्पित है। सामान्यतः अनुमान के अनुसार इसे 10% से कम माना जाता है।


=== धारा प्रसंस्करण के लिए गणना के मॉडल ===
स्ट्रीम प्रसंस्करण पर एक समान संरचना सम्मिलित है लेकिन नए प्रोग्रामिंग मॉडल के लिए धन्यवाद, प्रबंधन के लिए समर्पित ट्रांजिस्टर की मात्रा वास्तव में अपेक्षाकृत बहुत कम है।
उच्च-स्तरीय भाषाओं में स्ट्रीमिंग अनुप्रयोगों को निर्दिष्ट करने के अलावा, कम्प्यूटेशन के मॉडल (MoCs) का भी [[ डेटा प्रवाह ]] मॉडल और प्रक्रिया-आधारित मॉडल के रूप में व्यापक रूप से उपयोग किया गया है।
 
=== सामान्य प्रोसेसर आर्किटेक्चर ===
ऐतिहासिक रूप से, सीपीयू ने मेमोरी एक्सेस ऑप्टिमाइज़ेशन के विभिन्न स्तरों को लागू करना शुरू कर दिया क्योंकि अपेक्षाकृत धीमी गति से बढ़ने वाली बाहरी मेमोरी बैंडविड्थ की तुलना में लगातार बढ़ते प्रदर्शन के कारण। जैसे-जैसे यह अंतर बढ़ता गया, बड़ी मात्रा में मरने का क्षेत्र मेमोरी लेटेंसी को छिपाने के लिए समर्पित हो गया। चूंकि उन कुछ ALUs के लिए जानकारी और ऑपकोड प्राप्त करना महंगा है, बहुत कम डाई क्षेत्र वास्तविक गणितीय मशीनरी के लिए समर्पित है (एक मोटे अनुमान के रूप में, इसे 10% से कम मानें)।
 
स्ट्रीम प्रोसेसर पर एक समान आर्किटेक्चर मौजूद है लेकिन नए प्रोग्रामिंग मॉडल के लिए धन्यवाद, प्रबंधन के लिए समर्पित ट्रांजिस्टर की मात्रा वास्तव में बहुत कम है।


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


स्ट्रीम प्रोसेसर आमतौर पर एक तेज, कुशल, मालिकाना मेमोरी बस से लैस होता है (क्रॉसबार स्विच अब आम हैं, बहु-बसों को अतीत में नियोजित किया गया है)। मेमोरी लेन की सटीक मात्रा बाजार की सीमा पर निर्भर है। जैसा कि लिखा गया है, अभी भी 64-बिट वाइड इंटरकनेक्शन (प्रवेश स्तर) के आसपास हैं। अधिकांश मिड-रेंज मॉडल एक तेज 128-बिट क्रॉसबार स्विच मैट्रिक्स (4 या 2 सेगमेंट) का उपयोग करते हैं, जबकि हाई-एंड मॉडल थोड़ी धीमी क्रॉसबार के साथ भारी मात्रा में मेमोरी (वास्तव में 512 एमबी तक) तैनात करते हैं जो 256 बिट चौड़ा है। इसके विपरीत, [[Intel Pentium]] से कुछ [[Athlon 64]] के मानक प्रोसेसर में केवल एक 64-बिट चौड़ा डेटा बस है।
स्ट्रीम प्रसंस्करण सामान्यतः तीव्र, कुशल, स्वामित्व वाली मेमोरी से बना होता है। क्रॉसबार स्विच अब सामान्य हैं, अतीत में बहु-बसों को नियोजित किया गया है। मेमोरी लेन की शुद्ध मात्रा विणपन सीमा पर निर्भर है। जैसा कि यह लिखा गया है कि प्रवेश-स्तर के आसपास अभी भी 64-बिट विस्तृत इंटरकनेक्शन हैं। अधिकांश मध्य-श्रेणी के मॉडल तीव्र 128-बिट क्रॉसबार स्विच मैट्रिक्स (4 या 2 सेगमेंट) का उपयोग करते हैं, जबकि उच्च-अंत मॉडल 256 बिट चौड़े धीमे क्रॉसबार के साथ भारी मात्रा में मेमोरी (वास्तव में 512 एमबी तक) सक्रिय करते हैं। इसके विपरीत, इंटेल पेंटियम से लेकर कुछ एथलॉन 64 तक के मानक प्रोसेसर में केवल एक 64-बिट वाइड डेटा बस होती है।


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


स्ट्रीम प्रोसेसर की निष्पादन इकाइयों (ALUs क्लस्टर) की SIMD प्रकृति के कारण, पढ़ने/लिखने के संचालन के थोक में होने की उम्मीद है, इसलिए मेमोरी को कम विलंबता के बजाय उच्च बैंडविड्थ के लिए अनुकूलित किया जाता है (यह [[Rambus]] और [[DDR SDRAM]] से भिन्न है, उदाहरण)। यह कुशल मेमोरी बस वार्ताओं के लिए भी अनुमति देता है।
स्ट्रीम प्रसंस्करण की निष्पादन इकाइयों (एएलयू क्लस्टर) की एसआईएमडी प्रकृति के कारण पढ़ने/लिखने का संचालन एकत्रमें होने की उम्मीद है। इसलिए मेमोरी को कम विलंबता के अतिरिक्त उच्च बैंडविड्थ के लिए अनुकूलित किया जाता है। यह रैम्बस और डीडीआर एसडीआरएएम से एक अंतर है, क्योंकि यह कुशल मेमोरी बस वार्ता की स्वीकृति देता है। स्ट्रीम प्रसंस्करण का अधिकांश (90%) कार्य ऑन-चिप से किया जाता है, जिसके लिए मेमोरी में संग्रहीत करने के लिए वैश्विक डेटा का केवल 1% आवश्यक होता है। यह वह स्थान है जहाँ कर्नेल अस्थायी और निर्भरता को जानना भुगतान करता है।


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


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


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


उन एएलयू को डेटा के साथ लाने के लिए, प्रत्येक एएलयू स्थानीय रजिस्टर फाइलों (एलआरएफ) से लैस है, जो मूल रूप से इसके हैंप्रयोग करने योग्य रजिस्टर।
=== हार्डवेयर मे लूप समस्या ===
यद्यपि स्ट्रीमिंग प्रकार से कंप्यूटिंग करते समय मुख्यधारा के जीपीयू से भी तीव्रता के क्रम की संभावना की जा सकती है, लेकिन सभी एप्लिकेशन इससे लाभान्वित नहीं होते हैं। संचार विलंब वास्तव में सबसे बड़ी समस्या है। हालाँकि [[पीसीआई एक्सप्रेस]] ने पूर्ण-डुप्लेक्स संचार के साथ इसमें सुधार किया है, लेकिन जीपीयू (और संभवतः एक सामान्य स्ट्रीम प्रसंस्करण) को कार्य करने में संभवतः लंबा समय लगेगा। इसका अर्थ यह है कि छोटे डेटा समुच्चय के लिए उनका उपयोग करना सामान्यतः प्रतिकूल है क्योंकि कर्नेल रूपांतरण के लिए एक कीमती संचार है, स्ट्रीम संरचना में छोटी स्ट्रीम के लिए जुर्माना भी लगता है। इस व्यवहार को लघु स्ट्रीम प्रभाव कहा जाता है।<!-- In a revision (as of 07:40, 8 January 2008) an user noted this was considered not relevant. Since those issues are slightly covered in the references, it seems they are. Most of the statements here can be inferred from the references while others are simply involved in using PCIe transactions (so referencing them here doesn't seem a wise idea) - keeping the tag anyway to gain more attention. -->


यह त्रि-स्तरीय डेटा एक्सेस पैटर्न, अस्थायी डेटा को धीमी यादों से दूर रखना आसान बनाता है, इस प्रकार सिलिकॉन कार्यान्वयन को अत्यधिक कुशल और बिजली की बचत करता है।
स्ट्रीम प्रसंस्करण पर पाइपलाइनिंग एक बहुत व्यापक और भारी उपयोग की जाने वाली प्रथा है, जिसमें जीपीयू में 200 चरणों से अधिक की पाइपलाइन होती है। सेटिंग्स परिवर्तन की लागत संशोधित की जा रही सेटिंग पर निर्भर करती है लेकिन अब इसे सदैव कीमती माना जाता है। पाइपलाइन के विभिन्न स्तरों पर उन समस्याओं से बचने के लिए "उबर शेडर्स" और "टेक्सचर एटलस" जैसी कई तकनीकों को प्रयुक्त किया गया है। वे तकनीकें जीपीयू की प्रकृति के कारण खेल-उन्मुख हैं, लेकिन अवधारणाएं सामान्य स्ट्रीम प्रसंस्करण के लिए भी रुचि रखती हैं।
 
=== हार्डवेयर-इन-द-लूप मुद्दे ===
{{Confusing section|date=January 2008}} <!-- In a revision (as of 07:40, 8 January 2008) an user noted this was considered not relevant. Since those issues are slightly covered in the references, it seems they are. Most of the statements here can be inferred from the references while others are simply involved in using PCIe transactions (so referencing them here doesn't seem a wise idea) - keeping the tag anyway to gain more attention. -->
यद्यपि परिमाण स्पीडअप के क्रम की यथोचित अपेक्षा की जा सकती है (स्ट्रीमिंग तरीके से कंप्यूटिंग करते समय मुख्यधारा के जीपीयू से भी), सभी एप्लिकेशन इससे लाभान्वित नहीं होते हैं। संचार विलंबता वास्तव में सबसे बड़ी समस्या है। हालांकि [[पीसीआई एक्सप्रेस]] ने फुल-डुप्लेक्स संचार के साथ इसमें सुधार किया है, काम करने के लिए एक जीपीयू (और संभवतः एक सामान्य स्ट्रीम प्रोसेसर) प्राप्त करने में संभवतः काफी समय लगेगा। इसका मतलब यह है कि आमतौर पर छोटे डेटासेट के लिए उनका उपयोग करना प्रति-उत्पादक होता है। क्योंकि कर्नेल को बदलना एक महंगा ऑपरेशन है, स्ट्रीम आर्किटेक्चर भी छोटी धाराओं के लिए दंड लगाता है, एक व्यवहार जिसे शॉर्ट स्ट्रीम इफेक्ट कहा जाता है।
 
[[निर्देश पाइपलाइन]] स्ट्रीम प्रोसेसर पर एक बहुत व्यापक और अत्यधिक उपयोग की जाने वाली प्रथा है, जिसमें जीपीयू 200 चरणों से अधिक पाइपलाइनों की विशेषता है। सेटिंग बदलने की लागत सेटिंग के संशोधित होने पर निर्भर करती है लेकिन अब इसे हमेशा महंगा माना जाता है। पाइपलाइन के विभिन्न स्तरों पर उन समस्याओं से बचने के लिए, कई तकनीकों को तैनात किया गया है जैसे कि उबर शेडर्स और टेक्सचर एटलस। जीपीयू की प्रकृति के कारण वे तकनीकें गेम-ओरिएंटेड हैं, लेकिन अवधारणाएं सामान्य स्ट्रीम प्रोसेसिंग के लिए भी दिलचस्प हैं।


== उदाहरण ==
== उदाहरण ==
* कमोडोर [[अमिगा]] में [[ चमक ]] एक प्रारंभिक (लगभग 1985) ग्राफिक्स प्रोसेसर है जो 16 घटक बिट वैक्टर के तीन स्रोत धाराओं को 256 तरीकों से संयोजित करने में सक्षम है, जिसमें 16 घटक बिट वैक्टर से युक्त आउटपुट स्ट्रीम का उत्पादन होता है। कुल इनपुट स्ट्रीम बैंडविड्थ 42 मिलियन बिट प्रति सेकंड तक है। आउटपुट स्ट्रीम बैंडविड्थ 28 मिलियन बिट प्रति सेकंड तक है।
* कमोडोर अमीगा में ब्लिटर एक प्रारंभिक (लगभग 1985) ग्राफिक्स प्रोसेसर है जो 16 घटक बिट सदिशों से युक्त आउटपुट स्ट्रीम उत्पन्न करने के लिए 256 प्रकारों से 16 घटक बिट सदिश के तीन स्रोत स्ट्रीम को संयोजित करने में सक्षम है। कुल इनपुट स्ट्रीम बैंडविड्थ 42 मिलियन बिट प्रति सेकंड तक है। आउटपुट स्ट्रीम बैंडविड्थ 28 मिलियन बिट प्रति सेकंड तक है।
* कल्पना करना,<ref>[http://cva.stanford.edu/projects/imagine/ Imagine]</ref> [[स्टैनफोर्ड]] यूनिवर्सिटी के प्रोफेसर [[बिल डेली]] की अध्यक्षता में, एक लचीला आर्किटेक्चर है जो तेज और ऊर्जा कुशल दोनों होने का इरादा रखता है। परियोजना, मूल रूप से 1996 में कल्पना की गई थी, जिसमें वास्तुकला, सॉफ्टवेयर उपकरण, एक वीएलएसआई कार्यान्वयन और एक विकास बोर्ड शामिल था, जिसे डीएआरपीए, [[इंटेल]] और [[ टेक्सस उपकरण ]]्स द्वारा वित्त पोषित किया गया था।
* कल्पना कीजिए कि <ref>[http://cva.stanford.edu/projects/imagine/ Imagine]</ref> [[स्टैनफोर्ड]] विश्वविद्यालय के प्रोफेसर विलियम डेली की अध्यक्षता में एक नम्य वास्तुकला है जिसका उद्देश्य तीव्र और ऊर्जा कुशल दोनों है। मूल रूप से 1996 में कल्पना की गई इस परियोजना में वास्तुकला, सॉफ्टवेयर उपकरण, एक वीएलएसआई कार्यान्वयन और एक विकास बोर्ड सम्मिलित था, जिसे डीएआरपीए, [[इंटेल]] और [[ टेक्सस उपकरण |टेक्सस]] इंस्ट्रूमेंट्स द्वारा वित्त पोषित किया गया था।
* एक और स्टैनफोर्ड परियोजना, जिसे मेरिमैक कहा जाता है,<ref>[http://merrimac.stanford.edu/ Merrimac]</ref> इसका उद्देश्य स्ट्रीम-आधारित सुपरकंप्यूटर विकसित करना है। Merrimac एक ही तकनीक से निर्मित क्लस्टर-आधारित वैज्ञानिक कंप्यूटरों की तुलना में प्रति यूनिट लागत अधिक प्रदर्शन प्रदान करने के लिए एक स्ट्रीम आर्किटेक्चर और उन्नत इंटरकनेक्शन नेटवर्क का उपयोग करने का इरादा रखता है।
* स्टैनफोर्ड की एक अन्य परियोजना, जिसे मेरिमैक कहा जाता है।<ref>[http://merrimac.stanford.edu/ Merrimac]</ref> जिसका उद्देश्य स्ट्रीम-आधारित सुपरकंप्यूटर विकसित करना है। मेरिमैक का उद्देश्य एक ही तकनीक से निर्मित क्लस्टर-आधारित वैज्ञानिक कंप्यूटरों की तुलना में प्रति इकाई लागत पर अधिक प्रदर्शन प्रदान करने के लिए स्ट्रीम संरचना और उन्नत अंतःसंबंध नेटवर्क का उपयोग करने का है।
* स्टैनफोर्ड के इमेजिन प्रोजेक्ट के वाणिज्यिक स्पिन-ऑफ, स्ट्रीम प्रोसेसर्स, इंक से स्टॉर्म-1 परिवार की घोषणा [[आईएसएससीसी]] 2007 में एक फीचर प्रस्तुति के दौरान की गई थी। परिवार में 30 जीओपीएस से लेकर 220 16-बिट जीओपीएस तक के चार सदस्य हैं। संचालन प्रति सेकंड), सभी को [[TSMC]] में 130 नैनोमीटर प्रक्रिया में बनाया गया है। डिवाइस [[वीडियो कॉन्फ्रेंसिंग]], [[ मल्टीफ़ंक्शन प्रिंटर ]] और डिजिटल [[वीडियो निगरानी]] उपकरण सहित [[डिजिटल सिग्नल प्रोसेसर]] बाजार के उच्च अंत को लक्षित करते हैं।
* स्टैनफोर्ड के काल्पनिक परियोजना के वाणिज्यिक स्पिन-ऑफ, स्ट्रीम प्रसंस्करण्स, इंक के स्टॉर्म -1 समूह की घोषणा [[आईएसएससीसी]] 2007 में एक विशेषता प्रस्तुति के समय की गई थी। समूह में 30 जीओपीएस से लेकर 220 16-बिट जीओपीएस (अरबों ऑपरेशन) तक के चार सदस्य सम्मिलित हैं। सभी को 130 नैनोमीटर प्रक्रिया में टीएसएमसी में निर्मित किया गया है। ये उपकरण [[वीडियो कॉन्फ्रेंसिंग]], [[ मल्टीफ़ंक्शन प्रिंटर |बहु फ़ंक्शन प्रिंटर]] और डिजिटल वीडियो संरक्षण उपकरण सहित डीएसपी विणपन के उच्च स्तर को लक्षित करते हैं।
* [[जीपीयू]] व्यापक, उपभोक्ता-ग्रेड स्ट्रीम प्रोसेसर हैं{{ref|GPUasSTREAM}} मुख्य रूप से [[एएमडी]] और [[ NVIDIA ]] द्वारा डिजाइन किया गया। धारा प्रसंस्करण के दृष्टिकोण से विभिन्न पीढ़ियों पर ध्यान दिया जाना चाहिए:
* [[जीपीयू]] व्यापक, उपभोक्ता-ग्रेड स्ट्रीम प्रसंस्करण हैं।{{ref|GPUasSTREAM}} मुख्य रूप से [[एएमडी]] और [[ NVIDIA |एनवीआईडी​​आईए]] द्वारा डिजाइन किया गया है। धारा प्रसंस्करण के दृष्टिकोण से विभिन्न पीढ़ियों पर ध्यान दिया जाना चाहिए:
** Pre-R2xx/NV2x: स्ट्रीम प्रोसेसिंग के लिए कोई स्पष्ट समर्थन नहीं। कर्नेल संचालन [[API]] में छिपे हुए थे और सामान्य उपयोग के लिए बहुत कम लचीलापन प्रदान करते थे।
** R2xx/NV2x: स्ट्रीम प्रसंस्करण के लिए कई स्पष्ट समर्थन कर्नेल ऑपरेशन एपीआई में छिपे हुए थे और सामान्य उपयोग के लिए बहुत कम नम्यता प्रदान करते थे।
** R2xx/NV2x: कर्नेल स्ट्रीम ऑपरेशन प्रोग्रामर के नियंत्रण में स्पष्ट रूप से बन गए लेकिन केवल वर्टेक्स प्रोसेसिंग के लिए (टुकड़े अभी भी पुराने प्रतिमानों का उपयोग कर रहे थे)कोई ब्रांचिंग समर्थन गंभीर रूप से लचीलेपन में बाधा नहीं डालता है, लेकिन कुछ प्रकार के एल्गोरिदम चलाए जा सकते हैं (विशेष रूप से, कम-परिशुद्धता द्रव सिमुलेशन)।
** R2xx/NV2x: कर्नेल स्ट्रीम संचालन स्पष्ट रूप से प्रोग्रामर के नियंत्रण में हो गया था लेकिन केवल लंबकोणीय प्रसंस्करण के लिए (अभी भी पुराने प्रतिमानों का उपयोग कर रहे थे) कोई शाखा समर्थन गंभीर रूप से नम्यता में बाधा नहीं डालता है, लेकिन कुछ प्रकार के एल्गोरिदम को विशेष रूप से कम-शुद्ध द्रव अनुरूपन मे चलाया जा सकता है।
** R3xx/NV4x: लचीला ब्रांचिंग समर्थन हालांकि निष्पादित किए जाने वाले संचालन की संख्या और सख्त रिकर्सन गहराई, साथ ही सरणी हेरफेर पर कुछ सीमाएं अभी भी मौजूद हैं।
** R3xx/NV4x: शाखा समर्थन हालांकि, निष्पादित किए जाने वाले संचालन की संख्या और जटिल प्रत्यावर्तन साथ ही सरणी स्थानांतरण पर कुछ सीमाएं अभी भी सम्मिलित हैं।
** R8xx: बफ़र्स और परमाणु संचालन को जोड़ने / उपभोग करने का समर्थन करता है। यह पीढ़ी कला की स्थिति है।<!-- What does this mean? It means it's a TODO. Remember we should track functionalities here rather than performance improvements. -->
** R8xx: बफ़र्स और परमाणु संचालन को जोड़ने या उपभोग करने का समर्थन करता है। यह पीढ़ी कला की स्थिति है।<!-- What does this mean? It means it's a TODO. Remember we should track functionalities here rather than performance improvements. -->
* एचपीसी को लक्षित उत्पाद लाइन के लिए [[एएमडी फायरस्ट्रीम]] ब्रांड नाम
* एचपीसी को लक्षित उत्पाद लाइन के लिए [[एएमडी फायरस्ट्रीम]] का ब्रांड नाम।
* एचपीसी को लक्षित करने वाली उत्पाद श्रृंखला के लिए [[एनवीडिया टेस्ला]] ब्रांड नाम
* एचपीसी को लक्षित करने वाली उत्पाद श्रृंखला के लिए [[एनवीडिया टेस्ला]] का ब्रांड नाम।
* एसटीआई का [[सेल प्रोसेसर]], [[सोनी कंप्यूटर एंटरटेनमेंट]], [[ तोशिबा निगम ]] और [[आईबीएम]] का गठबंधन, एक हार्डवेयर आर्किटेक्चर है जो उचित सॉफ्टवेयर सपोर्ट के साथ स्ट्रीम प्रोसेसर की तरह काम कर सकता है। इसमें एक कंट्रोलिंग प्रोसेसर, पीपीई (पावर प्रोसेसिंग एलिमेंट, एक आईबीएम [[पावरपीसी]]) और SIMD कोप्रोसेसरों का एक सेट होता है, जिसे SPEs (सिनर्जिस्टिक प्रोसेसिंग एलिमेंट्स) कहा जाता है, प्रत्येक में स्वतंत्र प्रोग्राम काउंटर और इंस्ट्रक्शन मेमोरी होती है, वास्तव में एक मल्टीपल इंस्ट्रक्शन, मल्टीपल डेटा मशीन। देशी प्रोग्रामिंग मॉडल में सभी डीएमए और प्रोग्राम शेड्यूलिंग को प्रोग्रामर पर छोड़ दिया जाता है। हार्डवेयर स्थानीय संचार के लिए प्रोसेसरों के बीच एक तेज़ रिंग बस प्रदान करता है। क्योंकि निर्देशों और डेटा के लिए स्थानीय मेमोरी सीमित है, केवल ऐसे प्रोग्राम जो इस आर्किटेक्चर का प्रभावी ढंग से दोहन कर सकते हैं या तो एक छोटे से मेमोरी फ़ुटप्रिंट की आवश्यकता होती है या स्ट्रीम प्रोग्रामिंग मॉडल का पालन करते हैं। एक उपयुक्त एल्गोरिथ्म के साथ सेल का प्रदर्शन शुद्ध स्ट्रीम प्रोसेसर के प्रतिद्वंद्वी हो सकता है, हालांकि इसके लिए लगभग हमेशा एल्गोरिदम और सॉफ्टवेयर के पूर्ण पुनर्रचना की आवश्यकता होती है।
* सोनी कंप्यूटर एंटरटेनमेंट, तोशिबा संगठन और आईबीएम के गठबंधन एसटीआई का सेल प्रोसेसर एक हार्डवेयर संरचना है जो उपयुक्त सॉफ्टवेयर समर्थन के साथ स्ट्रीम प्रसंस्करण की तरह कार्य कर सकती है। इसमें एक नियंत्रित प्रोसेसर, पीपीई (ऊर्जा प्रसंस्करण तत्व आईबीएम पावरपीसी) और एसआईएमडी कोप्रोसेसरों का एक समुच्चय होता है, जिन्हें एसपीई (सिनर्जिस्टिक प्रसंस्करण तत्व) कहा जाता है। प्रत्येक में स्वतंत्र प्रोग्राम गणना और निर्देश मेमोरी होती है, वास्तव में एक एमआईएमडी मशीन होती है। देशी प्रोग्रामिंग मॉडल में सभी डीएमए और प्रोग्राम शेड्यूलिंग को प्रोग्रामर पर छोड़ दिया जाता है। हार्डवेयर स्थानीय संचार के लिए प्रोसेसर के बीच एक तीव्र ध्वनि प्रदान करता है। क्योंकि निर्देशों और डेटा के लिए स्थानीय मेमोरी सीमित है, केवल वही प्रोग्राम जो इस संरचना का प्रभावी रूप से प्राप्त कर सकते हैं, उन्हें या तो छोटी मेमोरी फ़ुटप्रिंट की आवश्यकता होती है या स्ट्रीम प्रोग्रामिंग मॉडल का अनुसरण करना पड़ता है। एक उपयुक्त एल्गोरिदम के साथ सेल का प्रदर्शन शुद्ध स्ट्रीम प्रसंस्करण के साथ प्रतिस्पर्धा कर सकता है। हालांकि इसके लिए लगभग सदैव एल्गोरिदम और सॉफ्टवेयर के पूर्ण डिज़ाइन की आवश्यकता होती है।


== स्ट्रीम प्रोग्रामिंग लाइब्रेरी और भाषाएँ ==
== स्ट्रीम प्रोग्रामिंग लाइब्रेरी और भाषाएँ ==
स्ट्रीम प्रोसेसर के लिए अधिकांश प्रोग्रामिंग लैंग्वेज जावा, सी या सी ++ से शुरू होती हैं और एक्सटेंशन जोड़ती हैं जो एप्लिकेशन डेवलपर्स को कर्नेल और/या स्ट्रीम को टैग करने की अनुमति देने के लिए विशिष्ट निर्देश प्रदान करती हैं। यह अधिकांश [[छायांकन भाषा]]ओं पर भी लागू होता है, जिन्हें कुछ हद तक धारा प्रोग्रामिंग भाषा माना जा सकता है।
स्ट्रीम प्रसंस्करण के लिए अधिकांश प्रोग्रामिंग भाषाएं जावा, C या C++ से प्रारम्भ होती हैं और एक्सटेंशन जोड़ती हैं जो एप्लिकेशन विकासक को कर्नेल और स्ट्रीम को टैग करने की स्वीकृति देने के लिए विशिष्ट निर्देश प्रदान करती हैं। यह अधिकांश छायांकन भाषाओं पर भी प्रयुक्त होता है, जिन्हें कुछ स्थिति तक स्ट्रीम प्रोग्रामिंग भाषाएं माना जा सकता है।


स्ट्रीम प्रोग्रामिंग भाषाओं के गैर-व्यावसायिक उदाहरणों में शामिल हैं:
स्ट्रीम प्रोग्रामिंग भाषाओं के गैर-व्यावसायिक उदाहरणों में सम्मिलित हैं:
* [[Ateji PX]] फ्री एडिशन, [[JVM]] पर स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और MapReduce एल्गोरिथम की एक सरल अभिव्यक्ति को सक्षम करता है
* एटेजी पीएक्स मुक्त प्रसंस्करण, जेवीएम पर स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और मैपरेडस एल्गोरिदम की एक सरल अभिव्यक्ति को सक्षम बनाता है।
* ऑटो-पाइप, सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से, स्ट्रीमिंग अनुप्रयोगों के लिए एक अनुप्रयोग विकास वातावरण जो विषम प्रणालियों (सीपीयू, [[जीपीजीपीयू]], एफपीजीए) के लिए अनुप्रयोगों के संलेखन की अनुमति देता है। CPU के लिए C, C++ और Java के किसी भी संयोजन में एप्लिकेशन विकसित किए जा सकते हैं। FPGAs के लिए Verilog या VHDL। कुडा वर्तमान में एनवीडिया जीपीजीपीयू के लिए उपयोग किया जाता है। ऑटो-पाइप कई मशीनों के बीच टीसीपी कनेक्शन के समन्वय को भी संभालता है।
* ऑटो-पाइप, सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से, स्ट्रीमिंग अनुप्रयोगों के लिए एक एप्लिकेशन विकास वातावरण जो विषम प्रणालियों (सीपीयू, जीपीजीपीयू, एफपीजीए) के लिए अनुप्रयोगों को लिखने की स्वीकृति देता है। सीपीयू के लिए एप्लिकेशन को C, C++ और Java के किसी भी संयोजन में विकसित किया जा सकता है। एफपीजीए के लिए वेरिलॉग या वीएचडीएल क्यूडा का उपयोग वर्तमान में एनवीडिया जीपीजीपीयू के लिए किया जाता है। ऑटो-पाइप कई मशीनों के बीच टीसीपी कनेक्शन के समन्वय को भी संभालता है।
* ACOTES प्रोग्रामिंग मॉडल: [[OpenMP]] पर आधारित कैटेलोनिया के [[कैटेलोनिया के पॉलिटेक्निक विश्वविद्यालय]]
* एकोटेस प्रोग्रामिंग मॉडल: ओपनएमपी पर आधारित कैटेलोनिया के पॉलिटेक्निक विश्वविद्यालय की भाषा
*बीपबीप, यूक्यूएसी में फॉर्मल कंप्यूटर साइंस लैब से एक सरल और हल्का जावा-आधारित इवेंट स्ट्रीम प्रोसेसिंग लाइब्रेरी।
*बीपबीप, यूक्यूएसी में फॉर्मल कंप्यूटर साइंस लैब से एक सरल और हल्का जावा-आधारित इवेंट स्ट्रीम प्रसंस्करण लाइब्रेरी।
* स्टैनफोर्ड से ब्रुक भाषा
* स्टैनफोर्ड से ब्रुक भाषा
* [[सीएएल अभिनेता भाषा]]: राइटिंग (डेटाफ्लो) एक्टर्स के लिए एक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, जो स्टेटफुल ऑपरेटर्स हैं जो डेटा ऑब्जेक्ट्स (टोकन) की इनपुट स्ट्रीम को आउटपुट स्ट्रीम में बदल देते हैं।
* [[सीएएल अभिनेता भाषा]]: राइटिंग (डेटाफ्लो) एक्टर्स के लिए एक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, जो स्टेटफुल ऑपरेटर हैं जो डेटा वस्तु् (टोकन) की इनपुट स्ट्रीम को आउटपुट स्ट्रीम में परिवर्तित कर देते हैं।
* Cal2Many एक कोड जनरेशन फ्रेमवर्क Halmstad University, स्वीडन से। यह CAL कोड को इनपुट के रूप में लेता है और अनुक्रमिक C, छेनी, समानांतर C लक्ष्यीकरण एपिफेनी आर्किटेक्चर, ajava और astruct लक्ष्यीकरण Ambric आर्किटेक्चर, आदि सहित विभिन्न लक्ष्य विशिष्ट भाषाएँ उत्पन्न करता है।
* सीएएल-2 हैल्मस्टेड यूनिवर्सिटी, स्वीडन से एक कोड जनरेशन फ्रेमवर्क है। यह सीएएल कोड को इनपुट के रूप में लेता है और अनुक्रमिक C, छेनी, समानांतर C लक्ष्यीकरण एपिफेनी संरचना, अजवा और एस्ट्रक्ट लक्ष्यीकरण एम्ब्रिक संरचना आदि सहित विभिन्न लक्ष्य विशिष्ट भाषाएँ उत्पन्न करता है।
* [[म्यूनिख के तकनीकी विश्वविद्यालय]] और [[डेनवर विश्वविद्यालय]] से DUP भाषा
* म्यूनिख के तकनीकी विश्वविद्यालय और डेनवर विश्वविद्यालय से डीयूपी भाषा
* HSTREAM: विषम धारा कंप्यूटिंग के लिए एक निर्देश-आधारित भाषा विस्तार<ref>{{cite conference |last1=Memeti |first1=Suejb |last2=Pllana |first2=Sabri |title=2018 IEEE International Conference on Computational Science and Engineering (CSE) |chapter=HSTREAM: A Directive-Based Language Extension for Heterogeneous Stream Computing |date=October 2018 |pages=138–145 |publisher=IEEE |doi=10.1109/CSE.2018.00026 |arxiv=1809.09387 |isbn=978-1-5386-7649-3 }}</ref>
* एचस्ट्रीम: विषम धारा कंप्यूटिंग के लिए एक निर्देश-आधारित भाषा विस्तार।<ref>{{cite conference |last1=Memeti |first1=Suejb |last2=Pllana |first2=Sabri |title=2018 IEEE International Conference on Computational Science and Engineering (CSE) |chapter=HSTREAM: A Directive-Based Language Extension for Heterogeneous Stream Computing |date=October 2018 |pages=138–145 |publisher=IEEE |doi=10.1109/CSE.2018.00026 |arxiv=1809.09387 |isbn=978-1-5386-7649-3 }}</ref>
* RaftLib - ओपन सोर्स C++ स्ट्रीम प्रोसेसिंग टेम्प्लेट लाइब्रेरी मूल रूप से सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से
* राफ्टलिब - मुक्त स्रोत C++ स्ट्रीम प्रसंस्करण टेम्प्लेट लाइब्रेरी मूल रूप से सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग प्रयोगशाला।
* स्पार - रियो ग्रांडे डो सुल के परमधर्मपीठीय कैथोलिक विश्वविद्यालय में एप्लीकेशन मॉडलिंग ग्रुप (जीएमएपी) से धारा समानता व्यक्त करने के लिए सी++ डोमेन-विशिष्ट भाषा
*एसपीएआर - रियो ग्रांडे डो सुल के पोंटिफ़िकल कैथोलिक विश्वविद्यालय में एप्लिकेशन मॉडलिंग ग्रुप (जीएमएपी) से धारा समानता को व्यक्त करने के लिए C++ डोमेन-विशिष्ट भाषा।
* [[वाटरलू विश्वविद्यालय]] से [[लिब श]] पुस्तकालय
* [[वाटरलू विश्वविद्यालय]] एसएच पुस्तकालय
* शालोज़, एक ओपन सोर्स प्रोजेक्ट
* शालोज़, मुक्त स्रोत योजना
* [[हर्टफोर्डशायर विश्वविद्यालय]] से एस-नेट समन्वय भाषा, जो समन्वय और एल्गोरिथम प्रोग्रामिंग को अलग करती है
* [[हर्टफोर्डशायर विश्वविद्यालय]] से एस-नेट समन्वय भाषा, जो समन्वय और एल्गोरिथम प्रोग्रामिंग को अलग करती है।
* एमआईटी से इसे स्ट्रीम करें
* एमआईटी से इसे स्ट्रीम करें।
* [[WSO2]] से सिद्धि
* [[WSO2|डब्लूएसओ-2]] सिद्धि
* वेवस्क्रिप्ट फंक्शनल स्ट्रीम प्रोसेसिंग, एमआईटी से भी।
* वेवस्क्रिप्ट कार्यात्मक स्ट्रीम प्रसंस्करण एमआईटी
* [[कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग]] को व्यापक अर्थों में स्ट्रीम प्रोसेसिंग माना जा सकता है।
* [[कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग]] को व्यापक अर्थों में स्ट्रीम प्रसंस्करण माना जा सकता है।
वाणिज्यिक कार्यान्वयन या तो सामान्य प्रयोजन के होते हैं या किसी विक्रेता द्वारा विशिष्ट हार्डवेयर से जुड़े होते हैं। सामान्य प्रयोजन भाषाओं के उदाहरणों में शामिल हैं:
वाणिज्यिक कार्यान्वयन या तो सामान्य प्रयोजन के होते हैं या किसी विक्रेता द्वारा विशिष्ट हार्डवेयर से संबद्ध होते हैं। सामान्य प्रयोजन भाषाओं के उदाहरणों में सम्मिलित हैं:
* [[AccelerEyes]]' जैकेट, MATLAB के लिए एक GPU इंजन का व्यावसायीकरण
* एक्सेलेरआइज़ जैकेट, मैटलैब के लिए जीपीयू इंजन का व्यावसायीकरण
* Ateji PX Java एक्सटेंशन जो स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और MapReduce एल्गोरिथम की एक सरल अभिव्यक्ति को सक्षम करता है
* एटेजी पीएक्स जावा एक्सटेंशन जो स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और मैपरेडस एल्गोरिदम की सरल अभिव्यक्ति को सक्षम बनाता है।
*Embiot, Telchemy का एक हल्का एम्बेडेड स्ट्रीमिंग एनालिटिक्स एजेंट
*एम्बियोट, टेल्केमी का अंतः स्थापित स्ट्रीमिंग विश्लेषण अभिकर्ता है।
* फ्लडगेट, एक स्ट्रीम प्रोसेसर जो PlayStation 3, Xbox360, Wii और PC के लिए [[Gamebryo]] गेम इंजन के [[साथ]] प्रदान किया गया है
* फ्लडगेट, प्ले स्टेशन 3,एक्सबॉक्स-360, वाईआई और पीसी के लिए गेमब्रीओ गेम इंजन के साथ प्रदान किया गया एक स्ट्रीम प्रसंस्करण
* [[ओपनएचएमपीपी]], मैनी-कोर प्रोग्रामिंग का एक डायरेक्टिव विजन
* [[ओपनएचएमपीपी]], मैनी-कोर प्रोग्रामिंग का एक निर्देशक विजन
* पीकस्ट्रीम,<ref>[https://arstechnica.com/news.ars/post/20060918-7763.html PeakStream unveils multicore and CPU/GPU programming solution<!-- Bot generated title -->]</ref> [[BrookGPU]] परियोजना का स्पिनआउट (जून 2007 में [[Google अधिग्रहण की सूची]] द्वारा अधिग्रहित)
* पीकस्ट्रीम,<ref>[https://arstechnica.com/news.ars/post/20060918-7763.html PeakStream unveils multicore and CPU/GPU programming solution<!-- Bot generated title -->]</ref> ब्रुक परियोजना का एक स्पिनआउट (जून 2007 में [[Google अधिग्रहण की सूची|गूगल]] द्वारा अधिग्रहीत)
* IBM Spade - स्ट्रीम प्रोसेसिंग एप्लिकेशन डिक्लेरेटिव इंजन (B. Gedik, et al। SPADE: सिस्टम S डिक्लेरेटिव स्ट्रीम प्रोसेसिंग इंजन। ACM SIGMOD 2008।)
* आईबीएम स्पेड - स्ट्रीम प्रसंस्करण एप्लिकेशन निर्देशक इंजन (बी. गेडिक, स्पेड सिस्टम एस निर्देशक स्ट्रीम प्रसंस्करण इंजन एसीएम सिगमोड 2008)
* [[रैपिडमाइंड]], लिब श का व्यावसायीकरण (अगस्त 2009 में इंटेल द्वारा अधिग्रहित)
* [[रैपिडमाइंड]], लिबश का व्यावसायीकरण (अगस्त 2009 में इंटेल द्वारा अधिग्रहित)
* टीस्ट्रीम,<ref>{{cite techreport |title=TStreams: A Model of Parallel Computation |url=http://www.hpl.hp.com/techreports/2004/HPL-2004-78R1.html}}</ref><ref>{{cite techreport |title=TStreams: How to Write a Parallel Program |url=http://www.hpl.hp.com/techreports/2004/HPL-2004-193.html}}</ref> हेवलेट-पैकार्ड कैम्ब्रिज रिसर्च लैब
* टी-स्ट्रीम,<ref>{{cite techreport |title=TStreams: A Model of Parallel Computation |url=http://www.hpl.hp.com/techreports/2004/HPL-2004-78R1.html}}</ref><ref>{{cite techreport |title=TStreams: How to Write a Parallel Program |url=http://www.hpl.hp.com/techreports/2004/HPL-2004-193.html}}</ref> हेवलेट-पैकार्ड कैम्ब्रिज शोध संस्थान


विक्रेता-विशिष्ट भाषाओं में शामिल हैं:
विक्रेता-विशिष्ट भाषाओं में सम्मिलित हैं:
* एएमडी/एटीआई [[व्हाट टेक्नोलॉजीज]] ब्रुक+ (ब्रुकजीपीयू का एएमडी हार्डवेयर अनुकूलित कार्यान्वयन)
* एएमडी/एटीआई से ब्रूक+ (ब्रुक का एएमडी हार्डवेयर अनुकूलित कार्यान्वयन)
* एनवीडिया से [[CUDA]] (कम्प्यूट यूनिफाइड डिवाइस आर्किटेक्चर)
* एनवीडिया से सीयूडीए (कम्प्यूट यूनिफाइड डिवाइससंरचना)
* [[उच्च-थ्रूपुट कंप्यूटिंग]] के लिए [[इंटेल सीटी]] - सी
* [[उच्च-थ्रूपुट कंप्यूटिंग]] के लिए [[इंटेल सीटी]]- सी
* स्ट्रीम प्रोसेसर्स, इंक से स्ट्रीमसी, स्टैनफोर्ड में इमेजिन कार्य का व्यावसायीकरण
* स्ट्रीम प्रसंस्करण, इंक से स्ट्रीम, सी, स्टैनफोर्ड में काल्पनिक कार्य का व्यावसायीकरण


घटना-आधारित प्रसंस्करण
घटना-आधारित प्रसंस्करण
* [[अपामा (सॉफ्टवेयर)]] - [[ सॉफ्टवेयर इंक ]] द्वारा एक संयुक्त [[ जटिल घटना प्रसंस्करण ]] और [[स्ट्रीम प्रोसेसिंग]] इंजन
* [[अपामा (सॉफ्टवेयर)]] - [[ सॉफ्टवेयर इंक |सॉफ्टवेयर इंक]] द्वारा एक संयुक्त [[ जटिल घटना प्रसंस्करण |जटिल घटना प्रसंस्करण]] और स्ट्रीम प्रसंस्करण इंजन
* वालारू
* वल्लारू
* WSO2 द्वारा WSO2 स्ट्रीम प्रोसेसर
* डब्लूएसओ-2 द्वारा डब्लूएसओ-2 स्ट्रीम प्रसंस्करण
* [[अपाचे NiFi]]
* [[अपाचे NiFi|अपाचे एनआईएफआई]]


बैच फ़ाइल-आधारित प्रसंस्करण (कुछ वास्तविक स्ट्रीम प्रसंस्करण का अनुकरण करता है, लेकिन सामान्य रूप से बहुत कम प्रदर्शन{{clarify |date=August 2018 |reason=(what type of performance? E.g. throughput, latency, recovery?)}}{{Citation needed|date=August 2018}})
बैच फ़ाइल-आधारित प्रसंस्करण (कुछ वास्तविक स्ट्रीम प्रसंस्करण का अनुकरण करता है, लेकिन सामान्य रूप से बहुत कम प्रदर्शन होता है:)
* [[अपाचे काफ्का]]
* [[अपाचे काफ्का]]
* [[अपाचे तूफान]]
* [[अपाचे तूफान|अपाचे स्टॉर्म]]
* [[अपाचे एपेक्स]]
* [[अपाचे एपेक्स]]
* [[अपाचे स्पार्क]]
* [[अपाचे स्पार्क]]


निरंतर ऑपरेटर स्ट्रीम प्रसंस्करण{{clarify |date=August 2018 |reason=(the same as Event-based?)}} }
निरंतर ऑपरेटर स्ट्रीम प्रसंस्करण{{clarify |date=August 2018 |reason=(the same as Event-based?)}}
* [[ अपाचे फ्लैश ]]
* [[ अपाचे फ्लैश ]]
*वॉलमार्टलैब्स Mupd8<ref>{{Cite web|url=https://github.com/walmartlabs/mupd8|title=GitHub - walmartlabs/Mupd8: Muppet|website=[[GitHub]] }}</ref>
*वॉलमार्टलैब्स एमयूपीडी-8<ref>{{Cite web|url=https://github.com/walmartlabs/mupd8|title=GitHub - walmartlabs/Mupd8: Muppet|website=[[GitHub]] }}</ref>
* एक्लिप्स स्ट्रीमशीट - स्ट्रीम प्रोसेसिंग के लिए स्प्रेडशीट
* एक्लिप्स स्ट्रीमशीट - स्ट्रीम प्रसंस्करण के लिए स्प्रेडशीट


स्ट्रीम प्रोसेसिंग सेवाएं:
स्ट्रीम प्रसंस्करण सेवाएं:
* अमेज़ॅन वेब सर्विसेज - किनेसिस
* अमेज़ॅन वेब सेवा - किनेसिस
* Google मेघ - डेटा प्रवाह
* गूगल क्लाउड - डेटा संचार
* Microsoft Azure - स्ट्रीम एनालिटिक्स
* माइक्रोसॉफ्ट एज़्योर - स्ट्रीम विश्लेषण
* डेटास्ट्रीम - डेटा स्ट्रीमिंग एनालिटिक्स प्लेटफॉर्म
* डेटास्ट्रीम - डेटा स्ट्रीमिंग विश्लेषण प्लेटफॉर्म
* आईबीएम धाराएँ
* आईबीएम संचार
** आईबीएम स्ट्रीमिंग एनालिटिक्स
** आईबीएम स्ट्रीमिंग विश्लेषण
* इवेंटडोर SQLStreamBuilder
* इवेंटडोर एसक्यूएल स्ट्रीम प्रसंस्करण


== यह भी देखें ==
== यह भी देखें ==
{{columns-list|colwidth=20em|
{{columns-list|colwidth=20em|
* [[Data stream mining]]
* [[डेटा स्ट्रीम खनन]]
* [[Data Stream Management System]]
* [[डेटा स्ट्रीम प्रबंधन प्रणाली]]
* [[Dimension reduction]]
* [[आयाम में कमी]]
* [[Flow-based programming]]
* [[स्ट्रीम आधारित प्रोग्रामिंग]]
* [[Hardware acceleration]]
* [[हार्डवेयर एक्सिलरेशन]]
* [[Molecular modeling on GPU]]
* [[जीपीयू पर आणविक मॉडलिंग]]
* [[Parallel computing]]
* [[समानांतर कंप्यूटिंग]]
* [[Partitioned global address space]]
* [[विभाजित वैश्विक स्थानीय एड्रेस]]
* [[Real-time computing]]
* [[वास्तविक समय कंप्यूटिंग]]
* [[Real Time Streaming Protocol]]
* [[वास्तविक समय स्ट्रीमिंग प्रोटोकॉल]]
* [[Single instruction, multiple threads|SIMT]]
* [[एकल निर्देश, अनेक सूत्र|एसआईएमटी]]
* [[Streaming algorithm]]
* [[स्ट्रीमिंग एल्गोरिदम]]
* [[Vector processor]]
* [[सदिश प्रसंस्करण]]
}}
}}
<!--
<!--
Line 305: Line 283:
{{Reflist|30em}}
{{Reflist|30em}}


{{Parallel Computing}}
{{DEFAULTSORT:Stream Processing}}[[Category: कंप्यूटर आर्किटेक्चर]] [[Category: प्रोग्रामिंग प्रतिमान]] [[Category: गणना के मॉडल]] [[Category: जीपीजीपीयू]]




{{DEFAULTSORT:Stream Processing}}


[[Category: Machine Translated Page]]
[[Category:All articles with unsourced statements|Stream Processing]]
[[Category:Created On 18/06/2023]]
[[Category:Articles with unsourced statements from December 2018|Stream Processing]]
[[Category:Articles with unsourced statements from June 2008|Stream Processing]]
[[Category:Created On 18/06/2023|Stream Processing]]
[[Category:Lua-based templates|Stream Processing]]
[[Category:Machine Translated Page|Stream Processing]]
[[Category:Multi-column templates|Stream Processing]]
[[Category:Pages using div col with small parameter|Stream Processing]]
[[Category:Pages with script errors|Stream Processing]]
[[Category:Templates Vigyan Ready|Stream Processing]]
[[Category:Templates that add a tracking category|Stream Processing]]
[[Category:Templates that generate short descriptions|Stream Processing]]
[[Category:Templates using TemplateData|Stream Processing]]
[[Category:Templates using under-protected Lua modules|Stream Processing]]
[[Category:Wikipedia articles needing clarification from August 2018|Stream Processing]]
[[Category:Wikipedia fully protected templates|Div col]]
[[Category:कंप्यूटर आर्किटेक्चर|Stream Processing]]
[[Category:गणना के मॉडल|Stream Processing]]
[[Category:जीपीजीपीयू|Stream Processing]]
[[Category:प्रोग्रामिंग प्रतिमान|Stream Processing]]

Latest revision as of 15:56, 30 August 2023

कंप्यूटर विज्ञान में स्ट्रीम प्रसंस्करण, जिसे संभावित स्ट्रीम प्रसंस्करण, डेटा स्ट्रीम प्रसंस्करण या वितरित स्ट्रीम प्रसंस्करण के रूप में भी जाना जाता है। यह एक प्रोग्रामिंग प्रतिमान है जो डेटा स्ट्रीम या समय में घटनाओं के अनुक्रम को गणना के केंद्रीय इनपुट और आउटपुट के रूप में देखता है। स्ट्रीम प्रसंस्करण में डेटा प्रोग्रामिंग, डेटा संचार प्रोग्रामिंग और वितरित डेटा प्रसंस्करण सम्मिलित है[1] स्ट्रीम प्रसंस्करण सिस्टम का लक्ष्य डेटा स्ट्रीम के लिए समानांतर कंप्यूटिंग को विकसित करना और कुशल कार्यान्वयन के लिए संचार एल्गोरिदम पर विश्वास करना है। इन प्रणालियों के सॉफ़्टवेयर प्रक्रिया में वितरण और शेड्यूलिंग के लिए गणना स्ट्रीम प्रबंधन सिस्टम और फ्लोटिंग-पॉइंट इकाइयों, ग्राफ़िक्स प्रसंस्करण इकाइयों और स्थानीय-प्रोग्रामेबल गेट एरेज़ सहित त्वरण के लिए हार्डवेयर घटकों को व्यक्त करने के लिए प्रोग्रामिंग मॉडल और क्वेरी भाषा जैसे घटक सम्मिलित हैं।[2]

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

1980 के दशक के समय डेटा संचार प्रोग्रामिंग के भीतर स्ट्रीम प्रसंस्करण की खोज की गई थी। एक उदाहरण भाषा एसआईएसएएल संचार और एकल समनुदेशन भाषा में पुनरावृत्ति है।

अनुप्रयोग

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

स्ट्रीम प्रसंस्करण उन अनुप्रयोगों के लिए विशेष रूप से उपयुक्त है जो तीन अनुप्रयोग विशेषताओं को प्रदर्शित करते हैं:[citation needed]

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

स्ट्रीम प्रसंस्करण के भीतर रिकॉर्ड के उदाहरणों में सम्मिलित हैं:

  • ग्राफ़िक्स में प्रत्येक रिकॉर्ड एक त्रिभुज के शीर्ष, सामान्य और रंग की जानकारी हो सकती है।
  • छवि प्रसंस्करण में प्रत्येक रिकॉर्ड एक छवि से एक पिक्सेल हो सकता है।
  • एक वीडियो एनकोडर में प्रत्येक रिकॉर्ड 256 पिक्सेल का हो सकता है जो डेटा का एक मैक्रोब्लॉक बनाता है।
  • वायरलेस संकेत प्रसंस्करण में प्रत्येक रिकॉर्ड एंटीना से प्राप्त प्रतिरूप का अनुक्रम हो सकता है।

प्रत्येक रिकॉर्ड के लिए हम केवल इनपुट से पढ़ सकते हैं, उस पर संचालन कर सकते हैं और आउटपुट पर लिख सकते हैं। एकाधिक इनपुट और एकाधिक आउटपुट होने की स्वीकृति है लेकिन कभी भी मेमोरी का एक भाग जो पठनीय और लिखने योग्य दोनों नहीं है।

कोड उदाहरण

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

SELECT DataStream
   Orders.TimeStamp, Orders.orderId, Orders.ticker,
   Orders.amount, Trade.amount
FROM Orders
JOIN Trades OVER (RANGE INTERVAL '1' SECOND FOLLOWING)
ON Orders.orderId = Trades.orderId;

एक अन्य प्रतिदर्श कोड खंड बाहरी "घटनाओं" के संचार के बीच शादियों का पता लगाता है, जैसे कि चर्च की घंटियाँ बजना, टक्सीडो पहने एक आदमी की उपस्थिति या सुबह का सूट पहने हुए सफेद गाउन में एक महिला और हवा में उड़ते चावल, एक "जटिल" या "मिश्रित" घटना है जो व्यक्तिगत सरल घटनाओं से अनुमान लगाती है कि एक शादी हो रही है।

WHEN Person.Gender EQUALS "man" AND Person.Clothes EQUALS "tuxedo"
FOLLOWED-BY
  Person.Clothes EQUALS "gown" AND
  (Church_Bell OR Rice_Flying)
WITHIN 2 hours
ACTION Wedding

पिछले समानांतर प्रतिमानों से तुलना

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

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

100* 4-घटक सदिश (ज्यामितीय) अर्थात कुल 400 संख्या वाली दो तालिकाओ को जोड़ने वाले एक साधारण प्रोग्राम पर विचार करें।

पारंपरिक, अनुक्रमिक प्रतिमान

for (int i = 0; i < 400; i++)
    result[i] = source0[i] + source1[i];

यह अनुक्रमिक प्रतिमान है जो सबसे अधिक परिचित है। इसमे अनेक विविधताएं सम्मिलित हैं जैसे कि आंतरिक लूप, संरचनाएं और इसी प्रकार लेकिन अंततः वे उस निर्माण तक सीमित हो जाती हैं।

समानांतर एसआईएमडी प्रतिमान, पैक्ड रजिस्टर (एसडब्ल्यूएआर)

for (int el = 0; el < 100; el++) // for each vector
    vector_sum(result[el], source0[el], source1[el]);

यह वास्तव में अतिसरलीकृत है। यह मानता है कि निर्देश vector_sum कार्य करता है। यद्यपि आंतरिक अनुदेश के साथ ऐसा ही होता है, वास्तव में यहां बहुत अधिक जानकारी पर ध्यान नहीं दिया जाता है जैसे सदिश घटकों की संख्या और उनके डेटा प्रारूप मे यह स्पष्टता के लिए किया जाता है।

हालाँकि, आप देख सकते हैं, यह विधि डिकोड किए गए निर्देशों की संख्या को numElements PerElement से numElements तक अपेक्षाकृत कम कर देती है। जंप निर्देशों की संख्या भी कम हो गई है, क्योंकि लूप कम बार चलाया जाता है। ये लाभ चार गणितीय परिचालनों के समानांतर निष्पादन के परिणामस्वरूप होते हैं।

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

समानांतर धारा प्रतिमान (एसआईएमडी/एमआईएमडी)

// This is a fictional language for demonstration purposes.
elements = array streamElement([number, number])[100]
kernel = instance streamKernel("@arg0[@iter]")
result = kernel.invoke(elements)

इस प्रतिमान में प्रत्येक घटक ब्लॉक को अलग से परिभाषित करने के अतिरिक्त संपूर्ण डेटा समुच्चय को परिभाषित किया गया है। डेटा के समुच्चय का वर्णन पहली दो पंक्तियों में किया जाना माना जाता है। उसके बाद स्रोतों और कर्नेल से परिणाम का अनुमान लगाया जाता है। सरलता के लिए इनपुट और आउटपुट डेटा के बीच 1:1 समानता है लेकिन इसकी आवश्यकता नहीं है। प्रयुक्त संख्या भी अधिक जटिल हो सकती है।

इस प्रतिमान का कार्यान्वयन आंतरिक रूप से एक लूप को विवृत कर सकता है। यह चिप जटिलता के साथ थ्रूपुट को स्केल करने की स्वीकृति देती है। यह आसानी से सैकड़ों एएलयू का उपयोग करता है।[3][4] जटिल डेटा पैटर्न का उन्मूलन इस अतिरिक्त क्षमता को उपलब्ध कराता है।

जबकि स्ट्रीम प्रसंस्करण एसआईएमडी/एमआईएमडी प्रसंस्करण की एक शाखा है, उन्हें भ्रमित नहीं होना चाहिए। हालाँकि एसआईएमडी कार्यान्वयन प्रायः "स्ट्रीमिंग" प्रकार से कार्य कर सकता है। उनका प्रदर्शन तुलनीय नहीं है। मॉडल एक बहुत ही अलग उपयोग पैटर्न की कल्पना करता है जो अपने आप में कहीं अधिक प्रदर्शन की स्वीकृति देता है।

यह देखा गया है कि जब मानक सीपीयू जैसे सामान्य प्रोसेसर पर प्रयुक्त किया जाता है, तो केवल 1.5x स्पीडअप तक पहुंचा जा सकता है।[5] इसके विपरीत, एड-हॉक स्ट्रीम प्रसंस्करण आसानी से 10 गुना से अधिक प्रदर्शन तक अभिगम्य हो जाते हैं। जिसका मुख्य कारण अधिक कुशल मेमोरी नियंत्रण और समानांतर प्रसंस्करण के उच्च स्तर हैं।[6]

यद्यपि मॉडल द्वारा अनुमत नम्यता की विभिन्न डिग्री हैं तो स्ट्रीम प्रसंस्करण सामान्यतः कर्नेल या स्ट्रीम आकार पर कुछ सीमाएं लगाते हैं। उदाहरण के लिए उपभोक्ता हार्डवेयर में प्रायः उच्च-परिशुद्धता गणित करने की क्षमता का अभाव होता है, जटिल अप्रत्यक्ष श्रृंखलाओं का अभाव होता है या निष्पादित किए जा सकने वाले निर्देशों की संख्या पर अपेक्षाकृत कम सीमाएँ प्रस्तुत होती हैं।

अनुसंधान

स्टैनफोर्ड विश्वविद्यालय स्ट्रीम प्रसंस्करण परियोजनाओं में 1999 में प्रारम्भ किया गया था। स्टैनफोर्ड वास्तविक समय प्रोग्रामेबल शेडिंग परियोजना सम्मिलित है।[7] काल्पनिक प्रोटोटाइप को 2002 में विकसित किया गया था।[8] मेरिमैक नामक एक परियोजना लगभग 2004 तक चल रही है।[9] एटी और टी ने स्ट्रीम-एन्हांस्ड प्रोसेसर पर भी शोध किया था क्योंकि ग्राफिक्स प्रसंस्करण इकाइयां गति और कार्यक्षमता दोनों में तीव्रता से विकसित हुईं है। इन प्रारम्भिक दिनों से दर्जनों स्ट्रीम प्रसंस्करण भाषाओं के साथ-साथ विशेष हार्डवेयर भी विकसित किए गए हैं।

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

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

 // A particle in a three-dimensional space.
struct particle_t {
    float x, y, z;          // not even an array!
    unsigned byte color[3]; // 8 bit per channel, say we care about RGB only
    float size;
    // ... and many other attributes may follow...
};

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

struct particle_t {
    float *x, *y, *z;
    unsigned byte *colorRed, *colorBlue, *colorGreen;
    float *size;
};

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

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

अत्यधिक आधुनिक स्ट्रीम प्रसंस्करण फ्रेमवर्क डेटा को शाब्दिक स्ट्रीम के रूप में संरचित करने के लिए फीफो जैसा इंटरफ़ेस प्रदान करते हैं। यह अमूर्तता रनटाइम/हार्डवेयर को कुशल गणना के लिए उस ज्ञान का पूरा लाभ प्राप्त करने में सक्षम करते हुए डेटा निर्भरता को स्पष्ट रूप से निर्दिष्ट करने का एक साधन प्रदान करती है। सी++ के लिए अब तक के सबसे सरल[citation needed] और सबसे कुशल[citation needed] स्ट्रीम प्रसंस्करण प्रकारों में से एक राफ्टलिब है, जो C++ स्ट्रीम ऑपरेटरों का उपयोग करके डेटा संचार आरेख के रूप में स्वतंत्र कंप्यूट कर्नेल को एक साथ जोड़ने में सक्षम बनाता है।

#include <raft>
#include <raftio>
#include <cstdlib>
#include <string>

class hi : public raft::kernel
{
public:
    hi() : raft::kernel()
    {
       output.addPort<std::string>("0"); 
    }

    virtual raft::kstatus run()
    {
        output["0"].push(std::string("Hello World\n"));
        return raft::stop; 
    }
};

int main(int argc, char **argv)
{
    /** instantiate print kernel **/
    raft::print< std::string > p;
    /** instantiate hello world kernel **/
    hi hello;
    /** make a map object **/
    raft::map m;
    /** add kernels to map, both hello and p are executed concurrently **/
    m += hello >> p;
    /** execute the map **/
    m.exe();
    return EXIT_SUCCESS;
}

संचार प्रसंस्करण के लिए गणना मॉडल

उच्च-स्तरीय भाषाओं में स्ट्रीमिंग अनुप्रयोगों को निर्दिष्ट करने के अतिरिक्त, कम्प्यूटेशन के मॉडल (एमओसीएस) का भी डेटा संचार मॉडल और प्रक्रिया-आधारित मॉडल के रूप में व्यापक रूप से उपयोग किया गया है।

सामान्य प्रसंस्करण संरचना

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

स्ट्रीम प्रसंस्करण पर एक समान संरचना सम्मिलित है लेकिन नए प्रोग्रामिंग मॉडल के लिए धन्यवाद, प्रबंधन के लिए समर्पित ट्रांजिस्टर की मात्रा वास्तव में अपेक्षाकृत बहुत कम है।

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

स्ट्रीम प्रसंस्करण सामान्यतः तीव्र, कुशल, स्वामित्व वाली मेमोरी से बना होता है। क्रॉसबार स्विच अब सामान्य हैं, अतीत में बहु-बसों को नियोजित किया गया है। मेमोरी लेन की शुद्ध मात्रा विणपन सीमा पर निर्भर है। जैसा कि यह लिखा गया है कि प्रवेश-स्तर के आसपास अभी भी 64-बिट विस्तृत इंटरकनेक्शन हैं। अधिकांश मध्य-श्रेणी के मॉडल तीव्र 128-बिट क्रॉसबार स्विच मैट्रिक्स (4 या 2 सेगमेंट) का उपयोग करते हैं, जबकि उच्च-अंत मॉडल 256 बिट चौड़े धीमे क्रॉसबार के साथ भारी मात्रा में मेमोरी (वास्तव में 512 एमबी तक) सक्रिय करते हैं। इसके विपरीत, इंटेल पेंटियम से लेकर कुछ एथलॉन 64 तक के मानक प्रोसेसर में केवल एक 64-बिट वाइड डेटा बस होती है।

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

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

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

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

यह तीन-स्तरीय डेटा नियंत्रण पैटर्न, अस्थायी डेटा को धीमी मेमोरी से दूर रखना से आसान बनाता है। इस प्रकार सिलिकॉन कार्यान्वयन अत्यधिक कुशल और विद्युत की बचत करने वाला बन गया है।

हार्डवेयर मे लूप समस्या

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

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

उदाहरण

  • कमोडोर अमीगा में ब्लिटर एक प्रारंभिक (लगभग 1985) ग्राफिक्स प्रोसेसर है जो 16 घटक बिट सदिशों से युक्त आउटपुट स्ट्रीम उत्पन्न करने के लिए 256 प्रकारों से 16 घटक बिट सदिश के तीन स्रोत स्ट्रीम को संयोजित करने में सक्षम है। कुल इनपुट स्ट्रीम बैंडविड्थ 42 मिलियन बिट प्रति सेकंड तक है। आउटपुट स्ट्रीम बैंडविड्थ 28 मिलियन बिट प्रति सेकंड तक है।
  • कल्पना कीजिए कि [10] स्टैनफोर्ड विश्वविद्यालय के प्रोफेसर विलियम डेली की अध्यक्षता में एक नम्य वास्तुकला है जिसका उद्देश्य तीव्र और ऊर्जा कुशल दोनों है। मूल रूप से 1996 में कल्पना की गई इस परियोजना में वास्तुकला, सॉफ्टवेयर उपकरण, एक वीएलएसआई कार्यान्वयन और एक विकास बोर्ड सम्मिलित था, जिसे डीएआरपीए, इंटेल और टेक्सस इंस्ट्रूमेंट्स द्वारा वित्त पोषित किया गया था।
  • स्टैनफोर्ड की एक अन्य परियोजना, जिसे मेरिमैक कहा जाता है।[11] जिसका उद्देश्य स्ट्रीम-आधारित सुपरकंप्यूटर विकसित करना है। मेरिमैक का उद्देश्य एक ही तकनीक से निर्मित क्लस्टर-आधारित वैज्ञानिक कंप्यूटरों की तुलना में प्रति इकाई लागत पर अधिक प्रदर्शन प्रदान करने के लिए स्ट्रीम संरचना और उन्नत अंतःसंबंध नेटवर्क का उपयोग करने का है।
  • स्टैनफोर्ड के काल्पनिक परियोजना के वाणिज्यिक स्पिन-ऑफ, स्ट्रीम प्रसंस्करण्स, इंक के स्टॉर्म -1 समूह की घोषणा आईएसएससीसी 2007 में एक विशेषता प्रस्तुति के समय की गई थी। समूह में 30 जीओपीएस से लेकर 220 16-बिट जीओपीएस (अरबों ऑपरेशन) तक के चार सदस्य सम्मिलित हैं। सभी को 130 नैनोमीटर प्रक्रिया में टीएसएमसी में निर्मित किया गया है। ये उपकरण वीडियो कॉन्फ्रेंसिंग, बहु फ़ंक्शन प्रिंटर और डिजिटल वीडियो संरक्षण उपकरण सहित डीएसपी विणपन के उच्च स्तर को लक्षित करते हैं।
  • जीपीयू व्यापक, उपभोक्ता-ग्रेड स्ट्रीम प्रसंस्करण हैं।[1] मुख्य रूप से एएमडी और एनवीआईडी​​आईए द्वारा डिजाइन किया गया है। धारा प्रसंस्करण के दृष्टिकोण से विभिन्न पीढ़ियों पर ध्यान दिया जाना चाहिए:
    • R2xx/NV2x: स्ट्रीम प्रसंस्करण के लिए कई स्पष्ट समर्थन कर्नेल ऑपरेशन एपीआई में छिपे हुए थे और सामान्य उपयोग के लिए बहुत कम नम्यता प्रदान करते थे।
    • R2xx/NV2x: कर्नेल स्ट्रीम संचालन स्पष्ट रूप से प्रोग्रामर के नियंत्रण में हो गया था लेकिन केवल लंबकोणीय प्रसंस्करण के लिए (अभी भी पुराने प्रतिमानों का उपयोग कर रहे थे) कोई शाखा समर्थन गंभीर रूप से नम्यता में बाधा नहीं डालता है, लेकिन कुछ प्रकार के एल्गोरिदम को विशेष रूप से कम-शुद्ध द्रव अनुरूपन मे चलाया जा सकता है।
    • R3xx/NV4x: शाखा समर्थन हालांकि, निष्पादित किए जाने वाले संचालन की संख्या और जटिल प्रत्यावर्तन साथ ही सरणी स्थानांतरण पर कुछ सीमाएं अभी भी सम्मिलित हैं।
    • R8xx: बफ़र्स और परमाणु संचालन को जोड़ने या उपभोग करने का समर्थन करता है। यह पीढ़ी कला की स्थिति है।
  • एचपीसी को लक्षित उत्पाद लाइन के लिए एएमडी फायरस्ट्रीम का ब्रांड नाम।
  • एचपीसी को लक्षित करने वाली उत्पाद श्रृंखला के लिए एनवीडिया टेस्ला का ब्रांड नाम।
  • सोनी कंप्यूटर एंटरटेनमेंट, तोशिबा संगठन और आईबीएम के गठबंधन एसटीआई का सेल प्रोसेसर एक हार्डवेयर संरचना है जो उपयुक्त सॉफ्टवेयर समर्थन के साथ स्ट्रीम प्रसंस्करण की तरह कार्य कर सकती है। इसमें एक नियंत्रित प्रोसेसर, पीपीई (ऊर्जा प्रसंस्करण तत्व आईबीएम पावरपीसी) और एसआईएमडी कोप्रोसेसरों का एक समुच्चय होता है, जिन्हें एसपीई (सिनर्जिस्टिक प्रसंस्करण तत्व) कहा जाता है। प्रत्येक में स्वतंत्र प्रोग्राम गणना और निर्देश मेमोरी होती है, वास्तव में एक एमआईएमडी मशीन होती है। देशी प्रोग्रामिंग मॉडल में सभी डीएमए और प्रोग्राम शेड्यूलिंग को प्रोग्रामर पर छोड़ दिया जाता है। हार्डवेयर स्थानीय संचार के लिए प्रोसेसर के बीच एक तीव्र ध्वनि प्रदान करता है। क्योंकि निर्देशों और डेटा के लिए स्थानीय मेमोरी सीमित है, केवल वही प्रोग्राम जो इस संरचना का प्रभावी रूप से प्राप्त कर सकते हैं, उन्हें या तो छोटी मेमोरी फ़ुटप्रिंट की आवश्यकता होती है या स्ट्रीम प्रोग्रामिंग मॉडल का अनुसरण करना पड़ता है। एक उपयुक्त एल्गोरिदम के साथ सेल का प्रदर्शन शुद्ध स्ट्रीम प्रसंस्करण के साथ प्रतिस्पर्धा कर सकता है। हालांकि इसके लिए लगभग सदैव एल्गोरिदम और सॉफ्टवेयर के पूर्ण डिज़ाइन की आवश्यकता होती है।

स्ट्रीम प्रोग्रामिंग लाइब्रेरी और भाषाएँ

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

स्ट्रीम प्रोग्रामिंग भाषाओं के गैर-व्यावसायिक उदाहरणों में सम्मिलित हैं:

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

वाणिज्यिक कार्यान्वयन या तो सामान्य प्रयोजन के होते हैं या किसी विक्रेता द्वारा विशिष्ट हार्डवेयर से संबद्ध होते हैं। सामान्य प्रयोजन भाषाओं के उदाहरणों में सम्मिलित हैं:

  • एक्सेलेरआइज़ जैकेट, मैटलैब के लिए जीपीयू इंजन का व्यावसायीकरण
  • एटेजी पीएक्स जावा एक्सटेंशन जो स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और मैपरेडस एल्गोरिदम की सरल अभिव्यक्ति को सक्षम बनाता है।
  • एम्बियोट, टेल्केमी का अंतः स्थापित स्ट्रीमिंग विश्लेषण अभिकर्ता है।
  • फ्लडगेट, प्ले स्टेशन 3,एक्सबॉक्स-360, वाईआई और पीसी के लिए गेमब्रीओ गेम इंजन के साथ प्रदान किया गया एक स्ट्रीम प्रसंस्करण
  • ओपनएचएमपीपी, मैनी-कोर प्रोग्रामिंग का एक निर्देशक विजन
  • पीकस्ट्रीम,[13] ब्रुक परियोजना का एक स्पिनआउट (जून 2007 में गूगल द्वारा अधिग्रहीत)
  • आईबीएम स्पेड - स्ट्रीम प्रसंस्करण एप्लिकेशन निर्देशक इंजन (बी. गेडिक, स्पेड सिस्टम एस निर्देशक स्ट्रीम प्रसंस्करण इंजन एसीएम सिगमोड 2008)
  • रैपिडमाइंड, लिबश का व्यावसायीकरण (अगस्त 2009 में इंटेल द्वारा अधिग्रहित)
  • टी-स्ट्रीम,[14][15] हेवलेट-पैकार्ड कैम्ब्रिज शोध संस्थान

विक्रेता-विशिष्ट भाषाओं में सम्मिलित हैं:

  • एएमडी/एटीआई से ब्रूक+ (ब्रुक का एएमडी हार्डवेयर अनुकूलित कार्यान्वयन)
  • एनवीडिया से सीयूडीए (कम्प्यूट यूनिफाइड डिवाइससंरचना)
  • उच्च-थ्रूपुट कंप्यूटिंग के लिए इंटेल सीटी- सी
  • स्ट्रीम प्रसंस्करण, इंक से स्ट्रीम, सी, स्टैनफोर्ड में काल्पनिक कार्य का व्यावसायीकरण

घटना-आधारित प्रसंस्करण

बैच फ़ाइल-आधारित प्रसंस्करण (कुछ वास्तविक स्ट्रीम प्रसंस्करण का अनुकरण करता है, लेकिन सामान्य रूप से बहुत कम प्रदर्शन होता है:)

निरंतर ऑपरेटर स्ट्रीम प्रसंस्करण[clarification needed]

  • अपाचे फ्लैश
  • वॉलमार्टलैब्स एमयूपीडी-8[16]
  • एक्लिप्स स्ट्रीमशीट - स्ट्रीम प्रसंस्करण के लिए स्प्रेडशीट

स्ट्रीम प्रसंस्करण सेवाएं:

  • अमेज़ॅन वेब सेवा - किनेसिस
  • गूगल क्लाउड - डेटा संचार
  • माइक्रोसॉफ्ट एज़्योर - स्ट्रीम विश्लेषण
  • डेटास्ट्रीम - डेटा स्ट्रीमिंग विश्लेषण प्लेटफॉर्म
  • आईबीएम संचार
    • आईबीएम स्ट्रीमिंग विश्लेषण
  • इवेंटडोर एसक्यूएल स्ट्रीम प्रसंस्करण

यह भी देखें


संदर्भ

  1. A SHORT INTRO TO STREAM PROCESSING
  2. FCUDA: Enabling Efficient Compilation of CUDA Kernels onto FPGAs
  3. IEEE Journal of Solid-State Circuits:"A Programmable 512 GOPS Stream Processor for Signal, Image, and Video Processing", Stanford University and Stream Processors, Inc.
  4. Khailany, Dally, Rixner, Kapasi, Owens and Towles: "Exploring VLSI Scalability of Stream Processors", Stanford and Rice University.
  5. Gummaraju and Rosenblum, "Stream processing in General-Purpose Processors", Stanford University.
  6. Kapasi, Dally, Rixner, Khailany, Owens, Ahn and Mattson, "Programmable Stream Processors", Universities of Stanford, Rice, California (Davis) and Reservoir Labs.
  7. Eric Chan. "स्टैनफोर्ड रियल-टाइम प्रोग्रामेबल शेडिंग प्रोजेक्ट". Research group web site. Retrieved March 9, 2017.
  8. "इमेजिन - इमेज और सिग्नल प्रोसेसर". Group web site. Retrieved March 9, 2017.
  9. "मेरिमैक - स्टैनफोर्ड स्ट्रीमिंग सुपरकंप्यूटर प्रोजेक्ट". Group web site. Archived from the original on December 18, 2013. Retrieved March 9, 2017.
  10. Imagine
  11. Merrimac
  12. Memeti, Suejb; Pllana, Sabri (October 2018). "HSTREAM: A Directive-Based Language Extension for Heterogeneous Stream Computing". 2018 IEEE International Conference on Computational Science and Engineering (CSE). IEEE. pp. 138–145. arXiv:1809.09387. doi:10.1109/CSE.2018.00026. ISBN 978-1-5386-7649-3.
  13. PeakStream unveils multicore and CPU/GPU programming solution
  14. TStreams: A Model of Parallel Computation (Technical report).
  15. TStreams: How to Write a Parallel Program (Technical report).
  16. "GitHub - walmartlabs/Mupd8: Muppet". GitHub.