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

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


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


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


स्ट्रीम प्रोसेसिंग उन अनुप्रयोगों के लिए विशेष रूप से उपयुक्त है जो तीन अनुप्रयोग विशेषताओं को प्रदर्शित करते हैं:{{Citation needed|date=June 2008}}
स्ट्रीम प्रसंस्करण उन अनुप्रयोगों के लिए विशेष रूप से उपयुक्त है जो तीन अनुप्रयोग विशेषताओं को प्रदर्शित करते हैं:{{Citation needed|date=June 2008}}
* गणना तीव्रता, I/O या वैश्विक स्मृति संदर्भ प्रति अंकगणितीय संचालन की संख्या। आज कई सिग्नल प्रोसेसिंग अनुप्रयोगों में यह 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]] क्वेरी (एक क्वेरी जो टाइमस्टैम्प और विंडो अवधि के आधार पर आने वाले डेटा को हमेशा के लिए संसाधित करती है) का उपयोग करके डेटा स्ट्रीम को संसाधित करने का एक उदाहरण है। यह कोड खंड दो डेटा स्ट्रीमों में से एक को दर्शाता है, एक स्टॉक ऑर्डर के लिए, और एक परिणामी स्टॉक ट्रेडों के लिए। क्वेरी ऑर्डर दिए जाने के एक सेकंड के भीतर ट्रेड द्वारा मिलान किए गए सभी ऑर्डर की एक स्ट्रीम आउटपुट करती है। आउटपुट स्ट्रीम को टाइमस्टैम्प द्वारा सॉर्ट किया जाता है, इस मामले में, ऑर्डर स्ट्रीम से टाइमस्टैम्प।
उदाहरण के रूप मे निम्नलिखित कोड टुकड़े घटना धाराओं के भीतर पैटर्न का पता लगाने का प्रदर्शन करते हैं। पहला एक सतत SQL क्वेरी (एक क्वेरी जो टाइमस्टैम्प और विंडो अवधि के आधार पर आने वाले डेटा को हमेशा के लिए संसाधित करती है) का उपयोग करके डेटा स्ट्रीम को संसाधित करने का एक उदाहरण है। यह कोड खंड दो डेटा स्ट्रीम के जॉइन को दर्शाता है, एक स्टॉक ऑर्डर के लिए और दूसरा परिणामी स्टॉक ट्रेडों के लिए। ऑर्डर दिए जाने के एक सेकंड के भीतर क्वेरी किसी ट्रेड द्वारा मिलान किए गए सभी ऑर्डर की एक स्ट्रीम आउटपुट करती है। आउटपुट स्ट्रीम को टाइमस्टैम्प द्वारा क्रमबद्ध किया जाता है, इस मामले में ऑर्डर स्ट्रीम से टाइमस्टैम्प।


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


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


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


=== समानांतर SIMD प्रतिमान, पैक्ड रजिस्टर (SWAR) ===
=== समानांतर एसआईएमडी प्रतिमान, पैक्ड रजिस्टर (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
Line 67: Line 63:
यह वास्तव में अतिसरलीकृत है। यह निर्देश मानता है <code>vector_sum</code> काम करता है। यद्यपि [[आंतरिक कार्य]] के साथ ऐसा ही होता है, वास्तव में यहां बहुत अधिक जानकारी पर ध्यान नहीं दिया जाता है जैसे वेक्टर घटकों की संख्या और उनके डेटा प्रारूप। यह स्पष्टता के लिए किया जाता है।
यह वास्तव में अतिसरलीकृत है। यह निर्देश मानता है <code>vector_sum</code> काम करता है। यद्यपि [[आंतरिक कार्य]] के साथ ऐसा ही होता है, वास्तव में यहां बहुत अधिक जानकारी पर ध्यान नहीं दिया जाता है जैसे वेक्टर घटकों की संख्या और उनके डेटा प्रारूप। यह स्पष्टता के लिए किया जाता है।


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


स्ट्रीम प्रोसेसर का अधिकांश (90%) काम ऑन-चिप किया जाता है, जिसके लिए मेमोरी में संग्रहीत करने के लिए वैश्विक डेटा का केवल 1% आवश्यक होता है। यह वह जगह है जहाँ कर्नेल अस्थायी और निर्भरता को जानना भुगतान करता है।
स्ट्रीम प्रोसेसर का अधिकांश (90%) काम ऑन-चिप किया जाता है, जिसके लिए मेमोरी में संग्रहीत करने के लिए वैश्विक डेटा का केवल 1% आवश्यक होता है। यह वह जगह है जहाँ कर्नेल अस्थायी और निर्भरता को जानना भुगतान करता है।


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


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


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


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


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


स्ट्रीम प्रोग्रामिंग भाषाओं के गैर-व्यावसायिक उदाहरणों में शामिल हैं:
स्ट्रीम प्रोग्रामिंग भाषाओं के गैर-व्यावसायिक उदाहरणों में सम्मिलित हैं:
* [[Ateji PX]] फ्री एडिशन, [[JVM]] पर स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और MapReduce एल्गोरिथम की एक सरल अभिव्यक्ति को सक्षम करता है
* [[Ateji PX]] फ्री एडिशन, [[JVM]] पर स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और MapReduce एल्गोरिथम की एक सरल अभिव्यक्ति को सक्षम करता है
* ऑटो-पाइप, सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से, स्ट्रीमिंग अनुप्रयोगों के लिए एक अनुप्रयोग विकास वातावरण जो विषम प्रणालियों (सीपीयू, [[जीपीजीपीयू]], एफपीजीए) के लिए अनुप्रयोगों के संलेखन की अनुमति देता है। CPU के लिए C, C++ और Java के किसी भी संयोजन में एप्लिकेशन विकसित किए जा सकते हैं। FPGAs के लिए Verilog या VHDL। कुडा वर्तमान में एनवीडिया जीपीजीपीयू के लिए उपयोग किया जाता है। ऑटो-पाइप कई मशीनों के बीच टीसीपी कनेक्शन के समन्वय को भी संभालता है।
* ऑटो-पाइप, सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से, स्ट्रीमिंग अनुप्रयोगों के लिए एक एप्लिकेशन विकास वातावरण जो विषम प्रणालियों (सीपीयू, जीपीजीपीयू, एफपीजीए) के लिए अनुप्रयोगों को लिखने की स्वीकृति देता है। सीपीयू के लिए एप्लिकेशन को C, C++ और Java के किसी भी संयोजन में विकसित किया जा सकता है। एफपीजीए के लिए वेरिलॉग या वीएचडीएल। क्यूडा का उपयोग वर्तमान में एनवीडिया जीपीजीपीयू के लिए किया जाता है। ऑटो-पाइप कई मशीनों के बीच टीसीपी कनेक्शन के समन्वय को भी संभालता है।
* ACOTES प्रोग्रामिंग मॉडल: [[OpenMP]] पर आधारित कैटेलोनिया के [[कैटेलोनिया के पॉलिटेक्निक विश्वविद्यालय]]
* ACOTES प्रोग्रामिंग मॉडल: [[OpenMP]] पर आधारित कैटेलोनिया के [[कैटेलोनिया के पॉलिटेक्निक विश्वविद्यालय]]
*बीपबीप, यूक्यूएसी में फॉर्मल कंप्यूटर साइंस लैब से एक सरल और हल्का जावा-आधारित इवेंट स्ट्रीम प्रोसेसिंग लाइब्रेरी।
*बीपबीप, यूक्यूएसी में फॉर्मल कंप्यूटर साइंस लैब से एक सरल और हल्का जावा-आधारित इवेंट स्ट्रीम प्रसंस्करण लाइब्रेरी।
* स्टैनफोर्ड से ब्रुक भाषा
* स्टैनफोर्ड से ब्रुक भाषा
* [[सीएएल अभिनेता भाषा]]: राइटिंग (डेटाफ्लो) एक्टर्स के लिए एक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, जो स्टेटफुल ऑपरेटर्स हैं जो डेटा ऑब्जेक्ट्स (टोकन) की इनपुट स्ट्रीम को आउटपुट स्ट्रीम में बदल देते हैं।
* [[सीएएल अभिनेता भाषा]]: राइटिंग (डेटाफ्लो) एक्टर्स के लिए एक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, जो स्टेटफुल ऑपरेटर्स हैं जो डेटा वस्तु्स (टोकन) की इनपुट स्ट्रीम को आउटपुट स्ट्रीम में बदल देते हैं।
* Cal2Many एक कोड जनरेशन फ्रेमवर्क Halmstad University, स्वीडन से। यह CAL कोड को इनपुट के रूप में लेता है और अनुक्रमिक C, छेनी, समानांतर C लक्ष्यीकरण एपिफेनी आर्किटेक्चर, ajava और astruct लक्ष्यीकरण Ambric आर्किटेक्चर, आदि सहित विभिन्न लक्ष्य विशिष्ट भाषाएँ उत्पन्न करता है।
* Cal2Many एक कोड जनरेशन फ्रेमवर्क Halmstad University, स्वीडन से। यह CAL कोड को इनपुट के रूप में लेता है और अनुक्रमिक C, छेनी, समानांतर C लक्ष्यीकरण एपिफेनी संरचना, ajava और astruct लक्ष्यीकरण Ambric संरचना, आदि सहित विभिन्न लक्ष्य विशिष्ट भाषाएँ उत्पन्न करता है।
* [[म्यूनिख के तकनीकी विश्वविद्यालय]] और [[डेनवर विश्वविद्यालय]] से DUP भाषा
* [[म्यूनिख के तकनीकी विश्वविद्यालय]] और [[डेनवर विश्वविद्यालय]] से 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>
* 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>
* RaftLib - ओपन सोर्स C++ स्ट्रीम प्रोसेसिंग टेम्प्लेट लाइब्रेरी मूल रूप से सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से
* RaftLib - ओपन सोर्स C++ स्ट्रीम प्रसंस्करण टेम्प्लेट लाइब्रेरी मूल रूप से सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से
* स्पार - रियो ग्रांडे डो सुल के परमधर्मपीठीय कैथोलिक विश्वविद्यालय में एप्लीकेशन मॉडलिंग ग्रुप (जीएमएपी) से धारा समानता व्यक्त करने के लिए सी++ डोमेन-विशिष्ट भाषा
* स्पार - रियो ग्रांडे डो सुल के परमधर्मपीठीय कैथोलिक विश्वविद्यालय में एप्लीकेशन मॉडलिंग ग्रुप (जीएमएपी) से धारा समानता व्यक्त करने के लिए सी++ डोमेन-विशिष्ट भाषा
* [[वाटरलू विश्वविद्यालय]] से [[लिब श]] पुस्तकालय
* [[वाटरलू विश्वविद्यालय]] से [[लिब श]] पुस्तकालय
Line 228: Line 215:
* [[हर्टफोर्डशायर विश्वविद्यालय]] से एस-नेट समन्वय भाषा, जो समन्वय और एल्गोरिथम प्रोग्रामिंग को अलग करती है
* [[हर्टफोर्डशायर विश्वविद्यालय]] से एस-नेट समन्वय भाषा, जो समन्वय और एल्गोरिथम प्रोग्रामिंग को अलग करती है
* एमआईटी से इसे स्ट्रीम करें
* एमआईटी से इसे स्ट्रीम करें
* [[WSO2]] से सिद्धि
* [[WSO2|डब्लूएसओ-2]] से सिद्धि
* वेवस्क्रिप्ट फंक्शनल स्ट्रीम प्रोसेसिंग, एमआईटी से भी।
* वेवस्क्रिप्ट फंक्शनल स्ट्रीम प्रसंस्करण, एमआईटी से भी।
* [[कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग]] को व्यापक अर्थों में स्ट्रीम प्रोसेसिंग माना जा सकता है।
* [[कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग]] को व्यापक अर्थों में स्ट्रीम प्रसंस्करण माना जा सकता है।
वाणिज्यिक कार्यान्वयन या तो सामान्य प्रयोजन के होते हैं या किसी विक्रेता द्वारा विशिष्ट हार्डवेयर से जुड़े होते हैं। सामान्य प्रयोजन भाषाओं के उदाहरणों में शामिल हैं:
वाणिज्यिक कार्यान्वयन या तो सामान्य प्रयोजन के होते हैं या किसी विक्रेता द्वारा विशिष्ट हार्डवेयर से जुड़े होते हैं। सामान्य प्रयोजन भाषाओं के उदाहरणों में सम्मिलित हैं:
* [[AccelerEyes]]' जैकेट, MATLAB के लिए एक GPU इंजन का व्यावसायीकरण
* [[AccelerEyes]]' जैकेट, MATLAB के लिए एक GPU इंजन का व्यावसायीकरण
* Ateji PX Java एक्सटेंशन जो स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और MapReduce एल्गोरिथम की एक सरल अभिव्यक्ति को सक्षम करता है
* Ateji PX Java एक्सटेंशन जो स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और MapReduce एल्गोरिथम की एक सरल अभिव्यक्ति को सक्षम करता है
Line 237: Line 224:
* फ्लडगेट, एक स्ट्रीम प्रोसेसर जो PlayStation 3, Xbox360, Wii और PC के लिए [[Gamebryo]] गेम इंजन के [[साथ]] प्रदान किया गया है
* फ्लडगेट, एक स्ट्रीम प्रोसेसर जो PlayStation 3, Xbox360, Wii और PC के लिए [[Gamebryo]] गेम इंजन के [[साथ]] प्रदान किया गया है
* [[ओपनएचएमपीपी]], मैनी-कोर प्रोग्रामिंग का एक डायरेक्टिव विजन
* [[ओपनएचएमपीपी]], मैनी-कोर प्रोग्रामिंग का एक डायरेक्टिव विजन
* पीकस्ट्रीम,<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> [[BrookGPU]] परियोजना का स्पिनआउट (जून 2007 में [[Google अधिग्रहण की सूची|गूगल अधिग्रहण की सूची]] द्वारा अधिग्रहित)
* IBM Spade - स्ट्रीम प्रोसेसिंग एप्लिकेशन डिक्लेरेटिव इंजन (B. Gedik, et al। SPADE: सिस्टम S डिक्लेरेटिव स्ट्रीम प्रोसेसिंग इंजन। ACM SIGMOD 2008।)
* IBM Spade - स्ट्रीम प्रसंस्करण एप्लिकेशन डिक्लेरेटिव इंजन (B. Gedik, et al। SPADE: सिस्टम S डिक्लेरेटिव स्ट्रीम प्रसंस्करण इंजन। ACM SIGMOD 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]] (कम्प्यूट यूनिफाइड डिवाइस आर्किटेक्चर)।
* एनवीडिया से [[CUDA]] (कम्प्यूट यूनिफाइड डिवाइस संरचना)।
* [[उच्च-थ्रूपुट कंप्यूटिंग]] के लिए [[इंटेल सीटी]] - सी
* [[उच्च-थ्रूपुट कंप्यूटिंग]] के लिए [[इंटेल सीटी]] - सी
* स्ट्रीम प्रोसेसर्स, इंक से स्ट्रीमसी, स्टैनफोर्ड में इमेजिन कार्य का व्यावसायीकरण
* स्ट्रीम प्रोसेसर्स, इंक से स्ट्रीमसी, स्टैनफोर्ड में इमेजिन कार्य का व्यावसायीकरण


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


Line 263: Line 250:
* [[ अपाचे फ्लैश ]]
* [[ अपाचे फ्लैश ]]
*वॉलमार्टलैब्स Mupd8<ref>{{Cite web|url=https://github.com/walmartlabs/mupd8|title=GitHub - walmartlabs/Mupd8: Muppet|website=[[GitHub]] }}</ref>
*वॉलमार्टलैब्स Mupd8<ref>{{Cite web|url=https://github.com/walmartlabs/mupd8|title=GitHub - walmartlabs/Mupd8: Muppet|website=[[GitHub]] }}</ref>
* एक्लिप्स स्ट्रीमशीट - स्ट्रीम प्रोसेसिंग के लिए स्प्रेडशीट
* एक्लिप्स स्ट्रीमशीट - स्ट्रीम प्रसंस्करण के लिए स्प्रेडशीट


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

Revision as of 21:10, 22 June 2023

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

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

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

अनुप्रयोग

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

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

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

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

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

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

कोड उदाहरण

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// 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 मैपिंग है लेकिन इसकी आवश्यकता नहीं है। प्रयुक्त गुठली भी अधिक जटिल हो सकती है।

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

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

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

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

अनुसंधान

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

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

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

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

अधिक आधुनिक स्ट्रीम प्रसंस्करण फ्रेमवर्क डेटा को शाब्दिक स्ट्रीम के रूप में संरचित करने के लिए FIFO जैसा इंटरफ़ेस प्रदान करते हैं। यह अमूर्तता रनटाइम/हार्डवेयर को कुशल गणना के लिए उस ज्ञान का पूरा लाभ उठाने में सक्षम करते हुए डेटा निर्भरता को स्पष्ट रूप से निर्दिष्ट करने का एक साधन प्रदान करती है। C++ के लिए अब तक के सबसे सरल[citation needed] और सबसे कुशल[citation needed] स्ट्रीम प्रसंस्करण तौर-तरीकों में से एक, RaftLib है, जो 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;
}

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

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

सामान्य प्रोसेसर संरचना

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

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

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

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

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

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

स्ट्रीम प्रोसेसर का अधिकांश (90%) काम ऑन-चिप किया जाता है, जिसके लिए मेमोरी में संग्रहीत करने के लिए वैश्विक डेटा का केवल 1% आवश्यक होता है। यह वह जगह है जहाँ कर्नेल अस्थायी और निर्भरता को जानना भुगतान करता है।

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

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

उन एएलयू को डेटा के साथ लाने के लिए, प्रत्येक एएलयू स्थानीय रजिस्टर फाइलों (एलआरएफ) से लैस है, जो मूल रूप से इसके हैंप्रयोग करने योग्य रजिस्टर।

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

हार्डवेयर-इन-द-लूप मुद्दे

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

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

उदाहरण

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

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

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

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

  • Ateji PX फ्री एडिशन, JVM पर स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और MapReduce एल्गोरिथम की एक सरल अभिव्यक्ति को सक्षम करता है
  • ऑटो-पाइप, सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से, स्ट्रीमिंग अनुप्रयोगों के लिए एक एप्लिकेशन विकास वातावरण जो विषम प्रणालियों (सीपीयू, जीपीजीपीयू, एफपीजीए) के लिए अनुप्रयोगों को लिखने की स्वीकृति देता है। सीपीयू के लिए एप्लिकेशन को C, C++ और Java के किसी भी संयोजन में विकसित किया जा सकता है। एफपीजीए के लिए वेरिलॉग या वीएचडीएल। क्यूडा का उपयोग वर्तमान में एनवीडिया जीपीजीपीयू के लिए किया जाता है। ऑटो-पाइप कई मशीनों के बीच टीसीपी कनेक्शन के समन्वय को भी संभालता है।
  • ACOTES प्रोग्रामिंग मॉडल: OpenMP पर आधारित कैटेलोनिया के कैटेलोनिया के पॉलिटेक्निक विश्वविद्यालय
  • बीपबीप, यूक्यूएसी में फॉर्मल कंप्यूटर साइंस लैब से एक सरल और हल्का जावा-आधारित इवेंट स्ट्रीम प्रसंस्करण लाइब्रेरी।
  • स्टैनफोर्ड से ब्रुक भाषा
  • सीएएल अभिनेता भाषा: राइटिंग (डेटाफ्लो) एक्टर्स के लिए एक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, जो स्टेटफुल ऑपरेटर्स हैं जो डेटा वस्तु्स (टोकन) की इनपुट स्ट्रीम को आउटपुट स्ट्रीम में बदल देते हैं।
  • Cal2Many एक कोड जनरेशन फ्रेमवर्क Halmstad University, स्वीडन से। यह CAL कोड को इनपुट के रूप में लेता है और अनुक्रमिक C, छेनी, समानांतर C लक्ष्यीकरण एपिफेनी संरचना, ajava और astruct लक्ष्यीकरण Ambric संरचना, आदि सहित विभिन्न लक्ष्य विशिष्ट भाषाएँ उत्पन्न करता है।
  • म्यूनिख के तकनीकी विश्वविद्यालय और डेनवर विश्वविद्यालय से DUP भाषा
  • HSTREAM: विषम धारा कंप्यूटिंग के लिए एक निर्देश-आधारित भाषा विस्तार[12]
  • RaftLib - ओपन सोर्स C++ स्ट्रीम प्रसंस्करण टेम्प्लेट लाइब्रेरी मूल रूप से सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से
  • स्पार - रियो ग्रांडे डो सुल के परमधर्मपीठीय कैथोलिक विश्वविद्यालय में एप्लीकेशन मॉडलिंग ग्रुप (जीएमएपी) से धारा समानता व्यक्त करने के लिए सी++ डोमेन-विशिष्ट भाषा
  • वाटरलू विश्वविद्यालय से लिब श पुस्तकालय
  • शालोज़, एक ओपन सोर्स प्रोजेक्ट
  • हर्टफोर्डशायर विश्वविद्यालय से एस-नेट समन्वय भाषा, जो समन्वय और एल्गोरिथम प्रोग्रामिंग को अलग करती है
  • एमआईटी से इसे स्ट्रीम करें
  • डब्लूएसओ-2 से सिद्धि
  • वेवस्क्रिप्ट फंक्शनल स्ट्रीम प्रसंस्करण, एमआईटी से भी।
  • कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग को व्यापक अर्थों में स्ट्रीम प्रसंस्करण माना जा सकता है।

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

  • AccelerEyes' जैकेट, MATLAB के लिए एक GPU इंजन का व्यावसायीकरण
  • Ateji PX Java एक्सटेंशन जो स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और MapReduce एल्गोरिथम की एक सरल अभिव्यक्ति को सक्षम करता है
  • Embiot, Telchemy का एक हल्का एम्बेडेड स्ट्रीमिंग एनालिटिक्स एजेंट
  • फ्लडगेट, एक स्ट्रीम प्रोसेसर जो PlayStation 3, Xbox360, Wii और PC के लिए Gamebryo गेम इंजन के साथ प्रदान किया गया है
  • ओपनएचएमपीपी, मैनी-कोर प्रोग्रामिंग का एक डायरेक्टिव विजन
  • पीकस्ट्रीम,[13] BrookGPU परियोजना का स्पिनआउट (जून 2007 में गूगल अधिग्रहण की सूची द्वारा अधिग्रहित)
  • IBM Spade - स्ट्रीम प्रसंस्करण एप्लिकेशन डिक्लेरेटिव इंजन (B. Gedik, et al। SPADE: सिस्टम S डिक्लेरेटिव स्ट्रीम प्रसंस्करण इंजन। ACM SIGMOD 2008।)
  • रैपिडमाइंड, लिब श का व्यावसायीकरण (अगस्त 2009 में इंटेल द्वारा अधिग्रहित)
  • टीस्ट्रीम,[14][15] हेवलेट-पैकार्ड कैम्ब्रिज रिसर्च लैब

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

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

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

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

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

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

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

यह भी देखें


संदर्भ

  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.