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

From Vigyanwiki
No edit summary
 
(8 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>


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


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


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


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


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


प्रत्येक रिकॉर्ड के लिए हम केवल इनपुट से पढ़ सकते हैं, उस पर संचालन कर सकते हैं और आउटपुट पर लिख सकते हैं। एकाधिक इनपुट और एकाधिक आउटपुट होने की स्वीकृति है, लेकिन कभी भी स्मृति का एक टुकड़ा जो पठनीय और लिखने योग्य दोनों नहीं है। <!-- We could discuss weeks on whatever this can be considered generally true by pointing out the implications of the exact wording. -->
प्रत्येक रिकॉर्ड के लिए हम केवल इनपुट से पढ़ सकते हैं, उस पर संचालन कर सकते हैं और आउटपुट पर लिख सकते हैं। एकाधिक इनपुट और एकाधिक आउटपुट होने की स्वीकृति है लेकिन कभी भी मेमोरी का एक भाग जो पठनीय और लिखने योग्य दोनों नहीं है।<!-- 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 32: Line 32:
ON Orders.orderId = Trades.orderId;
ON Orders.orderId = Trades.orderId;
</syntaxhighlight>
</syntaxhighlight>
एक अन्य नमूना कोड टुकड़ा चर्च की घंटी बजने, टक्सीडो या सुबह के सूट में एक आदमी की उपस्थिति, बहने वाले सफेद गाउन में एक महिला और हवा में उड़ते चावल जैसी बाहरी घटनाओं के प्रवाह के बीच शादियों का पता लगाता है। एक जटिल या समग्र घटना वह है जो व्यक्तिगत साधारण घटनाओं से होती है: एक शादी हो रही है।
एक अन्य प्रतिदर्श कोड खंड बाहरी "घटनाओं" के संचार के बीच शादियों का पता लगाता है, जैसे कि चर्च की घंटियाँ बजना, टक्सीडो पहने एक आदमी की उपस्थिति या सुबह का सूट पहने हुए सफेद गाउन में एक महिला और हवा में उड़ते चावल, एक "जटिल" या "मिश्रित" घटना है जो व्यक्तिगत सरल घटनाओं से अनुमान लगाती है कि एक शादी हो रही है।


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


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


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


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


=== समानांतर एसआईएमडी प्रतिमान, पैक्ड रजिस्टर (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 * कंपोनेंट्सPerElement से numElements तक कम कर देती है। जंप निर्देशों की संख्या भी कम हो गई है, क्योंकि लूप कम बार चलाया जाता है। ये लाभ चार गणितीय परिचालनों के समानांतर निष्पादन के परिणामस्वरूप होते हैं।
हालाँकि, आप देख सकते हैं, यह विधि डिकोड किए गए निर्देशों की संख्या को <code>numElements</code> <code>PerElement</code> से <code>numElements</code> तक अपेक्षाकृत कम कर देती है। जंप निर्देशों की संख्या भी कम हो गई है, क्योंकि लूप कम बार चलाया जाता है। ये लाभ चार गणितीय परिचालनों के समानांतर निष्पादन के परिणामस्वरूप होते हैं।


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


=== समानांतर धारा प्रतिमान (एसआईएमडी/एमआईएमडी) ===
=== समानांतर धारा प्रतिमान (एसआईएमडी/एमआईएमडी) ===
Line 74: Line 74:
result = kernel.invoke(elements)
result = kernel.invoke(elements)
</syntaxhighlight>
</syntaxhighlight>
इस प्रतिमान में, प्रत्येक घटक ब्लॉक को अलग से परिभाषित करने के बजाय, संपूर्ण डेटासेट को परिभाषित किया गया है। डेटा के सेट का वर्णन पहली दो पंक्तियों में किया जाना माना जाता है। उसके बाद, स्रोतों और कर्नेल से परिणाम का अनुमान लगाया जाता है। सरलता के लिए, इनपुट और आउटपुट डेटा के बीच 1:1 मैपिंग है लेकिन इसकी आवश्यकता नहीं है। प्रयुक्त गुठली भी अधिक जटिल हो सकती है।
इस प्रतिमान में प्रत्येक घटक ब्लॉक को अलग से परिभाषित करने के अतिरिक्त संपूर्ण डेटा समुच्चय को परिभाषित किया गया है। डेटा के समुच्चय का वर्णन पहली दो पंक्तियों में किया जाना माना जाता है। उसके बाद स्रोतों और कर्नेल से परिणाम का अनुमान लगाया जाता है। सरलता के लिए इनपुट और आउटपुट डेटा के बीच 1:1 समानता है लेकिन इसकी आवश्यकता नहीं है। प्रयुक्त संख्या भी अधिक जटिल हो सकती है।


इस प्रतिमान का कार्यान्वयन आंतरिक रूप से एक लूप को "अनरोल" कर सकता है। यह चिप जटिलता के साथ थ्रूपुट को स्केल करने की स्वीकृति देता है, आसानी से सैकड़ों ALU का उपयोग करता है।<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> जटिल डेटा पैटर्न का उन्मूलन इस अतिरिक्त क्षमता को उपलब्ध कराता है।


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


यह नोट किया गया है कि जब मानक सीपीयू जैसे सामान्य प्रोसेसर पर प्रयुक्त किया जाता है, तो केवल 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>एटी एंड टी ने स्ट्रीम-एन्हांस्ड प्रोसेसर पर भी शोध किया क्योंकि ग्राफिक्स प्रसंस्करण इकाइयां गति और कार्यक्षमता दोनों में तेजी से विकसित हुईं।[1] इन शुरुआती दिनों से, दर्जनों स्ट्रीम प्रसंस्करण भाषाओं के साथ-साथ विशेष हार्डवेयर भी विकसित किए गए हैं।


=== प्रोग्रामिंग मॉडल नोट्स ===
=== प्रोग्रामिंग मॉडल नोट्स ===
समानांतर प्रसंस्करण के क्षेत्र में सबसे तात्कालिक चुनौती उपयोग किए गए हार्डवेयर संरचना के प्रकार में नहीं है, लेकिन वास्तविक दुनिया के वातावरण में स्वीकार्य प्रदर्शन के साथ सिस्टम को प्रोग्राम करना कितना आसान होगा। इमेजिन जैसी मशीनें स्वचालित निर्भरता, मेमोरी आवंटन और डीएमए शेड्यूलिंग के साथ एक सीधे एकल-थ्रेडेड मॉडल का उपयोग करती हैं। यह अपने आप में प्रोग्रामर, टूल और हार्डवेयर के बीच कार्यों की इष्टतम परत खोजने में एमआईटी और स्टैनफोर्ड के शोध का परिणाम है। प्रोग्रामर एल्गोरिदम को समानांतर हार्डवेयर में मैप करने में टूल को मात देते हैं और टूल सबसे स्मार्ट मेमोरी आवंटन योजनाओं आदि का पता लगाने में प्रोग्रामर को मात देते हैं। विशेष रूप से चिंता का विषय सेल जैसे एमआईएमडी डिजाइन हैं, जिसके लिए प्रोग्रामर को कई कोर में एप्लिकेशन विभाजन से निपटने और प्रक्रिया सिंक्रनाइज़ेशन से निपटने की आवश्यकता होती है। और भार संतुलन.
समानांतर प्रसंस्करण के क्षेत्र में सबसे तात्कालिक चुनौती उपयोग किए गए हार्डवेयर संरचना के प्रकार में नहीं है, लेकिन वास्तविक समाज के वातावरण में स्वीकार्य प्रदर्शन के साथ सिस्टम को प्रोग्राम करना कितना आसान होगा। जैसी मशीनें स्वचालित निर्भरता, मेमोरी आवंटन और डीएमए शेड्यूलिंग के साथ एक सीधे एकल-थ्रेडेड मॉडल का उपयोग करती हैं। यह अपने आप में प्रोग्रामर, टूल और हार्डवेयर के बीच कार्यों की इष्टतम परत खोजने में एमआईटी और स्टैनफोर्ड के शोध का परिणाम है। प्रोग्रामर एल्गोरिदम को समानांतर हार्डवेयर में मैप करने में टूल को मात देते हैं और टूल सबसे स्मार्ट मेमोरी आवंटन योजनाओं आदि का पता लगाने में प्रोग्रामर को मात देते हैं। विशेष रूप से चिंता का विषय सेल जैसे एमआईएमडी डिजाइन हैं, जिसके लिए प्रोग्रामर को कई कोर में एप्लिकेशन विभाजन से निपटने और प्रक्रिया समकालिक से निपटने की आवश्यकता होती है। एसआईएमडी प्रोग्रामिंग का एक दोष ऐरे-ऑफ़-स्ट्रक्चर्स (एओएस) और स्ट्रक्चर-ऑफ़-ऐरेज़ (एसओए) का परिणाम था। प्रोग्रामर प्रायः मेमोरी में इकाइयों का प्रतिनिधित्व करते हैं। उदाहरण के लिए 3डी स्पेस में एक कण का स्थान, गेंद का रंग और उसका आकार नीचे दिया गया है:<syntaxhighlight lang="c">
 
एसआईएमडी प्रोग्रामिंग का एक दोष ऐरे-ऑफ़-स्ट्रक्चर्स (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 101: Line 97:
};
};
</syntaxhighlight>
</syntaxhighlight>
जब इनमें से कई संरचनाएं मेमोरी में सम्मिलित होती हैं तो उन्हें संरचनाओं की एक सरणी (एओएस) टोपोलॉजी में एक सरणी बनाते हुए अंत तक रखा जाता है। इसका मतलब यह है कि प्रत्येक कण के स्थान पर कुछ एल्गोरिदम प्रयुक्त किया जाना चाहिए, बदले में इसे अन्य विशेषताओं वाले मेमोरी स्थानों को छोड़ देना चाहिए। यदि इन विशेषताओं की आवश्यकता नहीं है तो इसके परिणामस्वरूप सीपीयू कैश का व्यर्थ उपयोग होता है। इसके अतिरिक्त, एक एसआईएमडी निर्देश सामान्यतः यह उम्मीद करेगा कि वह जिस डेटा पर काम करेगा वह मेमोरी में निरंतर रहेगा, तत्वों को संरेखित करने की भी आवश्यकता हो सकती है। डेटा की मेमोरी लोकेशन को संरचना से बाहर ले जाकर स्ट्रीम में कुशल पहुंच के लिए और एसआईएमडी निर्देशों को संचालित करने के लिए डेटा को बेहतर ढंग से व्यवस्थित किया जा सकता है। सरणियों की संरचना (एसओए), जैसा कि नीचे दिखाया गया है, इसकी स्वीकृति दे सकती है।
जब इनमें से कई संरचनाएं मेमोरी में सम्मिलित होती हैं तो उन्हें संरचनाओं की एक सरणी (एओएस) टोपोलॉजी में एक सरणी बनाते हुए अंत तक रखा जाता है। इसका अर्थ यह है कि प्रत्येक कण के स्थान पर कुछ एल्गोरिदम प्रयुक्त किया जाना चाहिए, जिसके रूप मे इसे अन्य विशेषताओं वाले मेमोरी स्थानों को छोड़ देना चाहिए। यदि इन विशेषताओं की आवश्यकता नहीं है तो इसके परिणामस्वरूप सीपीयू कैश का व्यर्थ उपयोग होता है। इसके अतिरिक्त, एक एसआईएमडी निर्देश सामान्यतः यह उम्मीद करेगा कि वह जिस डेटा पर कार्य करेगा वह मेमोरी में निरंतर रहेगा, तत्वों को संरेखित करने की भी आवश्यकता हो सकती है। डेटा की मेमोरी एड्रेस को संरचना से बाहर ले जाकर स्ट्रीम में कुशल अभिगम्य के लिए और एसआईएमडी निर्देशों को संचालित करने के लिए डेटा को अपेक्षाकृत रूप से व्यवस्थित किया जा सकता है। सरणियों की संरचना (एसओए), जैसा कि नीचे दिखाया गया है, इसकी स्वीकृति दे सकती है।
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
struct particle_t {
struct particle_t {
Line 109: Line 105:
};
};
</syntaxhighlight>
</syntaxhighlight>
डेटा को संरचना में रखने के बजाय, यह डेटा के लिए केवल पॉइंटर्स (मेमोरी लोकेशन) रखता है। कमियां यह हैं कि यदि किसी वस्तु की एकाधिक विशेषताओं को संचालित किया जाना है तो वे अब मेमोरी में दूर हो सकते हैं और परिणामस्वरूप कैश मिस हो सकता है। संरेखण और किसी भी आवश्यक पैडिंग से मेमोरी उपयोग में वृद्धि होती है। कुल मिलाकर, यदि उदाहरण के लिए संरचनाओं को जोड़ा और हटाया जाता है, तो मेमोरी प्रबंधन अधिक जटिल हो सकता है।
डेटा को संरचना में रखने के अतिरिक्त यह डेटा के लिए केवल पॉइंटर्स (मेमोरी एड्रेस) रखता है। दोष यह हैं कि यदि किसी वस्तु की एकाधिक विशेषताओं को संचालित किया जाना है तो वे अब मेमोरी में दूर हो सकते हैं और परिणामस्वरूप कैश मिस हो सकता है। संरेखण और किसी भी आवश्यक पैडिंग से मेमोरी उपयोग में वृद्धि होती है। सामान्यतः यदि उदाहरण के लिए संरचनाओं को जोड़ा और हटाया जाता है, तो मेमोरी प्रबंधन अधिक जटिल हो सकता है।


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


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


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


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


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


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


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


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


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


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


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


=== हार्डवेयर-इन-द-लूप मुद्दे ===
=== हार्डवेयर मे लूप समस्या ===
{{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. -->
यद्यपि स्ट्रीमिंग प्रकार से कंप्यूटिंग करते समय मुख्यधारा के जीपीयू से भी तीव्रता के क्रम की संभावना की जा सकती है, लेकिन सभी एप्लिकेशन इससे लाभान्वित नहीं होते हैं। संचार विलंब वास्तव में सबसे बड़ी समस्या है। हालाँकि [[पीसीआई एक्सप्रेस]] ने पूर्ण-डुप्लेक्स संचार के साथ इसमें सुधार किया है, लेकिन जीपीयू (और संभवतः एक सामान्य स्ट्रीम प्रसंस्करण) को कार्य करने में संभवतः लंबा समय लगेगा। इसका अर्थ यह है कि छोटे डेटा समुच्चय के लिए उनका उपयोग करना सामान्यतः प्रतिकूल है क्योंकि कर्नेल रूपांतरण के लिए एक कीमती संचार है, स्ट्रीम संरचना में छोटी स्ट्रीम के लिए जुर्माना भी लगता है। इस व्यवहार को लघु स्ट्रीम प्रभाव कहा जाता है।<!-- 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 चरणों से अधिक की पाइपलाइन होती है। सेटिंग्स बदलने की लागत संशोधित की जा रही सेटिंग पर निर्भर करती है लेकिन अब इसे हमेशा महंगा माना जाता है। पाइपलाइन के विभिन्न स्तरों पर उन समस्याओं से बचने के लिए, "उबर शेडर्स" और "टेक्सचर एटलस" जैसी कई तकनीकों को तैनात किया गया है। वे तकनीकें जीपीयू की प्रकृति के कारण गेम-उन्मुख हैं, लेकिन अवधारणाएं सामान्य स्ट्रीम प्रसंस्करण के लिए भी दिलचस्प हैं।
स्ट्रीम प्रसंस्करण पर पाइपलाइनिंग एक बहुत व्यापक और भारी उपयोग की जाने वाली प्रथा है, जिसमें जीपीयू में 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> का उद्देश्य स्ट्रीम-आधारित सुपरकंप्यूटर विकसित करना है। मेरिमैक का इरादा एक ही तकनीक से निर्मित क्लस्टर-आधारित वैज्ञानिक कंप्यूटरों की तुलना में प्रति यूनिट लागत पर अधिक प्रदर्शन प्रदान करने के लिए स्ट्रीम संरचना और उन्नत इंटरकनेक्शन नेटवर्क का उपयोग करने का है।
* स्टैनफोर्ड की एक अन्य परियोजना, जिसे मेरिमैक कहा जाता है।<ref>[http://merrimac.stanford.edu/ Merrimac]</ref> जिसका उद्देश्य स्ट्रीम-आधारित सुपरकंप्यूटर विकसित करना है। मेरिमैक का उद्देश्य एक ही तकनीक से निर्मित क्लस्टर-आधारित वैज्ञानिक कंप्यूटरों की तुलना में प्रति इकाई लागत पर अधिक प्रदर्शन प्रदान करने के लिए स्ट्रीम संरचना और उन्नत अंतःसंबंध नेटवर्क का उपयोग करने का है।
* स्टैनफोर्ड के इमेजिन प्रोजेक्ट के वाणिज्यिक स्पिन-ऑफ, स्ट्रीम प्रोसेसर्स, इंक के स्टॉर्म -1 परिवार की घोषणा [[आईएसएससीसी]] 2007 में एक फीचर प्रस्तुति के समय की गई थी। परिवार में 30 जीओपीएस से लेकर 220 16-बिट जीओपीएस (अरबों ऑपरेशन) तक के चार सदस्य सम्मिलित हैं प्रति सेकंड), सभी को 130 नैनोमीटर प्रक्रिया में टीएसएमसी में निर्मित किया गया। ये उपकरण [[वीडियो कॉन्फ्रेंसिंग]], [[ मल्टीफ़ंक्शन प्रिंटर |मल्टीफ़ंक्शन प्रिंटर]] और डिजिटल वीडियो निगरानी उपकरण सहित डीएसपी बाज़ार के उच्च स्तर को लक्षित करते हैं।
* स्टैनफोर्ड के काल्पनिक परियोजना के वाणिज्यिक स्पिन-ऑफ, स्ट्रीम प्रसंस्करण्स, इंक के स्टॉर्म -1 समूह की घोषणा [[आईएसएससीसी]] 2007 में एक विशेषता प्रस्तुति के समय की गई थी। समूह में 30 जीओपीएस से लेकर 220 16-बिट जीओपीएस (अरबों ऑपरेशन) तक के चार सदस्य सम्मिलित हैं। सभी को 130 नैनोमीटर प्रक्रिया में टीएसएमसी में निर्मित किया गया है। ये उपकरण [[वीडियो कॉन्फ्रेंसिंग]], [[ मल्टीफ़ंक्शन प्रिंटर |बहु फ़ंक्शन प्रिंटर]] और डिजिटल वीडियो संरक्षण उपकरण सहित डीएसपी विणपन के उच्च स्तर को लक्षित करते हैं।
* [[जीपीयू]] व्यापक, उपभोक्ता-ग्रेड स्ट्रीम प्रोसेसर हैं{{ref|GPUasSTREAM}} मुख्य रूप से [[एएमडी]] और [[ NVIDIA | NVIDIA]] द्वारा डिजाइन किया गया। धारा प्रसंस्करण के दृष्टिकोण से विभिन्न पीढ़ियों पर ध्यान दिया जाना चाहिए:
* [[जीपीयू]] व्यापक, उपभोक्ता-ग्रेड स्ट्रीम प्रसंस्करण हैं।{{ref|GPUasSTREAM}} मुख्य रूप से [[एएमडी]] और [[ NVIDIA |एनवीआईडी​​आईए]] द्वारा डिजाइन किया गया है। धारा प्रसंस्करण के दृष्टिकोण से विभिन्न पीढ़ियों पर ध्यान दिया जाना चाहिए:
** प्री-R2xx/NV2x: स्ट्रीम प्रसंस्करण के लिए कोई स्पष्ट समर्थन नहीं। कर्नेल ऑपरेशन एपीआई में छिपे हुए थे और सामान्य उपयोग के लिए बहुत कम लचीलापन प्रदान करते थे।
** 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. -->
* एचपीसी को लक्षित उत्पाद लाइन के लिए [[एएमडी फायरस्ट्रीम]] ब्रांड नाम
* एचपीसी को लक्षित उत्पाद लाइन के लिए [[एएमडी फायरस्ट्रीम]] का ब्रांड नाम।
* एचपीसी को लक्षित करने वाली उत्पाद श्रृंखला के लिए [[एनवीडिया टेस्ला]] ब्रांड नाम
* एचपीसी को लक्षित करने वाली उत्पाद श्रृंखला के लिए [[एनवीडिया टेस्ला]] का ब्रांड नाम।
* सोनी कंप्यूटर एंटरटेनमेंट, तोशिबा कॉरपोरेशन और आईबीएम के गठबंधन एसटीआई का सेल प्रोसेसर एक हार्डवेयर संरचना है जो उचित सॉफ्टवेयर समर्थन के साथ स्ट्रीम प्रोसेसर की तरह काम कर सकता है। इसमें एक नियंत्रित प्रोसेसर, पीपीई (पावर प्रसंस्करण एलिमेंट, एक आईबीएम पावरपीसी) और एसआईएमडी कोप्रोसेसरों का एक सेट होता है, जिन्हें एसपीई (सिनर्जिस्टिक प्रसंस्करण एलिमेंट्स) कहा जाता है, प्रत्येक में स्वतंत्र प्रोग्राम काउंटर और निर्देश मेमोरी होती है, वास्तव में एक एमआईएमडी मशीन होती है। देशी प्रोग्रामिंग मॉडल में सभी डीएमए और प्रोग्राम शेड्यूलिंग को प्रोग्रामर पर छोड़ दिया जाता है। हार्डवेयर स्थानीय संचार के लिए प्रोसेसर के बीच एक तेज़ रिंग बस प्रदान करता है। क्योंकि निर्देशों और डेटा के लिए स्थानीय मेमोरी सीमित है, केवल वही प्रोग्राम जो इस संरचना का प्रभावी ढंग से फायदा उठा सकते हैं, उन्हें या तो छोटी मेमोरी फ़ुटप्रिंट की आवश्यकता होती है या स्ट्रीम प्रोग्रामिंग मॉडल का पालन करना पड़ता है। एक उपयुक्त एल्गोरिदम के साथ सेल का प्रदर्शन शुद्ध स्ट्रीम प्रोसेसर के साथ प्रतिस्पर्धा कर सकता है, हालांकि इसके लिए लगभग हमेशा एल्गोरिदम और सॉफ्टवेयर के पूर्ण रीडिज़ाइन की आवश्यकता होती है।
* सोनी कंप्यूटर एंटरटेनमेंट, तोशिबा संगठन और आईबीएम के गठबंधन एसटीआई का सेल प्रोसेसर एक हार्डवेयर संरचना है जो उपयुक्त सॉफ्टवेयर समर्थन के साथ स्ट्रीम प्रसंस्करण की तरह कार्य कर सकती है। इसमें एक नियंत्रित प्रोसेसर, पीपीई (ऊर्जा प्रसंस्करण तत्व आईबीएम पावरपीसी) और एसआईएमडी कोप्रोसेसरों का एक समुच्चय होता है, जिन्हें एसपीई (सिनर्जिस्टिक प्रसंस्करण तत्व) कहा जाता है। प्रत्येक में स्वतंत्र प्रोग्राम गणना और निर्देश मेमोरी होती है, वास्तव में एक एमआईएमडी मशीन होती है। देशी प्रोग्रामिंग मॉडल में सभी डीएमए और प्रोग्राम शेड्यूलिंग को प्रोग्रामर पर छोड़ दिया जाता है। हार्डवेयर स्थानीय संचार के लिए प्रोसेसर के बीच एक तीव्र ध्वनि प्रदान करता है। क्योंकि निर्देशों और डेटा के लिए स्थानीय मेमोरी सीमित है, केवल वही प्रोग्राम जो इस संरचना का प्रभावी रूप से प्राप्त कर सकते हैं, उन्हें या तो छोटी मेमोरी फ़ुटप्रिंट की आवश्यकता होती है या स्ट्रीम प्रोग्रामिंग मॉडल का अनुसरण करना पड़ता है। एक उपयुक्त एल्गोरिदम के साथ सेल का प्रदर्शन शुद्ध स्ट्रीम प्रसंस्करण के साथ प्रतिस्पर्धा कर सकता है। हालांकि इसके लिए लगभग सदैव एल्गोरिदम और सॉफ्टवेयर के पूर्ण डिज़ाइन की आवश्यकता होती है।


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


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


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


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


== यह भी देखें ==
== यह भी देखें ==
Line 266: Line 257:
* [[डेटा स्ट्रीम प्रबंधन प्रणाली]]
* [[डेटा स्ट्रीम प्रबंधन प्रणाली]]
* [[आयाम में कमी]]
* [[आयाम में कमी]]
* [[प्रवाह आधारित प्रोग्रामिंग]]
* [[स्ट्रीम आधारित प्रोग्रामिंग]]
* [[हार्डवेयर एक्सिलरेशन]]
* [[हार्डवेयर एक्सिलरेशन]]
* [[जीपीयू पर आणविक मॉडलिंग]]
* [[जीपीयू पर आणविक मॉडलिंग]]
* [[समानांतर कंप्यूटिंग]]
* [[समानांतर कंप्यूटिंग]]
* [[विभाजित वैश्विक पता स्थान]]
* [[विभाजित वैश्विक स्थानीय एड्रेस]]
* [[वास्तविक समय कंप्यूटिंग]]
* [[वास्तविक समय कंप्यूटिंग]]
* [[रियल टाइम स्ट्रीमिंग प्रोटोकॉलl]]
* [[वास्तविक समय स्ट्रीमिंग प्रोटोकॉल]]
* [[एकल निर्देश, अनेक सूत्र|एसआईएमटी]]
* [[एकल निर्देश, अनेक सूत्र|एसआईएमटी]]
* [[स्ट्रीमिंग एल्गोरिदम]]
* [[स्ट्रीमिंग एल्गोरिदम]]
* [[वेक्टर प्रोसेसर]]
* [[सदिश प्रसंस्करण]]
}}
}}
<!--
<!--
Line 292: 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.