स्ट्रीम प्रसंस्करण

From Vigyanwiki

कंप्यूटर विज्ञान में स्ट्रीम प्रसंस्करण, जिसे संभावित स्ट्रीम प्रसंस्करण, डेटा स्ट्रीम प्रसंस्करण या वितरित स्ट्रीम प्रसंस्करण के रूप में भी जाना जाता है। यह एक प्रोग्रामिंग प्रतिमान है जो डेटा स्ट्रीम या समय में घटनाओं के अनुक्रम को गणना के केंद्रीय इनपुट और आउटपुट वस्तु के रूप में देखता है। स्ट्रीम प्रसंस्करण में डेटा प्रोग्रामिंग, प्रतिक्रियाशील प्रोग्रामिंग और वितरित डेटा प्रसंस्करण सम्मिलित है[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.