स्ट्रीम प्रसंस्करण
कंप्यूटर विज्ञान में, स्ट्रीम प्रोसेसिंग (इवेंट स्ट्रीम प्रोसेसिंग, आकड़ों का प्रवाह प्रोसेसिंग, या डिस्ट्रीब्यूटेड स्ट्रीम प्रोसेसिंग के रूप में भी जाना जाता है) एक प्रोग्रामिंग प्रतिमान है, जो गणना के केंद्रीय इनपुट और आउटपुट ऑब्जेक्ट के रूप में डेटा स्ट्रीम, या समय में घटनाओं के अनुक्रम को देखता है। स्ट्रीम प्रोसेसिंग में डेटाफ्लो प्रोग्रामिंग, प्रतिक्रियाशील प्रोग्रामिंग और वितरित अभिकलन डाटा प्रासेसिंग शामिल हैं।[1] स्ट्रीम प्रोसेसिंग सिस्टम का उद्देश्य डेटा स्ट्रीम के लिए समानांतर कंप्यूटिंग का पर्दाफाश करना और कुशल कार्यान्वयन के लिए स्ट्रीमिंग एल्गोरिदम पर भरोसा करना है। इन प्रणालियों के समाधान स्टैक में अभिकलन व्यक्त करने के लिए प्रोग्रामिंग मॉडल और क्वेरी भाषा जैसे घटक शामिल हैं; वितरण और शेड्यूलिंग (कंप्यूटिंग) के लिए डेटा स्ट्रीम प्रबंधन प्रणाली; और फ्लोटिंग-पॉइंट यूनिट, ग्राफ़िक्स प्रोसेसिंग युनिट और क्षेत्र में प्रोग्राम की जा सकने वाली द्वार श्रंखला सहित हार्डवेयर त्वरण के लिए हार्डवेयर घटक।[2] धारा प्रसंस्करण प्रतिमान प्रदर्शन किए जा सकने वाले समानांतर संगणना को प्रतिबंधित करके समानांतर सॉफ्टवेयर और हार्डवेयर को सरल बनाता है। डेटा के अनुक्रम (एक स्ट्रीम) को देखते हुए, ऑपरेशन की एक श्रृंखला (गणना कर्नेल) स्ट्रीम में प्रत्येक तत्व पर लागू होती है। कर्नेल फ़ंक्शंस आमतौर पर पाइपलाइन (कंप्यूटिंग) होते हैं, और बाहरी मेमोरी इंटरैक्शन से जुड़े बैंडविड्थ में नुकसान को कम करने के लिए इष्टतम स्थानीय ऑन-चिप मेमोरी पुन: उपयोग का प्रयास किया जाता है। यूनिफ़ॉर्म स्ट्रीमिंग, जहाँ स्ट्रीम में सभी तत्वों पर एक कर्नेल फ़ंक्शन लागू होता है, विशिष्ट है। चूंकि कर्नेल और स्ट्रीम एब्सट्रैक्शन डेटा निर्भरता को उजागर करते हैं, इसलिए कंपाइलर टूल ऑन-चिप प्रबंधन कार्यों को पूरी तरह से स्वचालित और अनुकूलित कर सकते हैं। स्ट्रीम प्रोसेसिंग हार्डवेयर स्कोरबोर्डिंग का उपयोग कर सकता है, उदाहरण के लिए, निर्भरता ज्ञात होने पर प्रत्यक्ष मेमोरी एक्सेस (डीएमए) आरंभ करने के लिए। मैनुअल डीएमए प्रबंधन के उन्मूलन से सॉफ्टवेयर जटिलता कम हो जाती है, और हार्डवेयर कैश्ड I/O के लिए एक संबद्ध उन्मूलन, डेटा क्षेत्र विस्तार को कम कर देता है जिसे अंकगणितीय तर्क इकाइयों जैसे विशेष कम्प्यूटेशनल इकाइयों द्वारा सेवा में शामिल किया जाना है।
1980 के दशक के दौरान डेटाफ्लो प्रोग्रामिंग के भीतर स्ट्रीम प्रोसेसिंग की खोज की गई थी। एक उदाहरण भाषा SISAL (धारा और एक एकल असाइनमेंट भाषा में पुनरावृत्ति) है।
अनुप्रयोग
स्ट्रीम प्रोसेसिंग अनिवार्य रूप से डेटा-केंद्रित मॉडल द्वारा संचालित एक समझौता है जो पारंपरिक डीएसपी या जीपीयू-प्रकार के अनुप्रयोगों (जैसे छवि, वीडियो और अंकीय संकेत प्रक्रिया ) के लिए बहुत अच्छी तरह से काम करता है, लेकिन अधिक यादृच्छिक डेटा एक्सेस के साथ सामान्य प्रयोजन प्रसंस्करण के लिए कम है ( जैसे डेटाबेस)। मॉडल में कुछ लचीलेपन का त्याग करके, निहितार्थ आसान, तेज और अधिक कुशल निष्पादन की अनुमति देते हैं। संदर्भ के आधार पर, सेंट्रल प्रोसेसिंग यूनिट डिजाइन को अधिकतम दक्षता या लचीलेपन के लिए ट्रेड-ऑफ के लिए ट्यून किया जा सकता है।
स्ट्रीम प्रोसेसिंग उन अनुप्रयोगों के लिए विशेष रूप से उपयुक्त है जो तीन अनुप्रयोग विशेषताओं को प्रदर्शित करते हैं:[citation needed]
- गणना तीव्रता, I/O या वैश्विक स्मृति संदर्भ प्रति अंकगणितीय संचालन की संख्या। आज कई सिग्नल प्रोसेसिंग अनुप्रयोगों में यह 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
पिछले समानांतर प्रतिमानों से तुलना
बेसिक कंप्यूटर एक अनुक्रमिक निष्पादन प्रतिमान से शुरू हुए। पारंपरिक सेंट्रल प्रोसेसिंग यूनिट एकल निर्देश, एकल डेटा आधारित हैं, जिसका अर्थ है कि वे अवधारणात्मक रूप से एक समय में केवल एक ही ऑपरेशन करते हैं। जैसे-जैसे दुनिया की कंप्यूटिंग ज़रूरतें विकसित हुईं, प्रबंधित किए जाने वाले डेटा की मात्रा बहुत तेज़ी से बढ़ी। यह स्पष्ट था कि अनुक्रमिक प्रोग्रामिंग मॉडल प्रसंस्करण शक्ति की बढ़ती आवश्यकता का सामना नहीं कर सका। भारी मात्रा में संगणना करने के लिए वैकल्पिक तरीके खोजने के लिए कई प्रयास किए गए हैं लेकिन एकमात्र समाधान समानांतर निष्पादन के कुछ स्तर का फायदा उठाना था। उन प्रयासों का परिणाम एकल निर्देश, एकाधिक डेटा, एक प्रोग्रामिंग प्रतिमान था जिसने एक निर्देश को (अलग) डेटा के कई उदाहरणों पर लागू करने की अनुमति दी थी। अधिकांश समय, SIMD का उपयोग SWAR वातावरण में किया जा रहा था। अधिक जटिल संरचनाओं का उपयोग करके, एकाधिक निर्देश, एकाधिक डेटा समांतरता भी हो सकती है।
यद्यपि वे दो प्रतिमान कुशल थे, वास्तविक दुनिया के कार्यान्वयन स्मृति संरेखण समस्याओं से लेकर तुल्यकालन के मुद्दों और सीमित समानता तक की सीमाओं से ग्रस्त थे। स्टैंड-अलोन घटकों के रूप में केवल कुछ SIMD प्रोसेसर बचे हैं; अधिकांश मानक सीपीयू में एम्बेडेड थे।
100 4-घटक वेक्टर (ज्यामितीय) (यानी कुल 400 नंबर) वाले दो सरणियों को जोड़ने वाले एक साधारण कार्यक्रम पर विचार करें।
पारंपरिक, अनुक्रमिक प्रतिमान
for (int i = 0; i < 400; i++)
result[i] = source0[i] + source1[i];
यह अनुक्रमिक प्रतिमान है जो सबसे अधिक परिचित है। भिन्नताएं मौजूद हैं (जैसे आंतरिक लूप, संरचनाएं और ऐसे), लेकिन अंततः वे उस निर्माण के लिए उबालते हैं।
समानांतर SIMD प्रतिमान, पैक्ड रजिस्टर (SWAR)
for (int el = 0; el < 100; el++) // for each vector
vector_sum(result[el], source0[el], source1[el]);
यह वास्तव में अतिसरलीकृत है। यह निर्देश मानता है vector_sum
काम करता है। यद्यपि आंतरिक कार्य के साथ ऐसा ही होता है, वास्तव में यहां बहुत अधिक जानकारी पर ध्यान नहीं दिया जाता है जैसे वेक्टर घटकों की संख्या और उनके डेटा प्रारूप। यह स्पष्टता के लिए किया जाता है।
हालाँकि, आप देख सकते हैं कि यह विधि डिकोड किए गए निर्देशों की संख्या को numElements * ComponentsPerElement से numElements तक कम कर देती है। कूदने के निर्देशों की संख्या भी कम हो जाती है, क्योंकि लूप कम बार चलता है। ये लाभ चार गणितीय संक्रियाओं के समानांतर निष्पादन से उत्पन्न होते हैं।
हालांकि क्या हुआ है कि पैक किए गए SIMD रजिस्टर में एक निश्चित मात्रा में डेटा होता है, इसलिए अधिक समानता प्राप्त करना संभव नहीं है। गति कुछ हद तक उस धारणा से सीमित है जिसे हमने चार समानांतर संचालन करने के लिए बनाया है (कृपया ध्यान दें कि यह AltiVec और स्ट्रीमिंग SIMD एक्सटेंशन दोनों के लिए सामान्य है)।
समानांतर धारा प्रतिमान (SIMD/MIMD)
// This is a fictional language for demonstration purposes.
elements = array streamElement([number, number])[100]
kernel = instance streamKernel("@arg0[@iter]")
result = kernel.invoke(elements)
इस प्रतिमान में, प्रत्येक घटक ब्लॉक को अलग से परिभाषित करने के बजाय, पूरे डेटासेट को परिभाषित किया गया है। डेटा के सेट का वर्णन पहली दो पंक्तियों में माना जाता है। उसके बाद, परिणाम स्रोतों और कर्नेल से अनुमान लगाया जाता है। सरलता के लिए, इनपुट और आउटपुट डेटा के बीच 1:1 मैपिंग होती है, लेकिन ऐसा होना ज़रूरी नहीं है। एप्लाइड कर्नेल भी अधिक जटिल हो सकते हैं।
इस प्रतिमान का कार्यान्वयन आंतरिक रूप से लूप को अनलॉक कर सकता है। यह थ्रूपुट को चिप जटिलता के साथ स्केल करने की अनुमति देता है, आसानी से सैकड़ों एएलयू का उपयोग करता है।[3][4] जटिल डेटा पैटर्न का उन्मूलन इस अतिरिक्त शक्ति को उपलब्ध कराता है।
जबकि स्ट्रीम प्रोसेसिंग SIMD/MIMD प्रोसेसिंग की एक शाखा है, उन्हें भ्रमित नहीं होना चाहिए। यद्यपि SIMD कार्यान्वयन अक्सर स्ट्रीमिंग तरीके से काम कर सकता है, उनका प्रदर्शन तुलनीय नहीं है: मॉडल एक बहुत ही अलग उपयोग पैटर्न की कल्पना करता है जो अपने आप में कहीं अधिक प्रदर्शन की अनुमति देता है।
यह ध्यान दिया गया है कि मानक सीपीयू जैसे सामान्य प्रोसेसर पर लागू होने पर, केवल 1.5x स्पीडअप तक पहुंचा जा सकता है।[5] इसके विपरीत, एड-हॉक स्ट्रीम प्रोसेसर आसानी से 10 गुना से अधिक प्रदर्शन तक पहुँचते हैं, मुख्य रूप से अधिक कुशल मेमोरी एक्सेस और समानांतर प्रसंस्करण के उच्च स्तर के लिए जिम्मेदार हैं।[6] हालांकि मॉडल द्वारा अनुमत लचीलेपन की विभिन्न डिग्री हैं, स्ट्रीम प्रोसेसर आमतौर पर कर्नेल या स्ट्रीम आकार पर कुछ सीमाएं लगाते हैं। उदाहरण के लिए, उपभोक्ता हार्डवेयर में अक्सर उच्च-परिशुद्धता गणित करने की क्षमता का अभाव होता है, जटिल अप्रत्यक्ष श्रृंखलाओं का अभाव होता है या निर्देशों की संख्या पर कम सीमा प्रस्तुत करता है जिसे निष्पादित किया जा सकता है।
अनुसंधान
Template:Specific स्टैनफोर्ड विश्वविद्यालय स्ट्रीम प्रोसेसिंग प्रोजेक्ट्स में स्टैनफोर्ड रियल-टाइम प्रोग्रामेबल शेडिंग प्रोजेक्ट शामिल है जो 1999 में शुरू हुआ था।[7] इमेजिन नामक एक प्रोटोटाइप को 2002 में विकसित किया गया था।[8] मेरिमैक नामक एक परियोजना लगभग 2004 तक चलती रही।[9] एटी एंड टी ने स्ट्रीम-एन्हांस्ड प्रोसेसर पर भी शोध किया क्योंकि ग्राफिक्स प्रोसेसिंग इकाइयां गति और कार्यक्षमता दोनों में तेजी से विकसित हुईं।[1] इन शुरुआती दिनों से, दर्जनों स्ट्रीम प्रोसेसिंग भाषाएं विकसित की गई हैं, साथ ही विशेष हार्डवेयर भी।
प्रोग्रामिंग मॉडल नोट्स
समानांतर प्रसंस्करण के दायरे में सबसे तात्कालिक चुनौती उपयोग किए गए हार्डवेयर आर्किटेक्चर के प्रकार में नहीं है, लेकिन स्वीकार्य प्रदर्शन के साथ वास्तविक दुनिया के वातावरण में सिस्टम को प्रोग्राम करना कितना आसान होगा। इमेजिन जैसी मशीनें स्वचालित निर्भरता, मेमोरी आवंटन और डायरेक्ट मेमोरी एक्सेस शेड्यूलिंग के साथ सीधे सिंगल-थ्रेडेड मॉडल का उपयोग करती हैं। यह अपने आप में एमआईटी और स्टैनफोर्ड में प्रोग्रामर, टूल्स और हार्डवेयर के बीच कार्यों की इष्टतम परत खोजने के शोध का परिणाम है। प्रोग्रामर एल्गोरिदम को समानांतर हार्डवेयर में मैप करने में टूल को मात देते हैं, और टूल प्रोग्रामर को सबसे स्मार्ट मेमोरी एलोकेशन स्कीम आदि का पता लगाने में मात देते हैं। विशेष रूप से चिंता का विषय MIMD डिज़ाइन हैं जैसे सेल (माइक्रोप्रोसेसर), जिसके लिए प्रोग्रामर को कई कोर में एप्लिकेशन विभाजन से निपटने की आवश्यकता होती है। और प्रक्रिया तुल्यकालन और लोड संतुलन से निपटें।
SIMD प्रोग्रामिंग की एक खामी संरचना-की-सरणी (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...
};
जब इन संरचनाओं में से कई स्मृति में मौजूद होते हैं तो उन्हें संरचनाओं (एओएस) टोपोलॉजी की एक सरणी में एक ऐरे डेटा संरचना बनाने के अंत में रखा जाता है। इसका मतलब यह है कि प्रत्येक कण के स्थान पर कुछ एल्गोरिदम लागू किया जाना चाहिए, बदले में इसे अन्य विशेषताओं वाले स्मृति स्थानों पर छोड़ देना चाहिए। यदि इन विशेषताओं की आवश्यकता नहीं है, तो इसका परिणाम CPU कैश के व्यर्थ उपयोग में होता है। इसके अतिरिक्त, एक SIMD निर्देश आमतौर पर उस डेटा की अपेक्षा करेगा जिस पर यह स्मृति में संगत होगा, तत्वों को डेटा संरचना संरेखण की भी आवश्यकता हो सकती है। डेटा के मेमोरी स्थान को संरचना से बाहर ले जाकर स्ट्रीम में कुशल पहुंच के लिए और एक को संचालित करने के लिए SIMD निर्देशों के लिए डेटा को बेहतर ढंग से व्यवस्थित किया जा सकता है। सरणियों की संरचना (SOA), जैसा कि नीचे दिखाया गया है, इसकी अनुमति दे सकती है।
struct particle_t {
float *x, *y, *z;
unsigned byte *colorRed, *colorBlue, *colorGreen;
float *size;
};
संरचना में डेटा रखने के बजाय, यह डेटा के लिए केवल पॉइंटर्स (मेमोरी लोकेशन) रखता है। कमियां यह हैं कि यदि किसी वस्तु की एक से अधिक विशेषताओं को संचालित किया जाना है, तो वे अब स्मृति में दूर हो सकती हैं और इसलिए कैश मिस हो सकती हैं। संरेखण और किसी भी आवश्यक पैडिंग से मेमोरी उपयोग में वृद्धि होती है। कुल मिलाकर, स्मृति प्रबंधन अधिक जटिल हो सकता है यदि संरचनाओं को उदाहरण के लिए जोड़ा और हटाया जाता है।
स्ट्रीम प्रोसेसर के लिए, संरचनाओं के उपयोग को प्रोत्साहित किया जाता है। अनुप्रयोग के दृष्टिकोण से, सभी विशेषताओं को कुछ लचीलेपन के साथ परिभाषित किया जा सकता है। जीपीयू को संदर्भ के रूप में लेते हुए, विशेषताओं का एक सेट (कम से कम 16) उपलब्ध है। प्रत्येक विशेषता के लिए, एप्लिकेशन घटकों की संख्या और घटकों के प्रारूप को बता सकता है (लेकिन अभी के लिए केवल आदिम डेटा प्रकार समर्थित हैं)। विभिन्न विशेषताओं को तब एक मेमोरी ब्लॉक से जोड़ा जाता है, संभवतः समान विशेषताओं के 'लगातार' तत्वों के बीच एक स्ट्राइड को परिभाषित करता है, प्रभावी रूप से इंटरलीव्ड डेटा की अनुमति देता है। जब जीपीयू स्ट्रीम प्रोसेसिंग शुरू करता है, तो यह पैरामीटर के एक सेट में सभी विभिन्न विशेषताओं को इकट्ठा करेगा (आमतौर पर यह संरचना या जादू वैश्विक चर जैसा दिखता है), संचालन करता है और बाद में प्रसंस्करण के लिए कुछ स्मृति क्षेत्र में परिणाम स्कैटर करता है ( या पुनः प्राप्त करना)।
अधिक आधुनिक स्ट्रीम प्रोसेसिंग फ्रेमवर्क डेटा को लिटरल स्ट्रीम के रूप में संरचित करने के लिए एक FIFO जैसा इंटरफ़ेस प्रदान करते हैं। यह अमूर्त इसका पूर्ण लाभ लेने के लिए रनटाइम/हार्डवेयर को सक्षम करते हुए निहित रूप से डेटा निर्भरताओं को निर्दिष्ट करने का एक साधन प्रदान करता है कुशल गणना के लिए ज्ञान। सबसे सरल में से एक[citation needed] और सबसे कुशल[citation needed] C++ के लिए आज तक की स्ट्रीम प्रोसेसिंग पद्धतियां, 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 सेगमेंट) का उपयोग करते हैं, जबकि हाई-एंड मॉडल थोड़ी धीमी क्रॉसबार के साथ भारी मात्रा में मेमोरी (वास्तव में 512 एमबी तक) तैनात करते हैं जो 256 बिट चौड़ा है। इसके विपरीत, Intel Pentium से कुछ Athlon 64 के मानक प्रोसेसर में केवल एक 64-बिट चौड़ा डेटा बस है।
मेमोरी एक्सेस पैटर्न बहुत अधिक अनुमानित हैं। जबकि सरणियाँ मौजूद हैं, उनका आयाम कर्नेल मंगलाचरण पर तय किया गया है। वह चीज जो एक से अधिक पॉइंटर इंडिकेशन से सबसे अधिक मेल खाती है, एक इंडिकेशन चेन है, जो कि एक विशिष्ट मेमोरी एरिया (एक स्ट्रीम के अंदर) से अंत में पढ़ने या लिखने की गारंटी है।
स्ट्रीम प्रोसेसर की निष्पादन इकाइयों (ALUs क्लस्टर) की SIMD प्रकृति के कारण, पढ़ने/लिखने के संचालन के थोक में होने की उम्मीद है, इसलिए मेमोरी को कम विलंबता के बजाय उच्च बैंडविड्थ के लिए अनुकूलित किया जाता है (यह Rambus और DDR SDRAM से भिन्न है, उदाहरण)। यह कुशल मेमोरी बस वार्ताओं के लिए भी अनुमति देता है।
स्ट्रीम प्रोसेसर का अधिकांश (90%) काम ऑन-चिप किया जाता है, जिसके लिए मेमोरी में संग्रहीत करने के लिए वैश्विक डेटा का केवल 1% आवश्यक होता है। यह वह जगह है जहाँ कर्नेल अस्थायी और निर्भरता को जानना भुगतान करता है।
आंतरिक रूप से, एक स्ट्रीम प्रोसेसर में कुछ चतुर संचार और प्रबंधन सर्किट होते हैं लेकिन दिलचस्प बात यह है कि स्ट्रीम रजिस्टर फ़ाइल (SRF) है। यह वैचारिक रूप से एक बड़ा कैश है जिसमें स्ट्रीम डेटा को बल्क में बाहरी मेमोरी में स्थानांतरित करने के लिए संग्रहीत किया जाता है। विभिन्न अंकगणितीय तर्क इकाई के लिए कैश-जैसी सॉफ़्टवेयर-नियंत्रित संरचना के रूप में, SRF को सभी विभिन्न ALU समूहों के बीच साझा किया जाता है। स्टैनफोर्ड की इमेजिन चिप के साथ यहां की गई प्रमुख अवधारणा और नवाचार यह है कि संकलक प्रोग्रामर के लिए पूरी तरह से पारदर्शी तरीके से मेमोरी को स्वचालित और आबंटित करने में सक्षम है। कर्नेल फ़ंक्शंस और डेटा के बीच निर्भरता को प्रोग्रामिंग मॉडल के माध्यम से जाना जाता है जो कंपाइलर को प्रवाह विश्लेषण करने और एसआरएफ को इष्टतम रूप से पैक करने में सक्षम बनाता है। आम तौर पर, यह कैश और डीएमए प्रबंधन किसी प्रोजेक्ट के शेड्यूल का अधिकांश हिस्सा ले सकता है, कुछ स्ट्रीम प्रोसेसर (या कम से कम कल्पना) पूरी तरह से स्वचालित हो जाता है। स्टैनफोर्ड में किए गए परीक्षणों से पता चला है कि कंपाइलर ने शेड्यूलिंग मेमोरी में उतना ही अच्छा या बेहतर काम किया है जितना कि आपने बहुत प्रयास से किया है।
सबूत है; बहुत सारे क्लस्टर हो सकते हैं क्योंकि अंतर-क्लस्टर संचार दुर्लभ माना जाता है। आंतरिक रूप से हालांकि, प्रत्येक क्लस्टर एएलयू की बहुत कम मात्रा का कुशलतापूर्वक दोहन कर सकता है क्योंकि इंट्रा-क्लस्टर संचार सामान्य है और इस प्रकार अत्यधिक कुशल होने की आवश्यकता है।
उन एएलयू को डेटा के साथ लाने के लिए, प्रत्येक एएलयू स्थानीय रजिस्टर फाइलों (एलआरएफ) से लैस है, जो मूल रूप से इसके हैंप्रयोग करने योग्य रजिस्टर।
यह त्रि-स्तरीय डेटा एक्सेस पैटर्न, अस्थायी डेटा को धीमी यादों से दूर रखना आसान बनाता है, इस प्रकार सिलिकॉन कार्यान्वयन को अत्यधिक कुशल और बिजली की बचत करता है।
हार्डवेयर-इन-द-लूप मुद्दे
This section may be confusing or unclear to readers. (January 2008) (Learn how and when to remove this template message) |
यद्यपि परिमाण स्पीडअप के क्रम की यथोचित अपेक्षा की जा सकती है (स्ट्रीमिंग तरीके से कंप्यूटिंग करते समय मुख्यधारा के जीपीयू से भी), सभी एप्लिकेशन इससे लाभान्वित नहीं होते हैं। संचार विलंबता वास्तव में सबसे बड़ी समस्या है। हालांकि पीसीआई एक्सप्रेस ने फुल-डुप्लेक्स संचार के साथ इसमें सुधार किया है, काम करने के लिए एक जीपीयू (और संभवतः एक सामान्य स्ट्रीम प्रोसेसर) प्राप्त करने में संभवतः काफी समय लगेगा। इसका मतलब यह है कि आमतौर पर छोटे डेटासेट के लिए उनका उपयोग करना प्रति-उत्पादक होता है। क्योंकि कर्नेल को बदलना एक महंगा ऑपरेशन है, स्ट्रीम आर्किटेक्चर भी छोटी धाराओं के लिए दंड लगाता है, एक व्यवहार जिसे शॉर्ट स्ट्रीम इफेक्ट कहा जाता है।
निर्देश पाइपलाइन स्ट्रीम प्रोसेसर पर एक बहुत व्यापक और अत्यधिक उपयोग की जाने वाली प्रथा है, जिसमें जीपीयू 200 चरणों से अधिक पाइपलाइनों की विशेषता है। सेटिंग बदलने की लागत सेटिंग के संशोधित होने पर निर्भर करती है लेकिन अब इसे हमेशा महंगा माना जाता है। पाइपलाइन के विभिन्न स्तरों पर उन समस्याओं से बचने के लिए, कई तकनीकों को तैनात किया गया है जैसे कि उबर शेडर्स और टेक्सचर एटलस। जीपीयू की प्रकृति के कारण वे तकनीकें गेम-ओरिएंटेड हैं, लेकिन अवधारणाएं सामान्य स्ट्रीम प्रोसेसिंग के लिए भी दिलचस्प हैं।
उदाहरण
- कमोडोर अमिगा में चमक एक प्रारंभिक (लगभग 1985) ग्राफिक्स प्रोसेसर है जो 16 घटक बिट वैक्टर के तीन स्रोत धाराओं को 256 तरीकों से संयोजित करने में सक्षम है, जिसमें 16 घटक बिट वैक्टर से युक्त आउटपुट स्ट्रीम का उत्पादन होता है। कुल इनपुट स्ट्रीम बैंडविड्थ 42 मिलियन बिट प्रति सेकंड तक है। आउटपुट स्ट्रीम बैंडविड्थ 28 मिलियन बिट प्रति सेकंड तक है।
- कल्पना करना,[10] स्टैनफोर्ड यूनिवर्सिटी के प्रोफेसर बिल डेली की अध्यक्षता में, एक लचीला आर्किटेक्चर है जो तेज और ऊर्जा कुशल दोनों होने का इरादा रखता है। परियोजना, मूल रूप से 1996 में कल्पना की गई थी, जिसमें वास्तुकला, सॉफ्टवेयर उपकरण, एक वीएलएसआई कार्यान्वयन और एक विकास बोर्ड शामिल था, जिसे डीएआरपीए, इंटेल और टेक्सस उपकरण ्स द्वारा वित्त पोषित किया गया था।
- एक और स्टैनफोर्ड परियोजना, जिसे मेरिमैक कहा जाता है,[11] इसका उद्देश्य स्ट्रीम-आधारित सुपरकंप्यूटर विकसित करना है। Merrimac एक ही तकनीक से निर्मित क्लस्टर-आधारित वैज्ञानिक कंप्यूटरों की तुलना में प्रति यूनिट लागत अधिक प्रदर्शन प्रदान करने के लिए एक स्ट्रीम आर्किटेक्चर और उन्नत इंटरकनेक्शन नेटवर्क का उपयोग करने का इरादा रखता है।
- स्टैनफोर्ड के इमेजिन प्रोजेक्ट के वाणिज्यिक स्पिन-ऑफ, स्ट्रीम प्रोसेसर्स, इंक से स्टॉर्म-1 परिवार की घोषणा आईएसएससीसी 2007 में एक फीचर प्रस्तुति के दौरान की गई थी। परिवार में 30 जीओपीएस से लेकर 220 16-बिट जीओपीएस तक के चार सदस्य हैं। संचालन प्रति सेकंड), सभी को TSMC में 130 नैनोमीटर प्रक्रिया में बनाया गया है। डिवाइस वीडियो कॉन्फ्रेंसिंग, मल्टीफ़ंक्शन प्रिंटर और डिजिटल वीडियो निगरानी उपकरण सहित डिजिटल सिग्नल प्रोसेसर बाजार के उच्च अंत को लक्षित करते हैं।
- जीपीयू व्यापक, उपभोक्ता-ग्रेड स्ट्रीम प्रोसेसर हैं[2] मुख्य रूप से एएमडी और एNVIDIA द्वारा डिजाइन किया गया। धारा प्रसंस्करण के दृष्टिकोण से विभिन्न पीढ़ियों पर ध्यान दिया जाना चाहिए:
- Pre-R2xx/NV2x: स्ट्रीम प्रोसेसिंग के लिए कोई स्पष्ट समर्थन नहीं। कर्नेल संचालन API में छिपे हुए थे और सामान्य उपयोग के लिए बहुत कम लचीलापन प्रदान करते थे।
- R2xx/NV2x: कर्नेल स्ट्रीम ऑपरेशन प्रोग्रामर के नियंत्रण में स्पष्ट रूप से बन गए लेकिन केवल वर्टेक्स प्रोसेसिंग के लिए (टुकड़े अभी भी पुराने प्रतिमानों का उपयोग कर रहे थे)। कोई ब्रांचिंग समर्थन गंभीर रूप से लचीलेपन में बाधा नहीं डालता है, लेकिन कुछ प्रकार के एल्गोरिदम चलाए जा सकते हैं (विशेष रूप से, कम-परिशुद्धता द्रव सिमुलेशन)।
- R3xx/NV4x: लचीला ब्रांचिंग समर्थन हालांकि निष्पादित किए जाने वाले संचालन की संख्या और सख्त रिकर्सन गहराई, साथ ही सरणी हेरफेर पर कुछ सीमाएं अभी भी मौजूद हैं।
- R8xx: बफ़र्स और परमाणु संचालन को जोड़ने / उपभोग करने का समर्थन करता है। यह पीढ़ी कला की स्थिति है।
- एचपीसी को लक्षित उत्पाद लाइन के लिए एएमडी फायरस्ट्रीम ब्रांड नाम
- एचपीसी को लक्षित करने वाली उत्पाद श्रृंखला के लिए एनवीडिया टेस्ला ब्रांड नाम
- एसटीआई का सेल प्रोसेसर, सोनी कंप्यूटर एंटरटेनमेंट, तोशिबा निगम और आईबीएम का गठबंधन, एक हार्डवेयर आर्किटेक्चर है जो उचित सॉफ्टवेयर सपोर्ट के साथ स्ट्रीम प्रोसेसर की तरह काम कर सकता है। इसमें एक कंट्रोलिंग प्रोसेसर, पीपीई (पावर प्रोसेसिंग एलिमेंट, एक आईबीएम पावरपीसी) और SIMD कोप्रोसेसरों का एक सेट होता है, जिसे SPEs (सिनर्जिस्टिक प्रोसेसिंग एलिमेंट्स) कहा जाता है, प्रत्येक में स्वतंत्र प्रोग्राम काउंटर और इंस्ट्रक्शन मेमोरी होती है, वास्तव में एक मल्टीपल इंस्ट्रक्शन, मल्टीपल डेटा मशीन। देशी प्रोग्रामिंग मॉडल में सभी डीएमए और प्रोग्राम शेड्यूलिंग को प्रोग्रामर पर छोड़ दिया जाता है। हार्डवेयर स्थानीय संचार के लिए प्रोसेसरों के बीच एक तेज़ रिंग बस प्रदान करता है। क्योंकि निर्देशों और डेटा के लिए स्थानीय मेमोरी सीमित है, केवल ऐसे प्रोग्राम जो इस आर्किटेक्चर का प्रभावी ढंग से दोहन कर सकते हैं या तो एक छोटे से मेमोरी फ़ुटप्रिंट की आवश्यकता होती है या स्ट्रीम प्रोग्रामिंग मॉडल का पालन करते हैं। एक उपयुक्त एल्गोरिथ्म के साथ सेल का प्रदर्शन शुद्ध स्ट्रीम प्रोसेसर के प्रतिद्वंद्वी हो सकता है, हालांकि इसके लिए लगभग हमेशा एल्गोरिदम और सॉफ्टवेयर के पूर्ण पुनर्रचना की आवश्यकता होती है।
स्ट्रीम प्रोग्रामिंग लाइब्रेरी और भाषाएँ
स्ट्रीम प्रोसेसर के लिए अधिकांश प्रोग्रामिंग लैंग्वेज जावा, सी या सी ++ से शुरू होती हैं और एक्सटेंशन जोड़ती हैं जो एप्लिकेशन डेवलपर्स को कर्नेल और/या स्ट्रीम को टैग करने की अनुमति देने के लिए विशिष्ट निर्देश प्रदान करती हैं। यह अधिकांश छायांकन भाषाओं पर भी लागू होता है, जिन्हें कुछ हद तक धारा प्रोग्रामिंग भाषा माना जा सकता है।
स्ट्रीम प्रोग्रामिंग भाषाओं के गैर-व्यावसायिक उदाहरणों में शामिल हैं:
- Ateji PX फ्री एडिशन, JVM पर स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और MapReduce एल्गोरिथम की एक सरल अभिव्यक्ति को सक्षम करता है
- ऑटो-पाइप, सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से, स्ट्रीमिंग अनुप्रयोगों के लिए एक अनुप्रयोग विकास वातावरण जो विषम प्रणालियों (सीपीयू, जीपीजीपीयू, एफपीजीए) के लिए अनुप्रयोगों के संलेखन की अनुमति देता है। CPU के लिए C, C++ और Java के किसी भी संयोजन में एप्लिकेशन विकसित किए जा सकते हैं। FPGAs के लिए Verilog या VHDL। कुडा वर्तमान में एनवीडिया जीपीजीपीयू के लिए उपयोग किया जाता है। ऑटो-पाइप कई मशीनों के बीच टीसीपी कनेक्शन के समन्वय को भी संभालता है।
- ACOTES प्रोग्रामिंग मॉडल: OpenMP पर आधारित कैटेलोनिया के कैटेलोनिया के पॉलिटेक्निक विश्वविद्यालय
- बीपबीप, यूक्यूएसी में फॉर्मल कंप्यूटर साइंस लैब से एक सरल और हल्का जावा-आधारित इवेंट स्ट्रीम प्रोसेसिंग लाइब्रेरी।
- स्टैनफोर्ड से ब्रुक भाषा
- सीएएल अभिनेता भाषा: राइटिंग (डेटाफ्लो) एक्टर्स के लिए एक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, जो स्टेटफुल ऑपरेटर्स हैं जो डेटा ऑब्जेक्ट्स (टोकन) की इनपुट स्ट्रीम को आउटपुट स्ट्रीम में बदल देते हैं।
- Cal2Many एक कोड जनरेशन फ्रेमवर्क Halmstad University, स्वीडन से। यह CAL कोड को इनपुट के रूप में लेता है और अनुक्रमिक C, छेनी, समानांतर C लक्ष्यीकरण एपिफेनी आर्किटेक्चर, ajava और astruct लक्ष्यीकरण Ambric आर्किटेक्चर, आदि सहित विभिन्न लक्ष्य विशिष्ट भाषाएँ उत्पन्न करता है।
- म्यूनिख के तकनीकी विश्वविद्यालय और डेनवर विश्वविद्यालय से DUP भाषा
- HSTREAM: विषम धारा कंप्यूटिंग के लिए एक निर्देश-आधारित भाषा विस्तार[12]
- RaftLib - ओपन सोर्स C++ स्ट्रीम प्रोसेसिंग टेम्प्लेट लाइब्रेरी मूल रूप से सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से
- स्पार - रियो ग्रांडे डो सुल के परमधर्मपीठीय कैथोलिक विश्वविद्यालय में एप्लीकेशन मॉडलिंग ग्रुप (जीएमएपी) से धारा समानता व्यक्त करने के लिए सी++ डोमेन-विशिष्ट भाषा
- वाटरलू विश्वविद्यालय से लिब श पुस्तकालय
- शालोज़, एक ओपन सोर्स प्रोजेक्ट
- हर्टफोर्डशायर विश्वविद्यालय से एस-नेट समन्वय भाषा, जो समन्वय और एल्गोरिथम प्रोग्रामिंग को अलग करती है
- एमआईटी से इसे स्ट्रीम करें
- WSO2 से सिद्धि
- वेवस्क्रिप्ट फंक्शनल स्ट्रीम प्रोसेसिंग, एमआईटी से भी।
- कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग को व्यापक अर्थों में स्ट्रीम प्रोसेसिंग माना जा सकता है।
वाणिज्यिक कार्यान्वयन या तो सामान्य प्रयोजन के होते हैं या किसी विक्रेता द्वारा विशिष्ट हार्डवेयर से जुड़े होते हैं। सामान्य प्रयोजन भाषाओं के उदाहरणों में शामिल हैं:
- AccelerEyes' जैकेट, MATLAB के लिए एक GPU इंजन का व्यावसायीकरण
- Ateji PX Java एक्सटेंशन जो स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और MapReduce एल्गोरिथम की एक सरल अभिव्यक्ति को सक्षम करता है
- Embiot, Telchemy का एक हल्का एम्बेडेड स्ट्रीमिंग एनालिटिक्स एजेंट
- फ्लडगेट, एक स्ट्रीम प्रोसेसर जो PlayStation 3, Xbox360, Wii और PC के लिए Gamebryo गेम इंजन के साथ प्रदान किया गया है
- ओपनएचएमपीपी, मैनी-कोर प्रोग्रामिंग का एक डायरेक्टिव विजन
- पीकस्ट्रीम,[13] BrookGPU परियोजना का स्पिनआउट (जून 2007 में Google अधिग्रहण की सूची द्वारा अधिग्रहित)
- IBM Spade - स्ट्रीम प्रोसेसिंग एप्लिकेशन डिक्लेरेटिव इंजन (B. Gedik, et al। SPADE: सिस्टम S डिक्लेरेटिव स्ट्रीम प्रोसेसिंग इंजन। ACM SIGMOD 2008।)
- रैपिडमाइंड, लिब श का व्यावसायीकरण (अगस्त 2009 में इंटेल द्वारा अधिग्रहित)
- टीस्ट्रीम,[14][15] हेवलेट-पैकार्ड कैम्ब्रिज रिसर्च लैब
विक्रेता-विशिष्ट भाषाओं में शामिल हैं:
- एएमडी/एटीआई व्हाट टेक्नोलॉजीज ब्रुक+ (ब्रुकजीपीयू का एएमडी हार्डवेयर अनुकूलित कार्यान्वयन)।
- एनवीडिया से CUDA (कम्प्यूट यूनिफाइड डिवाइस आर्किटेक्चर)।
- उच्च-थ्रूपुट कंप्यूटिंग के लिए इंटेल सीटी - सी
- स्ट्रीम प्रोसेसर्स, इंक से स्ट्रीमसी, स्टैनफोर्ड में इमेजिन कार्य का व्यावसायीकरण
घटना-आधारित प्रसंस्करण
- अपामा (सॉफ्टवेयर) - सॉफ्टवेयर इंक द्वारा एक संयुक्त जटिल घटना प्रसंस्करण और स्ट्रीम प्रोसेसिंग इंजन
- वालारू
- WSO2 द्वारा WSO2 स्ट्रीम प्रोसेसर
- अपाचे NiFi
बैच फ़ाइल-आधारित प्रसंस्करण (कुछ वास्तविक स्ट्रीम प्रसंस्करण का अनुकरण करता है, लेकिन सामान्य रूप से बहुत कम प्रदर्शन[clarification needed][citation needed])
निरंतर ऑपरेटर स्ट्रीम प्रसंस्करण[clarification needed] }
- अपाचे फ्लैश
- वॉलमार्टलैब्स Mupd8[16]
- एक्लिप्स स्ट्रीमशीट - स्ट्रीम प्रोसेसिंग के लिए स्प्रेडशीट
स्ट्रीम प्रोसेसिंग सेवाएं:
- अमेज़ॅन वेब सर्विसेज - किनेसिस
- Google मेघ - डेटा प्रवाह
- Microsoft Azure - स्ट्रीम एनालिटिक्स
- डेटास्ट्रीम - डेटा स्ट्रीमिंग एनालिटिक्स प्लेटफॉर्म
- आईबीएम धाराएँ
- आईबीएम स्ट्रीमिंग एनालिटिक्स
- इवेंटडोर SQLStreamBuilder
यह भी देखें
संदर्भ
- ↑ A SHORT INTRO TO STREAM PROCESSING
- ↑ FCUDA: Enabling Efficient Compilation of CUDA Kernels onto FPGAs
- ↑ IEEE Journal of Solid-State Circuits:"A Programmable 512 GOPS Stream Processor for Signal, Image, and Video Processing", Stanford University and Stream Processors, Inc.
- ↑ Khailany, Dally, Rixner, Kapasi, Owens and Towles: "Exploring VLSI Scalability of Stream Processors", Stanford and Rice University.
- ↑ Gummaraju and Rosenblum, "Stream processing in General-Purpose Processors", Stanford University.
- ↑ Kapasi, Dally, Rixner, Khailany, Owens, Ahn and Mattson, "Programmable Stream Processors", Universities of Stanford, Rice, California (Davis) and Reservoir Labs.
- ↑ Eric Chan. "स्टैनफोर्ड रियल-टाइम प्रोग्रामेबल शेडिंग प्रोजेक्ट". Research group web site. Retrieved March 9, 2017.
- ↑ "इमेजिन - इमेज और सिग्नल प्रोसेसर". Group web site. Retrieved March 9, 2017.
- ↑ "मेरिमैक - स्टैनफोर्ड स्ट्रीमिंग सुपरकंप्यूटर प्रोजेक्ट". Group web site. Archived from the original on December 18, 2013. Retrieved March 9, 2017.
- ↑ Imagine
- ↑ Merrimac
- ↑ 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.
- ↑ PeakStream unveils multicore and CPU/GPU programming solution
- ↑ TStreams: A Model of Parallel Computation (Technical report).
- ↑ TStreams: How to Write a Parallel Program (Technical report).
- ↑ "GitHub - walmartlabs/Mupd8: Muppet". GitHub.