स्ट्रीम प्रसंस्करण: Difference between revisions
No edit summary |
No edit summary |
||
Line 76: | Line 76: | ||
इस प्रतिमान में प्रत्येक घटक ब्लॉक को अलग से परिभाषित करने के अतिरिक्त संपूर्ण डेटा समुच्चय को परिभाषित किया गया है। डेटा के समुच्चय का वर्णन पहली दो पंक्तियों में किया जाना माना जाता है। उसके बाद, स्रोतों और कर्नेल से परिणाम का अनुमान लगाया जाता है। सरलता के लिए इनपुट और आउटपुट डेटा के बीच 1:1 समानता है लेकिन इसकी आवश्यकता नहीं है। प्रयुक्त संख्या भी अधिक जटिल हो सकती है। | इस प्रतिमान में प्रत्येक घटक ब्लॉक को अलग से परिभाषित करने के अतिरिक्त संपूर्ण डेटा समुच्चय को परिभाषित किया गया है। डेटा के समुच्चय का वर्णन पहली दो पंक्तियों में किया जाना माना जाता है। उसके बाद, स्रोतों और कर्नेल से परिणाम का अनुमान लगाया जाता है। सरलता के लिए इनपुट और आउटपुट डेटा के बीच 1:1 समानता है लेकिन इसकी आवश्यकता नहीं है। प्रयुक्त संख्या भी अधिक जटिल हो सकती है। | ||
इस प्रतिमान का कार्यान्वयन आंतरिक रूप से एक लूप को विवृत कर सकता है। यह चिप जटिलता के साथ थ्रूपुट को स्केल करने की स्वीकृति देती है। यह आसानी से सैकड़ों एएलयू का उपयोग करता है।<ref>IEEE Journal of Solid-State Circuits:[http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4443192 "A Programmable 512 GOPS Stream Processor for Signal, Image, and Video Processing"], Stanford University and Stream Processors, Inc.</ref><ref>Khailany, Dally, Rixner, Kapasi, Owens and Towles: [http://cva.stanford.edu/publications/2003/khailany_im_scalability.pdf "Exploring VLSI Scalability of Stream Processors"], Stanford and Rice University.</ref> जटिल | इस प्रतिमान का कार्यान्वयन आंतरिक रूप से एक लूप को विवृत कर सकता है। यह चिप जटिलता के साथ थ्रूपुट को स्केल करने की स्वीकृति देती है। यह आसानी से सैकड़ों एएलयू का उपयोग करता है।<ref>IEEE Journal of Solid-State Circuits:[http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4443192 "A Programmable 512 GOPS Stream Processor for Signal, Image, and Video Processing"], Stanford University and Stream Processors, Inc.</ref><ref>Khailany, Dally, Rixner, Kapasi, Owens and Towles: [http://cva.stanford.edu/publications/2003/khailany_im_scalability.pdf "Exploring VLSI Scalability of Stream Processors"], Stanford and Rice University.</ref> जटिल डेटा पैटर्न का उन्मूलन इस अतिरिक्त क्षमता को उपलब्ध कराता है। | ||
जबकि स्ट्रीम प्रसंस्करण एसआईएमडी/एमआईएमडी प्रसंस्करण की एक शाखा है, उन्हें भ्रमित नहीं होना चाहिए। हालाँकि एसआईएमडी कार्यान्वयन | जबकि स्ट्रीम प्रसंस्करण एसआईएमडी/एमआईएमडी प्रसंस्करण की एक शाखा है, उन्हें भ्रमित नहीं होना चाहिए। हालाँकि एसआईएमडी कार्यान्वयन प्रायः "स्ट्रीमिंग" प्रकार से कार्य कर सकता है। उनका प्रदर्शन तुलनीय नहीं है। मॉडल एक बहुत ही अलग उपयोग पैटर्न की कल्पना करता है जो अपने आप में कहीं अधिक प्रदर्शन की स्वीकृति देता है। | ||
यह | यह देखा गया है कि जब मानक सीपीयू जैसे सामान्य प्रोसेसर पर प्रयुक्त किया जाता है, तो केवल 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 में प्रारम्भ किया गया स्टैनफोर्ड | [[ स्टैनफोर्ड विश्वविद्यालय |स्टैनफोर्ड विश्वविद्यालय]] स्ट्रीम प्रसंस्करण परियोजनाओं में 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> एटी और टी ने स्ट्रीम-एन्हांस्ड प्रोसेसर पर भी शोध किया था क्योंकि ग्राफिक्स प्रसंस्करण इकाइयां गति और कार्यक्षमता दोनों में तीव्रता से विकसित हुईं है। इन प्रारम्भिक दिनों से दर्जनों स्ट्रीम प्रसंस्करण भाषाओं के साथ-साथ विशेष हार्डवेयर भी विकसित किए गए हैं। | ||
=== प्रोग्रामिंग मॉडल नोट्स === | === प्रोग्रामिंग मॉडल नोट्स === | ||
समानांतर प्रसंस्करण के क्षेत्र में सबसे तात्कालिक चुनौती उपयोग किए गए हार्डवेयर संरचना के प्रकार में नहीं है, लेकिन वास्तविक | समानांतर प्रसंस्करण के क्षेत्र में सबसे तात्कालिक चुनौती उपयोग किए गए हार्डवेयर संरचना के प्रकार में नहीं है, लेकिन वास्तविक समाज के वातावरण में स्वीकार्य प्रदर्शन के साथ सिस्टम को प्रोग्राम करना कितना आसान होगा। जैसी मशीनें स्वचालित निर्भरता, मेमोरी आवंटन और डीएमए शेड्यूलिंग के साथ एक सीधे एकल-थ्रेडेड मॉडल का उपयोग करती हैं। यह अपने आप में प्रोग्रामर, टूल और हार्डवेयर के बीच कार्यों की इष्टतम परत खोजने में एमआईटी और स्टैनफोर्ड के शोध का परिणाम है। प्रोग्रामर एल्गोरिदम को समानांतर हार्डवेयर में मैप करने में टूल को मात देते हैं और टूल सबसे स्मार्ट मेमोरी आवंटन योजनाओं आदि का पता लगाने में प्रोग्रामर को मात देते हैं। विशेष रूप से चिंता का विषय सेल जैसे एमआईएमडी डिजाइन हैं, जिसके लिए प्रोग्रामर को कई कोर में एप्लिकेशन विभाजन से निपटने और प्रक्रिया समकालिक से निपटने की आवश्यकता होती है। एसआईएमडी प्रोग्रामिंग का एक दोष ऐरे-ऑफ़-स्ट्रक्चर्स (एओएस) और स्ट्रक्चर-ऑफ़-ऐरेज़ (एसओए) का परिणाम था। प्रोग्रामर प्रायः मेमोरी में इकाइयों का प्रतिनिधित्व करते हैं। उदाहरण के लिए 3डी स्पेस में एक कण का स्थान, गेंद का रंग और उसका आकार नीचे दिया गया है:<syntaxhighlight lang="c"> | ||
एसआईएमडी प्रोग्रामिंग का एक दोष ऐरे-ऑफ़-स्ट्रक्चर्स ( | |||
<syntaxhighlight lang="c"> | |||
// A particle in a three-dimensional space. | // A particle in a three-dimensional space. | ||
struct particle_t { | struct particle_t { | ||
Line 101: | Line 98: | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
जब इनमें से कई संरचनाएं मेमोरी में सम्मिलित होती हैं तो उन्हें संरचनाओं की एक सरणी (एओएस) टोपोलॉजी में एक सरणी बनाते हुए अंत तक रखा जाता है। इसका | जब इनमें से कई संरचनाएं मेमोरी में सम्मिलित होती हैं तो उन्हें संरचनाओं की एक सरणी (एओएस) टोपोलॉजी में एक सरणी बनाते हुए अंत तक रखा जाता है। इसका अर्थ यह है कि प्रत्येक कण के स्थान पर कुछ एल्गोरिदम प्रयुक्त किया जाना चाहिए, जिसके रूप मे इसे अन्य विशेषताओं वाले मेमोरी स्थानों को छोड़ देना चाहिए। यदि इन विशेषताओं की आवश्यकता नहीं है तो इसके परिणामस्वरूप सीपीयू कैश का व्यर्थ उपयोग होता है। इसके अतिरिक्त, एक एसआईएमडी निर्देश सामान्यतः यह उम्मीद करेगा कि वह जिस डेटा पर कार्य करेगा वह मेमोरी में निरंतर रहेगा, तत्वों को संरेखित करने की भी आवश्यकता हो सकती है। डेटा की मेमोरी एड्रेस को संरचना से बाहर ले जाकर स्ट्रीम में कुशल अभिगम्य के लिए और एसआईएमडी निर्देशों को संचालित करने के लिए डेटा को अपेक्षाकृत रूप से व्यवस्थित किया जा सकता है। सरणियों की संरचना (एसओए), जैसा कि नीचे दिखाया गया है, इसकी स्वीकृति दे सकती है। | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
struct particle_t { | struct particle_t { | ||
Line 109: | Line 106: | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
डेटा को संरचना में रखने के | डेटा को संरचना में रखने के अतिरिक्त यह डेटा के लिए केवल पॉइंटर्स (मेमोरी एड्रेस) रखता है। दोष यह हैं कि यदि किसी वस्तु की एकाधिक विशेषताओं को संचालित किया जाना है तो वे अब मेमोरी में दूर हो सकते हैं और परिणामस्वरूप कैश मिस हो सकता है। संरेखण और किसी भी आवश्यक पैडिंग से मेमोरी उपयोग में वृद्धि होती है। सामान्यतः यदि उदाहरण के लिए संरचनाओं को जोड़ा और हटाया जाता है, तो मेमोरी प्रबंधन अधिक जटिल हो सकता है। | ||
स्ट्रीम | स्ट्रीम प्रसंस्करण के लिए, संरचनाओं के उपयोग को प्रोत्साहित किया जाता है। अनुप्रयोग के दृष्टिकोण से सभी विशेषताओं को कुछ नम्यता के साथ परिभाषित किया जा सकता है। जीपीयू को संदर्भ के रूप में लेते हुए, विशेषताओं का एक समुच्चय (कम से कम 16) उपलब्ध है। प्रत्येक विशेषता के लिए एप्लिकेशन घटकों की संख्या और घटकों के प्रारूप को बता सकता है लेकिन अभी केवल प्रारम्भिक डेटा प्रकार समर्थित हैं। फिर विभिन्न विशेषताओं को एक मेमोरी ब्लॉक से जोड़ा जाता है, जो संभवतः समान विशेषताओं के 'निरंतर' तत्वों के बीच एक प्रगति को परिभाषित करता है, प्रभावी रूप से इंटरलीव्ड (अंतरापत्रित) डेटा की स्वीकृति देता है। जब जीपीयू स्ट्रीम प्रसंस्करण प्रारम्भ करता है, तो यह पैरामीटर के एक समुच्चय में सभी विभिन्न विशेषताओं को एकत्र (सामान्यतः यह एक संरचना या "वैश्विक चर" जैसा दिखता है) संचालन करता है और बाद में प्रसंस्करण के लिए कुछ मेमोरी क्षेत्र में परिणाम को विस्तृत करता है या पुनः प्राप्त करता है। | ||
अत्यधिक आधुनिक स्ट्रीम प्रसंस्करण फ्रेमवर्क डेटा को शाब्दिक स्ट्रीम के रूप में संरचित करने के लिए फीफो जैसा इंटरफ़ेस प्रदान करते हैं। यह अमूर्तता रनटाइम/हार्डवेयर को कुशल गणना के लिए उस ज्ञान का पूरा लाभ प्राप्त करने में सक्षम करते हुए डेटा निर्भरता को स्पष्ट रूप से निर्दिष्ट करने का एक साधन प्रदान करती है। सी++ के लिए अब तक के सबसे सरल{{citation needed|date=December 2018}} और सबसे कुशल{{citation needed|date=December 2018}} स्ट्रीम प्रसंस्करण प्रकारों में से एक राफ्टलिब है, जो C++ स्ट्रीम ऑपरेटरों का उपयोग करके डेटा संचार आरेख के रूप में स्वतंत्र कंप्यूट कर्नेल को एक साथ जोड़ने में सक्षम बनाता है। | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
#include <raft> | #include <raft> | ||
Line 150: | Line 147: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === संचार प्रसंस्करण के लिए गणना मॉडल === | ||
उच्च-स्तरीय भाषाओं में स्ट्रीमिंग अनुप्रयोगों को निर्दिष्ट करने के अतिरिक्त, कम्प्यूटेशन के मॉडल ( | उच्च-स्तरीय भाषाओं में स्ट्रीमिंग अनुप्रयोगों को निर्दिष्ट करने के अतिरिक्त, कम्प्यूटेशन के मॉडल (एमओसीएस) का भी [[ डेटा प्रवाह |डेटा संचार]] मॉडल और प्रक्रिया-आधारित मॉडल के रूप में व्यापक रूप से उपयोग किया गया है। | ||
=== सामान्य प्रसंस्करण संरचना === | |||
ऐतिहासिक रूप से सीपीयू ने अपेक्षाकृत धीमी गति से बढ़ती बाहरी मेमोरी बैंडविड्थ की तुलना में निरंतर बढ़ते प्रदर्शन के कारण मेमोरी नियंत्रण इष्टतमीकरण के विभिन्न स्तरों को प्रयुक्त करना प्रारम्भ कर दिया है। जैसे-जैसे यह अंतर बढ़ता गया, बड़ी मात्रा में डाई क्षेत्र मेमोरी विलंबता को छिपाने के लिए समर्पित कर दिया गया है। चूँकि उन कुछ एएलयू के लिए जानकारी और ऑपकोड लाना कीमती है। अपेक्षाकृत बहुत कम डाई क्षेत्र वास्तविक गणितीय मशीनरी के लिए समर्पित है। सामान्यतः अनुमान के अनुसार इसे 10% से कम माना जाता है। | |||
स्ट्रीम | स्ट्रीम प्रसंस्करण पर एक समान संरचना सम्मिलित है लेकिन नए प्रोग्रामिंग मॉडल के लिए धन्यवाद, प्रबंधन के लिए समर्पित ट्रांजिस्टर की मात्रा वास्तव में अपेक्षाकृत बहुत कम है। | ||
संपूर्ण सिस्टम के दृष्टिकोण से स्ट्रीम प्रसंस्करण सामान्यतः नियंत्रित वातावरण में सम्मिलित होते हैं। जीपीयू ऐड-इन बोर्ड पर सम्मिलित होते हैं। ऐसा लगता है कि यह छवि पर भी प्रयुक्त होता है। सीपीयू सिस्टम संसाधनों को प्रबंधित करने एप्लिकेशन चलाने आदि का कार्य करते रहते हैं। | |||
स्ट्रीम | स्ट्रीम प्रसंस्करण सामान्यतः तीव्र, कुशल, स्वामित्व वाली मेमोरी से बना होता है। क्रॉसबार स्विच अब सामान्य हैं, अतीत में बहु-बसों को नियोजित किया गया है। मेमोरी लेन की शुद्ध मात्रा विणपन सीमा पर निर्भर है। जैसा कि यह लिखा गया है कि प्रवेश-स्तर के आसपास अभी भी 64-बिट विस्तृत इंटरकनेक्शन हैं। अधिकांश मध्य-श्रेणी के मॉडल तीव्र 128-बिट क्रॉसबार स्विच मैट्रिक्स (4 या 2 सेगमेंट) का उपयोग करते हैं, जबकि उच्च-अंत मॉडल 256 बिट चौड़े धीमे क्रॉसबार के साथ भारी मात्रा में मेमोरी (वास्तव में 512 एमबी तक) सक्रिय करते हैं। इसके विपरीत, इंटेल पेंटियम से लेकर कुछ एथलॉन 64 तक के मानक प्रोसेसर में केवल एक 64-बिट वाइड डेटा बस होती है। | ||
मेमोरी एक्सेस पैटर्न बहुत अधिक पूर्वानुमानित हैं। जबकि सरणियाँ सम्मिलित हैं, उनका आयाम कर्नेल आमंत्रण पर तय किया गया है। वह वस्तु जो एकाधिक सूचक संकेत से सबसे अधिक निकटता के अनुरूप होती है। वह अप्रत्यक्ष श्रृंखला है, जो अंततः एक विशिष्ट मेमोरी क्षेत्र (स्ट्रीम के अंदर) से पढ़ने या लिखने का दायित्व करती है। | |||
स्ट्रीम प्रसंस्करण की निष्पादन इकाइयों (एएलयू क्लस्टर) की एसआईएमडी प्रकृति के कारण पढ़ने/लिखने का संचालन एकत्रमें होने की उम्मीद है। इसलिए मेमोरी को कम विलंबता के अतिरिक्त उच्च बैंडविड्थ के लिए अनुकूलित किया जाता है। यह रैम्बस और डीडीआर एसडीआरएएम से एक अंतर है, क्योंकि यह कुशल मेमोरी बस वार्ता की स्वीकृति देता है। स्ट्रीम प्रसंस्करण का अधिकांश (90%) कार्य ऑन-चिप से किया जाता है, जिसके लिए मेमोरी में संग्रहीत करने के लिए वैश्विक डेटा का केवल 1% आवश्यक होता है। यह वह स्थान है जहाँ कर्नेल अस्थायी और निर्भरता को जानना भुगतान करता है। | |||
आंतरिक रूप से एक स्ट्रीम प्रसंस्करण में कुछ चतुर संचार और प्रबंधन परिपथ होते हैं लेकिन जो रुचि है वह स्ट्रीम रजिस्टर फ़ाइल (एसआरएफ) है। यह वैचारिक रूप से एक बड़ा कैश है जिसमें स्ट्रीम डेटा को बड़ी मात्रा में बाहरी मेमोरी में स्थानांतरित करने के लिए संग्रहीत किया जाता है। विभिन्न एएलयू के लिए कैश-जैसी सॉफ़्टवेयर-नियंत्रित संरचना के रूप में एसआरएफ को सभी विभिन्न एएलयू क्लस्टरों के बीच साझा किया जाता है। स्टैनफोर्ड की छवि चिप के साथ की गई मुख्य अवधारणा और नवीकरण यह है कि कंपाइलर प्रोग्रामर के लिए पूरी तरह से पारदर्शी तरीके से मेमोरी को स्वचालित और आवंटित करने में सक्षम है। कर्नेल फ़ंक्शंन और डेटा के बीच निर्भरता को प्रोग्रामिंग मॉडल के माध्यम से जाना जाता है जो कंपाइलर को संचार विश्लेषण करने और एसआरएफ को अपेक्षाकृत रूप से पैक करने में सक्षम बनाता है। सामान्यतः यह कैश और डीएमए प्रबंधन किसी परियोजना के अधिकांश शेड्यूल को ले सकता है। जिसे स्ट्रीम प्रसंस्करण (या कम से कम काल्पनिक) पूरी तरह से स्वचालित करता है। स्टैनफोर्ड में किए गए परीक्षणों से पता चला कि कंपाइलर ने मेमोरी को शेड्यूल करने में उतना ही अच्छा या बेहतर कार्य किया है जितना कि आपने बहुत प्रयास के साथ हाथ से ट्यून किया था। | |||
उन एएलयू को डेटा के साथ | प्रमाण यह है कि बहुत से क्लस्टर हो सकते हैं क्योंकि अंतर-क्लस्टर संचार दुर्लभ माना जाता है। आंतरिक रूप से हालांकि, प्रत्येक क्लस्टर एएलयू की बहुत कम मात्रा का कुशलतापूर्वक दोहन कर सकता है क्योंकि अन्तः क्लस्टर संचार सामान्य है और इस प्रकार अत्यधिक कुशल होने की आवश्यकता है। उन एएलयू को डेटा के साथ रखने के लिए प्रत्येक एएलयू स्थानीय रजिस्टर फ़ाइलों (एलआरएफ) से बना है, जो मूल रूप से इसके उपयोग योग्य रजिस्टर हैं। | ||
यह | यह तीन-स्तरीय डेटा एक्सेस पैटर्न, अस्थायी डेटा को धीमी मेमोरी से दूर रखना से आसान बनाता है। इस प्रकार सिलिकॉन कार्यान्वयन अत्यधिक कुशल और विद्युत की बचत करने वाला बन गया है। | ||
=== हार्डवेयर | === हार्डवेयर मे लूप समस्या === | ||
{{Confusing section|date=January 2008}} | {{Confusing section|date=January 2008}} यद्यपि स्ट्रीमिंग प्रकार से कंप्यूटिंग करते समय मुख्यधारा के जीपीयू से भी तीव्रता के क्रम की संभावना की जा सकती है, लेकिन सभी एप्लिकेशन इससे लाभान्वित नहीं होते हैं। संचार विलंब वास्तव में सबसे बड़ी समस्या है। हालाँकि [[पीसीआई एक्सप्रेस]] ने पूर्ण-डुप्लेक्स संचार के साथ इसमें सुधार किया है, लेकिन जीपीयू (और संभवतः एक सामान्य स्ट्रीम प्रसंस्करण) को कार्य करने में संभवतः लंबा समय लगेगा। इसका अर्थ यह है कि छोटे डेटा समुच्चय के लिए उनका उपयोग करना सामान्यतः प्रतिकूल है। क्योंकि कर्नेल को रूपांतरण एक कीमती संचार है, स्ट्रीम संरचना में छोटी स्ट्रीम के लिए जुर्माना भी लगता है। इस व्यवहार को लघु स्ट्रीम प्रभाव कहा जाता है।<!-- In a revision (as of 07:40, 8 January 2008) an user noted this was considered not relevant. Since those issues are slightly covered in the references, it seems they are. Most of the statements here can be inferred from the references while others are simply involved in using PCIe transactions (so referencing them here doesn't seem a wise idea) - keeping the tag anyway to gain more attention. --> | ||
यद्यपि | |||
स्ट्रीम | स्ट्रीम प्रसंस्करण पर पाइपलाइनिंग एक बहुत व्यापक और भारी उपयोग की जाने वाली प्रथा है, जिसमें जीपीयू में 200 चरणों से अधिक की पाइपलाइन होती है। सेटिंग्स परिवर्तन की लागत संशोधित की जा रही सेटिंग पर निर्भर करती है लेकिन अब इसे सदैव कीमती माना जाता है। पाइपलाइन के विभिन्न स्तरों पर उन समस्याओं से बचने के लिए "उबर शेडर्स" और "टेक्सचर एटलस" जैसी कई तकनीकों को प्रयुक्त किया गया है। वे तकनीकें जीपीयू की प्रकृति के कारण खेल-उन्मुख हैं, लेकिन अवधारणाएं सामान्य स्ट्रीम प्रसंस्करण के लिए भी रुचि रखती हैं। | ||
== उदाहरण == | == उदाहरण == | ||
* कमोडोर अमीगा में ब्लिटर एक प्रारंभिक (लगभग 1985) ग्राफिक्स प्रोसेसर है जो 16 घटक बिट | * कमोडोर अमीगा में ब्लिटर एक प्रारंभिक (लगभग 1985) ग्राफिक्स प्रोसेसर है जो 16 घटक बिट सदिशों से युक्त आउटपुट स्ट्रीम उत्पन्न करने के लिए 256 प्रकारों से 16 घटक बिट सदिश के तीन स्रोत स्ट्रीम को संयोजित करने में सक्षम है। कुल इनपुट स्ट्रीम बैंडविड्थ 42 मिलियन बिट प्रति सेकंड तक है। आउटपुट स्ट्रीम बैंडविड्थ 28 मिलियन बिट प्रति सेकंड तक है। | ||
* कल्पना कीजिए | * कल्पना कीजिए कि <ref>[http://cva.stanford.edu/projects/imagine/ Imagine]</ref> [[स्टैनफोर्ड]] विश्वविद्यालय के प्रोफेसर विलियम डेली की अध्यक्षता में एक नम्य वास्तुकला है जिसका उद्देश्य तीव्र और ऊर्जा कुशल दोनों है। मूल रूप से 1996 में कल्पना की गई इस परियोजना में वास्तुकला, सॉफ्टवेयर उपकरण, एक वीएलएसआई कार्यान्वयन और एक विकास बोर्ड सम्मिलित था, जिसे डीएआरपीए, [[इंटेल]] और [[ टेक्सस उपकरण |टेक्सस]] इंस्ट्रूमेंट्स द्वारा वित्त पोषित किया गया था। | ||
* स्टैनफोर्ड की एक अन्य परियोजना, जिसे मेरिमैक कहा जाता है,<ref>[http://merrimac.stanford.edu/ Merrimac]</ref> | * स्टैनफोर्ड की एक अन्य परियोजना, जिसे मेरिमैक कहा जाता है,<ref>[http://merrimac.stanford.edu/ Merrimac]</ref> जिसका उद्देश्य स्ट्रीम-आधारित सुपरकंप्यूटर विकसित करना है। मेरिमैक का उद्देश्य एक ही तकनीक से निर्मित क्लस्टर-आधारित वैज्ञानिक कंप्यूटरों की तुलना में प्रति इकाई लागत पर अधिक प्रदर्शन प्रदान करने के लिए स्ट्रीम संरचना और उन्नत अंतःसंबंध नेटवर्क का उपयोग करने का है। | ||
* स्टैनफोर्ड के | * स्टैनफोर्ड के काल्पनिक परियोजना के वाणिज्यिक स्पिन-ऑफ, स्ट्रीम प्रसंस्करण्स, इंक के स्टॉर्म -1 समूह की घोषणा [[आईएसएससीसी]] 2007 में एक विशेषता प्रस्तुति के समय की गई थी। समूह में 30 जीओपीएस से लेकर 220 16-बिट जीओपीएस (अरबों ऑपरेशन) तक के चार सदस्य सम्मिलित हैं। सभी को 130 नैनोमीटर प्रक्रिया में टीएसएमसी में निर्मित किया गया है। ये उपकरण [[वीडियो कॉन्फ्रेंसिंग]], [[ मल्टीफ़ंक्शन प्रिंटर |बहु फ़ंक्शन प्रिंटर]] और डिजिटल वीडियो संरक्षण उपकरण सहित डीएसपी विणपन के उच्च स्तर को लक्षित करते हैं। | ||
* [[जीपीयू]] व्यापक, उपभोक्ता-ग्रेड स्ट्रीम | * [[जीपीयू]] व्यापक, उपभोक्ता-ग्रेड स्ट्रीम प्रसंस्करण हैं।{{ref|GPUasSTREAM}} मुख्य रूप से [[एएमडी]] और [[ NVIDIA |एनवीआईडीआईए]] द्वारा डिजाइन किया गया है। धारा प्रसंस्करण के दृष्टिकोण से विभिन्न पीढ़ियों पर ध्यान दिया जाना चाहिए: | ||
** | ** R2xx/NV2x: स्ट्रीम प्रसंस्करण के लिए कई स्पष्ट समर्थन कर्नेल ऑपरेशन एपीआई में छिपे हुए थे और सामान्य उपयोग के लिए बहुत कम नम्यता प्रदान करते थे। | ||
** R2xx/NV2x: कर्नेल स्ट्रीम | ** R2xx/NV2x: कर्नेल स्ट्रीम संचालन स्पष्ट रूप से प्रोग्रामर के नियंत्रण में हो गया था लेकिन केवल लंबकोणीय प्रसंस्करण के लिए (अभी भी पुराने प्रतिमानों का उपयोग कर रहे थे) कोई शाखा समर्थन गंभीर रूप से नम्यता में बाधा नहीं डालता है, लेकिन कुछ प्रकार के एल्गोरिदम को विशेष रूप से कम-शुद्ध द्रव अनुरूपन मे चलाया जा सकता है। | ||
** R3xx/NV4x: | ** R3xx/NV4x: शाखा समर्थन हालांकि, निष्पादित किए जाने वाले संचालन की संख्या और जटिल प्रत्यावर्तन साथ ही सरणी स्थानांतरण पर कुछ सीमाएं अभी भी सम्मिलित हैं। | ||
** R8xx: बफ़र्स और परमाणु संचालन को जोड़ने | ** R8xx: बफ़र्स और परमाणु संचालन को जोड़ने या उपभोग करने का समर्थन करता है। यह पीढ़ी कला की स्थिति है।<!-- What does this mean? It means it's a TODO. Remember we should track functionalities here rather than performance improvements. --> | ||
* एचपीसी को लक्षित उत्पाद लाइन के लिए [[एएमडी फायरस्ट्रीम]] ब्रांड | * एचपीसी को लक्षित उत्पाद लाइन के लिए [[एएमडी फायरस्ट्रीम]] का ब्रांड नाम। | ||
* एचपीसी को लक्षित करने वाली उत्पाद श्रृंखला के लिए [[एनवीडिया टेस्ला]] ब्रांड | * एचपीसी को लक्षित करने वाली उत्पाद श्रृंखला के लिए [[एनवीडिया टेस्ला]] का ब्रांड नाम। | ||
* सोनी कंप्यूटर एंटरटेनमेंट, तोशिबा | * सोनी कंप्यूटर एंटरटेनमेंट, तोशिबा संगठन और आईबीएम के गठबंधन एसटीआई का सेल प्रोसेसर एक हार्डवेयर संरचना है जो उपयुक्त सॉफ्टवेयर समर्थन के साथ स्ट्रीम प्रसंस्करण की तरह कार्य कर सकती है। इसमें एक नियंत्रित प्रोसेसर, पीपीई (ऊर्जा प्रसंस्करण तत्व आईबीएम पावरपीसी) और एसआईएमडी कोप्रोसेसरों का एक समुच्चय होता है, जिन्हें एसपीई (सिनर्जिस्टिक प्रसंस्करण तत्व) कहा जाता है। प्रत्येक में स्वतंत्र प्रोग्राम गणना और निर्देश मेमोरी होती है, वास्तव में एक एमआईएमडी मशीन होती है। देशी प्रोग्रामिंग मॉडल में सभी डीएमए और प्रोग्राम शेड्यूलिंग को प्रोग्रामर पर छोड़ दिया जाता है। हार्डवेयर स्थानीय संचार के लिए प्रोसेसर के बीच एक तीव्र ध्वनि प्रदान करता है। क्योंकि निर्देशों और डेटा के लिए स्थानीय मेमोरी सीमित है, केवल वही प्रोग्राम जो इस संरचना का प्रभावी रूप से प्राप्त कर सकते हैं, उन्हें या तो छोटी मेमोरी फ़ुटप्रिंट की आवश्यकता होती है या स्ट्रीम प्रोग्रामिंग मॉडल का अनुसरण करना पड़ता है। एक उपयुक्त एल्गोरिदम के साथ सेल का प्रदर्शन शुद्ध स्ट्रीम प्रसंस्करण के साथ प्रतिस्पर्धा कर सकता है। हालांकि इसके लिए लगभग सदैव एल्गोरिदम और सॉफ्टवेयर के पूर्ण डिज़ाइन की आवश्यकता होती है। | ||
== स्ट्रीम प्रोग्रामिंग लाइब्रेरी और भाषाएँ == | == स्ट्रीम प्रोग्रामिंग लाइब्रेरी और भाषाएँ == | ||
स्ट्रीम | स्ट्रीम प्रसंस्करण के लिए अधिकांश प्रोग्रामिंग भाषाएं जावा, C या C++ से प्रारम्भ होती हैं और एक्सटेंशन जोड़ती हैं जो एप्लिकेशन विकासक को कर्नेल और स्ट्रीम को टैग करने की स्वीकृति देने के लिए विशिष्ट निर्देश प्रदान करती हैं। यह अधिकांश छायांकन भाषाओं पर भी प्रयुक्त होता है, जिन्हें कुछ स्थिति तक स्ट्रीम प्रोग्रामिंग भाषाएं माना जा सकता है। | ||
स्ट्रीम प्रोग्रामिंग भाषाओं के गैर-व्यावसायिक उदाहरणों में सम्मिलित हैं: | स्ट्रीम प्रोग्रामिंग भाषाओं के गैर-व्यावसायिक उदाहरणों में सम्मिलित हैं: | ||
* | * एटेजी पीएक्स मुक्त प्रसंस्करण, जेवीएम पर स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और मैपरेडस एल्गोरिदम की एक सरल अभिव्यक्ति को सक्षम बनाता है। | ||
* ऑटो-पाइप, सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से, स्ट्रीमिंग अनुप्रयोगों के लिए एक एप्लिकेशन विकास वातावरण जो विषम प्रणालियों (सीपीयू, जीपीजीपीयू, एफपीजीए) के लिए अनुप्रयोगों को लिखने की स्वीकृति देता है। सीपीयू के लिए एप्लिकेशन को C, C++ और Java के किसी भी संयोजन में विकसित किया जा सकता है। एफपीजीए के लिए वेरिलॉग या | * ऑटो-पाइप, सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से, स्ट्रीमिंग अनुप्रयोगों के लिए एक एप्लिकेशन विकास वातावरण जो विषम प्रणालियों (सीपीयू, जीपीजीपीयू, एफपीजीए) के लिए अनुप्रयोगों को लिखने की स्वीकृति देता है। सीपीयू के लिए एप्लिकेशन को C, C++ और Java के किसी भी संयोजन में विकसित किया जा सकता है। एफपीजीए के लिए वेरिलॉग या वीएचडीएल क्यूडा का उपयोग वर्तमान में एनवीडिया जीपीजीपीयू के लिए किया जाता है। ऑटो-पाइप कई मशीनों के बीच टीसीपी कनेक्शन के समन्वय को भी संभालता है। | ||
* | * एकोटेस प्रोग्रामिंग मॉडल: ओपनएमपी पर आधारित कैटेलोनिया के पॉलिटेक्निक विश्वविद्यालय की भाषा | ||
*बीपबीप, यूक्यूएसी में फॉर्मल कंप्यूटर साइंस लैब से एक सरल और हल्का जावा-आधारित इवेंट स्ट्रीम प्रसंस्करण लाइब्रेरी। | *बीपबीप, यूक्यूएसी में फॉर्मल कंप्यूटर साइंस लैब से एक सरल और हल्का जावा-आधारित इवेंट स्ट्रीम प्रसंस्करण लाइब्रेरी। | ||
* स्टैनफोर्ड से ब्रुक भाषा | * स्टैनफोर्ड से ब्रुक भाषा | ||
* [[सीएएल अभिनेता भाषा]]: राइटिंग (डेटाफ्लो) एक्टर्स के लिए एक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, जो स्टेटफुल | * [[सीएएल अभिनेता भाषा]]: राइटिंग (डेटाफ्लो) एक्टर्स के लिए एक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, जो स्टेटफुल ऑपरेटर हैं जो डेटा वस्तु् (टोकन) की इनपुट स्ट्रीम को आउटपुट स्ट्रीम में परिवर्तित कर देते हैं। | ||
* | * सीएएल-2 हैल्मस्टेड यूनिवर्सिटी, स्वीडन से एक कोड जनरेशन फ्रेमवर्क है। यह सीएएल कोड को इनपुट के रूप में लेता है और अनुक्रमिक C, छेनी, समानांतर C लक्ष्यीकरण एपिफेनी संरचना, अजवा और एस्ट्रक्ट लक्ष्यीकरण एम्ब्रिक संरचना आदि सहित विभिन्न लक्ष्य विशिष्ट भाषाएँ उत्पन्न करता है। | ||
* | * म्यूनिख के तकनीकी विश्वविद्यालय और डेनवर विश्वविद्यालय से डीयूपी भाषा | ||
* | * एचस्ट्रीम: विषम धारा कंप्यूटिंग के लिए एक निर्देश-आधारित भाषा विस्तार।<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> | ||
* | * राफ्टलिब - मुक्त स्रोत C++ स्ट्रीम प्रसंस्करण टेम्प्लेट लाइब्रेरी मूल रूप से सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग प्रयोगशाला। | ||
* | *एसपीएआर - रियो ग्रांडे डो सुल के पोंटिफ़िकल कैथोलिक विश्वविद्यालय में एप्लिकेशन मॉडलिंग ग्रुप (जीएमएपी) से धारा समानता को व्यक्त करने के लिए C++ डोमेन-विशिष्ट भाषा। | ||
* [[वाटरलू विश्वविद्यालय]] | * [[वाटरलू विश्वविद्यालय]] एसएच पुस्तकालय | ||
* शालोज़, | * शालोज़, मुक्त स्रोत योजना | ||
* [[हर्टफोर्डशायर विश्वविद्यालय]] से एस-नेट समन्वय भाषा, जो समन्वय और एल्गोरिथम प्रोग्रामिंग को अलग करती | * [[हर्टफोर्डशायर विश्वविद्यालय]] से एस-नेट समन्वय भाषा, जो समन्वय और एल्गोरिथम प्रोग्रामिंग को अलग करती है। | ||
* एमआईटी से इसे स्ट्रीम | * एमआईटी से इसे स्ट्रीम करें। | ||
* [[WSO2|डब्लूएसओ-2]] | * [[WSO2|डब्लूएसओ-2]] सिद्धि | ||
* वेवस्क्रिप्ट | * वेवस्क्रिप्ट कार्यात्मक स्ट्रीम प्रसंस्करण एमआईटी | ||
* [[कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग]] को व्यापक अर्थों में स्ट्रीम प्रसंस्करण माना जा सकता है। | * [[कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग]] को व्यापक अर्थों में स्ट्रीम प्रसंस्करण माना जा सकता है। | ||
वाणिज्यिक कार्यान्वयन या तो सामान्य प्रयोजन के होते हैं या किसी विक्रेता द्वारा विशिष्ट हार्डवेयर से संबद्ध होते हैं। सामान्य प्रयोजन भाषाओं के उदाहरणों में सम्मिलित हैं: | |||
* एक्सेलेरआइज़ जैकेट, मैटलैब के लिए जीपीयू इंजन का व्यावसायीकरण | * एक्सेलेरआइज़ जैकेट, मैटलैब के लिए जीपीयू इंजन का व्यावसायीकरण | ||
* एटेजी पीएक्स जावा एक्सटेंशन जो स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और मैपरेडस एल्गोरिदम की सरल अभिव्यक्ति को सक्षम बनाता है। | * एटेजी पीएक्स जावा एक्सटेंशन जो स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और मैपरेडस एल्गोरिदम की सरल अभिव्यक्ति को सक्षम बनाता है। | ||
*एम्बियोट, टेल्केमी का अंतः स्थापित स्ट्रीमिंग विश्लेषण अभिकर्ता है। | *एम्बियोट, टेल्केमी का अंतः स्थापित स्ट्रीमिंग विश्लेषण अभिकर्ता है। | ||
* फ्लडगेट, प्ले स्टेशन 3,एक्सबॉक्स-360, वाईआई और पीसी के लिए गेमब्रीओ गेम इंजन के साथ प्रदान किया गया एक स्ट्रीम | * फ्लडगेट, प्ले स्टेशन 3,एक्सबॉक्स-360, वाईआई और पीसी के लिए गेमब्रीओ गेम इंजन के साथ प्रदान किया गया एक स्ट्रीम प्रसंस्करण | ||
* [[ओपनएचएमपीपी]], मैनी-कोर प्रोग्रामिंग का एक निर्देशक विजन | * [[ओपनएचएमपीपी]], मैनी-कोर प्रोग्रामिंग का एक निर्देशक विजन | ||
* पीकस्ट्रीम,<ref>[https://arstechnica.com/news.ars/post/20060918-7763.html PeakStream unveils multicore and CPU/GPU programming solution<!-- Bot generated title -->]</ref> ब्रुक परियोजना का एक स्पिनआउट (जून 2007 में [[Google अधिग्रहण की सूची|गूगल]] द्वारा अधिग्रहीत) | * पीकस्ट्रीम,<ref>[https://arstechnica.com/news.ars/post/20060918-7763.html PeakStream unveils multicore and CPU/GPU programming solution<!-- Bot generated title -->]</ref> ब्रुक परियोजना का एक स्पिनआउट (जून 2007 में [[Google अधिग्रहण की सूची|गूगल]] द्वारा अधिग्रहीत) | ||
Line 233: | Line 225: | ||
* एनवीडिया से सीयूडीए (कम्प्यूट यूनिफाइड डिवाइससंरचना) | * एनवीडिया से सीयूडीए (कम्प्यूट यूनिफाइड डिवाइससंरचना) | ||
* [[उच्च-थ्रूपुट कंप्यूटिंग]] के लिए [[इंटेल सीटी]]- सी | * [[उच्च-थ्रूपुट कंप्यूटिंग]] के लिए [[इंटेल सीटी]]- सी | ||
* स्ट्रीम | * स्ट्रीम प्रसंस्करण, इंक से स्ट्रीमसी, स्टैनफोर्ड में काल्पनिक कार्य का व्यावसायीकरण | ||
घटना-आधारित प्रसंस्करण | घटना-आधारित प्रसंस्करण | ||
* [[अपामा (सॉफ्टवेयर)]] - [[ सॉफ्टवेयर इंक |सॉफ्टवेयर इंक]] द्वारा एक संयुक्त [[ जटिल घटना प्रसंस्करण |जटिल घटना प्रसंस्करण]] और [[स्ट्रीम प्रोसेसिंग|स्ट्रीम प्रसंस्करण]] इंजन | * [[अपामा (सॉफ्टवेयर)]] - [[ सॉफ्टवेयर इंक |सॉफ्टवेयर इंक]] द्वारा एक संयुक्त [[ जटिल घटना प्रसंस्करण |जटिल घटना प्रसंस्करण]] और [[स्ट्रीम प्रोसेसिंग|स्ट्रीम प्रसंस्करण]] इंजन | ||
* वल्लारू | * वल्लारू | ||
* डब्लूएसओ-2 द्वारा डब्लूएसओ-2 स्ट्रीम | * डब्लूएसओ-2 द्वारा डब्लूएसओ-2 स्ट्रीम प्रसंस्करण | ||
* [[अपाचे NiFi|अपाचे एनआईएफआई]] | * [[अपाचे NiFi|अपाचे एनआईएफआई]] | ||
Revision as of 15:48, 23 June 2023
कंप्यूटर विज्ञान में स्ट्रीम प्रसंस्करण, जिसे संभावित स्ट्रीम प्रसंस्करण, डेटा स्ट्रीम प्रसंस्करण या वितरित स्ट्रीम प्रसंस्करण के रूप में भी जाना जाता है। यह एक प्रोग्रामिंग प्रतिमान है जो डेटा स्ट्रीम या समय में घटनाओं के अनुक्रम को गणना के केंद्रीय इनपुट और आउटपुट के रूप में देखता है। स्ट्रीम प्रसंस्करण में डेटा प्रोग्रामिंग, डेटा संचार प्रोग्रामिंग और वितरित डेटा प्रसंस्करण सम्मिलित है[1] स्ट्रीम प्रसंस्करण सिस्टम का लक्ष्य डेटा स्ट्रीम के लिए समानांतर कंप्यूटिंग को विकसित करना और कुशल कार्यान्वयन के लिए संचार एल्गोरिदम पर विश्वास करना है। इन प्रणालियों के सॉफ़्टवेयर प्रक्रिया में वितरण और शेड्यूलिंग के लिए गणना स्ट्रीम प्रबंधन सिस्टम और फ्लोटिंग-पॉइंट इकाइयों, ग्राफ़िक्स प्रसंस्करण इकाइयों और स्थानीय-प्रोग्रामेबल गेट एरेज़ सहित त्वरण के लिए हार्डवेयर घटकों को व्यक्त करने के लिए प्रोग्रामिंग मॉडल और क्वेरी भाषा जैसे घटक सम्मिलित हैं।[2]
स्ट्रीम प्रसंस्करण प्रतिमान समानांतर गणना को प्रतिबंधित करके समानांतर सॉफ्टवेयर और हार्डवेयर को सरल बनाता है जिसे निष्पादित किया जा सकता है। डेटा के अनुक्रम (स्ट्रीम) को देखते हुए, स्ट्रीम में प्रत्येक तत्व पर संचालन की एक श्रृंखला (कर्नेल फ़ंक्शंस) प्रयुक्त की जाती है। कर्नेल फ़ंक्शंन को सामान्यतः पाइपलाइन (कंप्यूटिंग) किया जाता है, और बाहरी मेमोरी प्रभाव से संबद्ध बैंडविड्थ में ह्रास को कम करने के लिए इष्टतम स्थानीय ऑन-चिप मेमोरी पुन: उपयोग का प्रयास किया जाता है। यूनिफ़ॉर्म स्ट्रीमिंग, जहां स्ट्रीम में सभी तत्वों पर एक कर्नेल फ़ंक्शन प्रयुक्त होता है यह विशिष्ट है चूंकि कर्नेल और स्ट्रीम संक्षिप्त डेटा निर्भरता को विकसित करते हैं, कंपाइलर उपकरण ऑन-चिप प्रबंधन कार्यों को पूरी तरह से स्वचालित और अनुकूलित कर सकते हैं। स्ट्रीम प्रसंस्करण हार्डवेयर स्कोरबोर्डिंग का उपयोग कर सकता है। उदाहरण के लिए निर्भरता ज्ञात होने पर प्रत्यक्ष मेमोरी एक्सेस (डीएमए) प्रारम्भ करने के लिए मैन्युअल डीएमए प्रबंधन को समाप्त करने से सॉफ़्टवेयर जटिलता अपेक्षाकृत कम हो जाती है और हार्डवेयर कैश्ड इनपुट/आउटपुट के लिए संबद्ध उन्मूलन डेटा क्षेत्र के विस्तार को कम कर देता है। जिसे अंकगणितीय तर्क इकाइयों जैसे विशेष कम्प्यूटेशनल इकाइयों द्वारा सेवा में सम्मिलित किया जाना है।
1980 के दशक के समय डेटा संचार प्रोग्रामिंग के भीतर स्ट्रीम प्रसंस्करण की खोज की गई थी। एक उदाहरण भाषा एसआईएसएएल संचार और एकल समनुदेशन भाषा में पुनरावृत्ति है।
अनुप्रयोग
स्ट्रीम प्रसंस्करण अनिवार्य रूप से एक समझौता है, जो डेटा-केंद्रित मॉडल द्वारा संचालित होता है जो पारंपरिक डीएसपी या जीपीयू प्रकार के अनुप्रयोगों (जैसे छवि, वीडियो और डिजिटल संकेत प्रसंस्करण) के लिए बहुत अच्छी तरह से कार्य करता है, लेकिन अधिक यादृच्छिक डेटा नियंत्रण के साथ सामान्य प्रयोजन प्रसंस्करण जैसे डेटाबेस के लिए अपेक्षाकृत कम कार्य करता है। मॉडल में कुछ नम्यता का त्याग करके निहितार्थ आसान, तीव्र और अधिक कुशल निष्पादन की स्वीकृति देते हैं। संदर्भ के आधार पर प्रोसेसर डिज़ाइन को अधिकतम दक्षता, नम्यता या ट्रेड-ऑफ़ के लिए ट्यून किया जा सकता है।
स्ट्रीम प्रसंस्करण उन अनुप्रयोगों के लिए विशेष रूप से उपयुक्त है जो तीन अनुप्रयोग विशेषताओं को प्रदर्शित करते हैं:[citation needed]
- तीव्रता की गणना- प्रति इनपुट/आउटपुट या वैश्विक मेमोरी संदर्भ अंकगणितीय संचालन की संख्या को आज कई संकेत प्रसंस्करण अनुप्रयोगों में यह 50:1 से भी अधिक है और एल्गोरिथम जटिलता के साथ बढ़ रहा है।
- डेटा समानता - यदि इनपुट स्ट्रीम के सभी रिकॉर्ड पर एक ही फ़ंक्शन प्रयुक्त किया जाता है और पिछले रिकॉर्ड के परिणामों की प्रतीक्षा किए बिना कई रिकॉर्ड को एक साथ संसाधित किया जा सकता है, तो कर्नेल में डेटा समानता सम्मिलित होती है।
- डेटा स्थानीयता- यह एक विशिष्ट प्रकार की अस्थायी स्थानीयता है जो संकेत और मीडिया प्रसंस्करण अनुप्रयोगों में सामान्य है जहां डेटा एक बार तैयार किया जाता है, बाद में एप्लिकेशन में एक या दो बार पढ़ा जाता है और फिर कभी नहीं पढ़ा जाता है। कर्नेल के बीच पारित मध्यवर्ती स्ट्रीम और साथ ही कर्नेल फ़ंक्शंन के भीतर मध्यवर्ती डेटा स्ट्रीम प्रसंस्करण प्रोग्रामिंग मॉडल का उपयोग करके प्रत्यक्ष स्थानीयता को अधिकृत कर सकते हैं।
स्ट्रीम के भीतर रिकॉर्ड के उदाहरणों में सम्मिलित हैं:
- ग्राफ़िक्स में प्रत्येक रिकॉर्ड एक त्रिभुज के शीर्ष, सामान्य और रंग की जानकारी हो सकती है।
- छवि प्रसंस्करण में प्रत्येक रिकॉर्ड एक छवि से एक पिक्सेल हो सकता है।
- एक वीडियो एनकोडर में प्रत्येक रिकॉर्ड 256 पिक्सेल का हो सकता है जो डेटा का एक मैक्रोब्लॉक बनाता है।
- वायरलेस संकेत प्रसंस्करण में प्रत्येक रिकॉर्ड एंटीना से प्राप्त प्रतिरूप का अनुक्रम हो सकता है।
प्रत्येक रिकॉर्ड के लिए हम केवल इनपुट से पढ़ सकते हैं, उस पर संचालन कर सकते हैं और आउटपुट पर लिख सकते हैं। एकाधिक इनपुट और एकाधिक आउटपुट होने की स्वीकृति है, लेकिन कभी भी मेमोरी का एक भाग जो पठनीय और लिखने योग्य दोनों नहीं है।
कोड उदाहरण
उदाहरण के रूप मे निम्नलिखित कोड खंड घटना धाराओं के भीतर पैटर्न का पता लगाने का प्रदर्शन करते हैं। पहला एक सतत एसक्यूएल क्वेरी (एक क्वेरी जो टाइमस्टैम्प और विंडो अवधि के आधार पर आने वाले डेटा को सदैव के लिए संसाधित करती है) का उपयोग करके डेटा स्ट्रीम को संसाधित करने का एक उदाहरण है। यह कोड खंड दो डेटा स्ट्रीम के संबंध को दर्शाता है, एक स्टॉक अनुक्रम के लिए और दूसरा परिणामी स्टॉक ट्रेडों के लिए अनुक्रम दिए जाने के एक सेकंड के भीतर क्वेरी किसी ट्रेड द्वारा मिलान किए गए सभी अनुक्रम की एक स्ट्रीम आउटपुट करती है। इस स्थिति में अनुक्रम स्ट्रीम से टाइमस्टैम्प आउटपुट स्ट्रीम को टाइमस्टैम्प द्वारा क्रमबद्ध किया जाता है।
SELECT DataStream
Orders.TimeStamp, Orders.orderId, Orders.ticker,
Orders.amount, Trade.amount
FROM Orders
JOIN Trades OVER (RANGE INTERVAL '1' SECOND FOLLOWING)
ON Orders.orderId = Trades.orderId;
एक अन्य प्रतिदर्श कोड खंड बाहरी "घटनाओं" के संचार के बीच शादियों का पता लगाता है, जैसे कि चर्च की घंटियाँ बजना, टक्सीडो पहने एक आदमी की उपस्थिति या सुबह का सूट पहने हुए सफेद गाउन में एक महिला और हवा में उड़ते चावल, एक "जटिल" या "मिश्रित" घटना है जो व्यक्तिगत सरल घटनाओं से अनुमान लगाती है कि एक शादी हो रही है।
WHEN Person.Gender EQUALS "man" AND Person.Clothes EQUALS "tuxedo"
FOLLOWED-BY
Person.Clothes EQUALS "gown" AND
(Church_Bell OR Rice_Flying)
WITHIN 2 hours
ACTION Wedding
पिछले समानांतर प्रतिमानों से तुलना
आधारिक कंप्यूटरों का प्रारम्भिक अनुक्रमिक निष्पादन प्रतिमान से हुआ है। पारंपरिक सीपीयू एसआईएसडी आधारित होते हैं, जिसका अर्थ है कि वे वैचारिक रूप से एक समय में केवल एक ही ऑपरेशन करते हैं। जैसे-जैसे विश्व मे कंप्यूटिंग आवश्यकताएं विकसित हुईं, प्रबंधित किए जाने वाले डेटा की मात्रा बहुत तीव्रता से बढ़ी जिससे यह स्पष्ट था कि अनुक्रमिक प्रोग्रामिंग मॉडल प्रसंस्करण क्षमता की बढ़ती आवश्यकता का सामना नहीं कर सका। और अधिक मात्रा में गणना करने के लिए वैकल्पिक तरीके खोजने पर कई प्रयास किए गए हैं लेकिन एकमात्र समाधान समानांतर निष्पादन के कुछ स्तर का लाभ प्राप्त था। उन प्रयासों का परिणाम एसआईएमडी था, एक प्रोग्रामिंग प्रतिमान जो एक निर्देश को (अलग-अलग) डेटा के कई उदाहरणों पर प्रयुक्त करने की स्वीकृति देता था। अधिकांश समय एसआईएमडी का उपयोग एसडब्ल्यूएआर परिवेश में किया जा रहा था। अधिक जटिल संरचनाओं का उपयोग करके कोई भी एमआईएमडी समानता भी प्राप्त कर सकता है।
यद्यपि वे दो प्रतिमान कुशल थे, वास्तविक दुनिया के कार्यान्वयन मेमोरी संरेखण समस्याओं से लेकर समकालिक समस्याओ और सीमित समानता तक सीमाओं से ग्रस्त थे। स्वचलित घटकों के रूप में केवल कुछ एसआईएमडी प्रोसेसर ही बचे हैं। अधिकांश मानक सीपीयू में अंतः स्थापित थे।
100* 4-घटक सदिश (ज्यामितीय) अर्थात कुल 400 संख्या वाली दो तालिकाओ को जोड़ने वाले एक साधारण प्रोग्राम पर विचार करें।
पारंपरिक, अनुक्रमिक प्रतिमान
for (int i = 0; i < 400; i++)
result[i] = source0[i] + source1[i];
यह अनुक्रमिक प्रतिमान है जो सबसे अधिक परिचित है। इसमे अनेक विविधताएं सम्मिलित हैं जैसे कि आंतरिक लूप, संरचनाएं और इसी प्रकार लेकिन अंततः वे उस निर्माण तक सीमित हो जाती हैं।
समानांतर एसआईएमडी प्रतिमान, पैक्ड रजिस्टर (एसडब्ल्यूएआर)
for (int el = 0; el < 100; el++) // for each vector
vector_sum(result[el], source0[el], source1[el]);
यह वास्तव में अतिसरलीकृत है। यह मानता है कि निर्देश vector_sum
कार्य करता है। यद्यपि आंतरिक अनुदेश के साथ ऐसा ही होता है, वास्तव में यहां बहुत अधिक जानकारी पर ध्यान नहीं दिया जाता है जैसे सदिश घटकों की संख्या और उनके डेटा प्रारूप मे यह स्पष्टता के लिए किया जाता है।
हालाँकि, आप देख सकते हैं, यह विधि डिकोड किए गए निर्देशों की संख्या को numElements
PerElement
से numElements
तक अपेक्षाकृत कम कर देती है। जंप निर्देशों की संख्या भी कम हो गई है, क्योंकि लूप कम बार चलाया जाता है। ये लाभ चार गणितीय परिचालनों के समानांतर निष्पादन के परिणामस्वरूप होते हैं।
हालाँकि हुआ यह है कि पैक किए गए एसआईएमडी रजिस्टर में एक निश्चित मात्रा में डेटा होता है इसलिए अधिक समानता प्राप्त करना संभव नहीं है। गति में वृद्धि कुछ स्थिति तक उस धारणा से सीमित है जो हमने चार समानांतर संचालन करने के लिए बनाई थी। कृपया ध्यान दें कि यह AltiVec
और एसएसई दोनों के लिए सामान्य है।
समानांतर धारा प्रतिमान (एसआईएमडी/एमआईएमडी)
// This is a fictional language for demonstration purposes.
elements = array streamElement([number, number])[100]
kernel = instance streamKernel("@arg0[@iter]")
result = kernel.invoke(elements)
इस प्रतिमान में प्रत्येक घटक ब्लॉक को अलग से परिभाषित करने के अतिरिक्त संपूर्ण डेटा समुच्चय को परिभाषित किया गया है। डेटा के समुच्चय का वर्णन पहली दो पंक्तियों में किया जाना माना जाता है। उसके बाद, स्रोतों और कर्नेल से परिणाम का अनुमान लगाया जाता है। सरलता के लिए इनपुट और आउटपुट डेटा के बीच 1:1 समानता है लेकिन इसकी आवश्यकता नहीं है। प्रयुक्त संख्या भी अधिक जटिल हो सकती है।
इस प्रतिमान का कार्यान्वयन आंतरिक रूप से एक लूप को विवृत कर सकता है। यह चिप जटिलता के साथ थ्रूपुट को स्केल करने की स्वीकृति देती है। यह आसानी से सैकड़ों एएलयू का उपयोग करता है।[3][4] जटिल डेटा पैटर्न का उन्मूलन इस अतिरिक्त क्षमता को उपलब्ध कराता है।
जबकि स्ट्रीम प्रसंस्करण एसआईएमडी/एमआईएमडी प्रसंस्करण की एक शाखा है, उन्हें भ्रमित नहीं होना चाहिए। हालाँकि एसआईएमडी कार्यान्वयन प्रायः "स्ट्रीमिंग" प्रकार से कार्य कर सकता है। उनका प्रदर्शन तुलनीय नहीं है। मॉडल एक बहुत ही अलग उपयोग पैटर्न की कल्पना करता है जो अपने आप में कहीं अधिक प्रदर्शन की स्वीकृति देता है।
यह देखा गया है कि जब मानक सीपीयू जैसे सामान्य प्रोसेसर पर प्रयुक्त किया जाता है, तो केवल 1.5x स्पीडअप तक पहुंचा जा सकता है।[5] इसके विपरीत, एड-हॉक स्ट्रीम प्रसंस्करण आसानी से 10 गुना से अधिक प्रदर्शन तक अभिगम्य हो जाते हैं। जिसका मुख्य कारण अधिक कुशल मेमोरी नियंत्रण और समानांतर प्रसंस्करण के उच्च स्तर हैं।[6]
यद्यपि मॉडल द्वारा अनुमत नम्यता की विभिन्न डिग्री हैं तो स्ट्रीम प्रसंस्करण सामान्यतः कर्नेल या स्ट्रीम आकार पर कुछ सीमाएं लगाते हैं। उदाहरण के लिए उपभोक्ता हार्डवेयर में प्रायः उच्च-परिशुद्धता गणित करने की क्षमता का अभाव होता है, जटिल अप्रत्यक्ष श्रृंखलाओं का अभाव होता है या निष्पादित किए जा सकने वाले निर्देशों की संख्या पर अपेक्षाकृत कम सीमाएँ प्रस्तुत होती हैं।
अनुसंधान
Template:Specific स्टैनफोर्ड विश्वविद्यालय स्ट्रीम प्रसंस्करण परियोजनाओं में 1999 में प्रारम्भ किया गया था। स्टैनफोर्ड वास्तविक समय प्रोग्रामेबल शेडिंग परियोजना सम्मिलित है।[7] काल्पनिक प्रोटोटाइप को 2002 में विकसित किया गया था।[8] मेरिमैक नामक एक परियोजना लगभग 2004 तक चल रही है।[9] एटी और टी ने स्ट्रीम-एन्हांस्ड प्रोसेसर पर भी शोध किया था क्योंकि ग्राफिक्स प्रसंस्करण इकाइयां गति और कार्यक्षमता दोनों में तीव्रता से विकसित हुईं है। इन प्रारम्भिक दिनों से दर्जनों स्ट्रीम प्रसंस्करण भाषाओं के साथ-साथ विशेष हार्डवेयर भी विकसित किए गए हैं।
प्रोग्रामिंग मॉडल नोट्स
समानांतर प्रसंस्करण के क्षेत्र में सबसे तात्कालिक चुनौती उपयोग किए गए हार्डवेयर संरचना के प्रकार में नहीं है, लेकिन वास्तविक समाज के वातावरण में स्वीकार्य प्रदर्शन के साथ सिस्टम को प्रोग्राम करना कितना आसान होगा। जैसी मशीनें स्वचालित निर्भरता, मेमोरी आवंटन और डीएमए शेड्यूलिंग के साथ एक सीधे एकल-थ्रेडेड मॉडल का उपयोग करती हैं। यह अपने आप में प्रोग्रामर, टूल और हार्डवेयर के बीच कार्यों की इष्टतम परत खोजने में एमआईटी और स्टैनफोर्ड के शोध का परिणाम है। प्रोग्रामर एल्गोरिदम को समानांतर हार्डवेयर में मैप करने में टूल को मात देते हैं और टूल सबसे स्मार्ट मेमोरी आवंटन योजनाओं आदि का पता लगाने में प्रोग्रामर को मात देते हैं। विशेष रूप से चिंता का विषय सेल जैसे एमआईएमडी डिजाइन हैं, जिसके लिए प्रोग्रामर को कई कोर में एप्लिकेशन विभाजन से निपटने और प्रक्रिया समकालिक से निपटने की आवश्यकता होती है। एसआईएमडी प्रोग्रामिंग का एक दोष ऐरे-ऑफ़-स्ट्रक्चर्स (एओएस) और स्ट्रक्चर-ऑफ़-ऐरेज़ (एसओए) का परिणाम था। प्रोग्रामर प्रायः मेमोरी में इकाइयों का प्रतिनिधित्व करते हैं। उदाहरण के लिए 3डी स्पेस में एक कण का स्थान, गेंद का रंग और उसका आकार नीचे दिया गया है:
// A particle in a three-dimensional space.
struct particle_t {
float x, y, z; // not even an array!
unsigned byte color[3]; // 8 bit per channel, say we care about RGB only
float size;
// ... and many other attributes may follow...
};
जब इनमें से कई संरचनाएं मेमोरी में सम्मिलित होती हैं तो उन्हें संरचनाओं की एक सरणी (एओएस) टोपोलॉजी में एक सरणी बनाते हुए अंत तक रखा जाता है। इसका अर्थ यह है कि प्रत्येक कण के स्थान पर कुछ एल्गोरिदम प्रयुक्त किया जाना चाहिए, जिसके रूप मे इसे अन्य विशेषताओं वाले मेमोरी स्थानों को छोड़ देना चाहिए। यदि इन विशेषताओं की आवश्यकता नहीं है तो इसके परिणामस्वरूप सीपीयू कैश का व्यर्थ उपयोग होता है। इसके अतिरिक्त, एक एसआईएमडी निर्देश सामान्यतः यह उम्मीद करेगा कि वह जिस डेटा पर कार्य करेगा वह मेमोरी में निरंतर रहेगा, तत्वों को संरेखित करने की भी आवश्यकता हो सकती है। डेटा की मेमोरी एड्रेस को संरचना से बाहर ले जाकर स्ट्रीम में कुशल अभिगम्य के लिए और एसआईएमडी निर्देशों को संचालित करने के लिए डेटा को अपेक्षाकृत रूप से व्यवस्थित किया जा सकता है। सरणियों की संरचना (एसओए), जैसा कि नीचे दिखाया गया है, इसकी स्वीकृति दे सकती है।
struct particle_t {
float *x, *y, *z;
unsigned byte *colorRed, *colorBlue, *colorGreen;
float *size;
};
डेटा को संरचना में रखने के अतिरिक्त यह डेटा के लिए केवल पॉइंटर्स (मेमोरी एड्रेस) रखता है। दोष यह हैं कि यदि किसी वस्तु की एकाधिक विशेषताओं को संचालित किया जाना है तो वे अब मेमोरी में दूर हो सकते हैं और परिणामस्वरूप कैश मिस हो सकता है। संरेखण और किसी भी आवश्यक पैडिंग से मेमोरी उपयोग में वृद्धि होती है। सामान्यतः यदि उदाहरण के लिए संरचनाओं को जोड़ा और हटाया जाता है, तो मेमोरी प्रबंधन अधिक जटिल हो सकता है।
स्ट्रीम प्रसंस्करण के लिए, संरचनाओं के उपयोग को प्रोत्साहित किया जाता है। अनुप्रयोग के दृष्टिकोण से सभी विशेषताओं को कुछ नम्यता के साथ परिभाषित किया जा सकता है। जीपीयू को संदर्भ के रूप में लेते हुए, विशेषताओं का एक समुच्चय (कम से कम 16) उपलब्ध है। प्रत्येक विशेषता के लिए एप्लिकेशन घटकों की संख्या और घटकों के प्रारूप को बता सकता है लेकिन अभी केवल प्रारम्भिक डेटा प्रकार समर्थित हैं। फिर विभिन्न विशेषताओं को एक मेमोरी ब्लॉक से जोड़ा जाता है, जो संभवतः समान विशेषताओं के 'निरंतर' तत्वों के बीच एक प्रगति को परिभाषित करता है, प्रभावी रूप से इंटरलीव्ड (अंतरापत्रित) डेटा की स्वीकृति देता है। जब जीपीयू स्ट्रीम प्रसंस्करण प्रारम्भ करता है, तो यह पैरामीटर के एक समुच्चय में सभी विभिन्न विशेषताओं को एकत्र (सामान्यतः यह एक संरचना या "वैश्विक चर" जैसा दिखता है) संचालन करता है और बाद में प्रसंस्करण के लिए कुछ मेमोरी क्षेत्र में परिणाम को विस्तृत करता है या पुनः प्राप्त करता है।
अत्यधिक आधुनिक स्ट्रीम प्रसंस्करण फ्रेमवर्क डेटा को शाब्दिक स्ट्रीम के रूप में संरचित करने के लिए फीफो जैसा इंटरफ़ेस प्रदान करते हैं। यह अमूर्तता रनटाइम/हार्डवेयर को कुशल गणना के लिए उस ज्ञान का पूरा लाभ प्राप्त करने में सक्षम करते हुए डेटा निर्भरता को स्पष्ट रूप से निर्दिष्ट करने का एक साधन प्रदान करती है। सी++ के लिए अब तक के सबसे सरल[citation needed] और सबसे कुशल[citation needed] स्ट्रीम प्रसंस्करण प्रकारों में से एक राफ्टलिब है, जो C++ स्ट्रीम ऑपरेटरों का उपयोग करके डेटा संचार आरेख के रूप में स्वतंत्र कंप्यूट कर्नेल को एक साथ जोड़ने में सक्षम बनाता है।
#include <raft>
#include <raftio>
#include <cstdlib>
#include <string>
class hi : public raft::kernel
{
public:
hi() : raft::kernel()
{
output.addPort<std::string>("0");
}
virtual raft::kstatus run()
{
output["0"].push(std::string("Hello World\n"));
return raft::stop;
}
};
int main(int argc, char **argv)
{
/** instantiate print kernel **/
raft::print< std::string > p;
/** instantiate hello world kernel **/
hi hello;
/** make a map object **/
raft::map m;
/** add kernels to map, both hello and p are executed concurrently **/
m += hello >> p;
/** execute the map **/
m.exe();
return EXIT_SUCCESS;
}
संचार प्रसंस्करण के लिए गणना मॉडल
उच्च-स्तरीय भाषाओं में स्ट्रीमिंग अनुप्रयोगों को निर्दिष्ट करने के अतिरिक्त, कम्प्यूटेशन के मॉडल (एमओसीएस) का भी डेटा संचार मॉडल और प्रक्रिया-आधारित मॉडल के रूप में व्यापक रूप से उपयोग किया गया है।
सामान्य प्रसंस्करण संरचना
ऐतिहासिक रूप से सीपीयू ने अपेक्षाकृत धीमी गति से बढ़ती बाहरी मेमोरी बैंडविड्थ की तुलना में निरंतर बढ़ते प्रदर्शन के कारण मेमोरी नियंत्रण इष्टतमीकरण के विभिन्न स्तरों को प्रयुक्त करना प्रारम्भ कर दिया है। जैसे-जैसे यह अंतर बढ़ता गया, बड़ी मात्रा में डाई क्षेत्र मेमोरी विलंबता को छिपाने के लिए समर्पित कर दिया गया है। चूँकि उन कुछ एएलयू के लिए जानकारी और ऑपकोड लाना कीमती है। अपेक्षाकृत बहुत कम डाई क्षेत्र वास्तविक गणितीय मशीनरी के लिए समर्पित है। सामान्यतः अनुमान के अनुसार इसे 10% से कम माना जाता है।
स्ट्रीम प्रसंस्करण पर एक समान संरचना सम्मिलित है लेकिन नए प्रोग्रामिंग मॉडल के लिए धन्यवाद, प्रबंधन के लिए समर्पित ट्रांजिस्टर की मात्रा वास्तव में अपेक्षाकृत बहुत कम है।
संपूर्ण सिस्टम के दृष्टिकोण से स्ट्रीम प्रसंस्करण सामान्यतः नियंत्रित वातावरण में सम्मिलित होते हैं। जीपीयू ऐड-इन बोर्ड पर सम्मिलित होते हैं। ऐसा लगता है कि यह छवि पर भी प्रयुक्त होता है। सीपीयू सिस्टम संसाधनों को प्रबंधित करने एप्लिकेशन चलाने आदि का कार्य करते रहते हैं।
स्ट्रीम प्रसंस्करण सामान्यतः तीव्र, कुशल, स्वामित्व वाली मेमोरी से बना होता है। क्रॉसबार स्विच अब सामान्य हैं, अतीत में बहु-बसों को नियोजित किया गया है। मेमोरी लेन की शुद्ध मात्रा विणपन सीमा पर निर्भर है। जैसा कि यह लिखा गया है कि प्रवेश-स्तर के आसपास अभी भी 64-बिट विस्तृत इंटरकनेक्शन हैं। अधिकांश मध्य-श्रेणी के मॉडल तीव्र 128-बिट क्रॉसबार स्विच मैट्रिक्स (4 या 2 सेगमेंट) का उपयोग करते हैं, जबकि उच्च-अंत मॉडल 256 बिट चौड़े धीमे क्रॉसबार के साथ भारी मात्रा में मेमोरी (वास्तव में 512 एमबी तक) सक्रिय करते हैं। इसके विपरीत, इंटेल पेंटियम से लेकर कुछ एथलॉन 64 तक के मानक प्रोसेसर में केवल एक 64-बिट वाइड डेटा बस होती है।
मेमोरी एक्सेस पैटर्न बहुत अधिक पूर्वानुमानित हैं। जबकि सरणियाँ सम्मिलित हैं, उनका आयाम कर्नेल आमंत्रण पर तय किया गया है। वह वस्तु जो एकाधिक सूचक संकेत से सबसे अधिक निकटता के अनुरूप होती है। वह अप्रत्यक्ष श्रृंखला है, जो अंततः एक विशिष्ट मेमोरी क्षेत्र (स्ट्रीम के अंदर) से पढ़ने या लिखने का दायित्व करती है।
स्ट्रीम प्रसंस्करण की निष्पादन इकाइयों (एएलयू क्लस्टर) की एसआईएमडी प्रकृति के कारण पढ़ने/लिखने का संचालन एकत्रमें होने की उम्मीद है। इसलिए मेमोरी को कम विलंबता के अतिरिक्त उच्च बैंडविड्थ के लिए अनुकूलित किया जाता है। यह रैम्बस और डीडीआर एसडीआरएएम से एक अंतर है, क्योंकि यह कुशल मेमोरी बस वार्ता की स्वीकृति देता है। स्ट्रीम प्रसंस्करण का अधिकांश (90%) कार्य ऑन-चिप से किया जाता है, जिसके लिए मेमोरी में संग्रहीत करने के लिए वैश्विक डेटा का केवल 1% आवश्यक होता है। यह वह स्थान है जहाँ कर्नेल अस्थायी और निर्भरता को जानना भुगतान करता है।
आंतरिक रूप से एक स्ट्रीम प्रसंस्करण में कुछ चतुर संचार और प्रबंधन परिपथ होते हैं लेकिन जो रुचि है वह स्ट्रीम रजिस्टर फ़ाइल (एसआरएफ) है। यह वैचारिक रूप से एक बड़ा कैश है जिसमें स्ट्रीम डेटा को बड़ी मात्रा में बाहरी मेमोरी में स्थानांतरित करने के लिए संग्रहीत किया जाता है। विभिन्न एएलयू के लिए कैश-जैसी सॉफ़्टवेयर-नियंत्रित संरचना के रूप में एसआरएफ को सभी विभिन्न एएलयू क्लस्टरों के बीच साझा किया जाता है। स्टैनफोर्ड की छवि चिप के साथ की गई मुख्य अवधारणा और नवीकरण यह है कि कंपाइलर प्रोग्रामर के लिए पूरी तरह से पारदर्शी तरीके से मेमोरी को स्वचालित और आवंटित करने में सक्षम है। कर्नेल फ़ंक्शंन और डेटा के बीच निर्भरता को प्रोग्रामिंग मॉडल के माध्यम से जाना जाता है जो कंपाइलर को संचार विश्लेषण करने और एसआरएफ को अपेक्षाकृत रूप से पैक करने में सक्षम बनाता है। सामान्यतः यह कैश और डीएमए प्रबंधन किसी परियोजना के अधिकांश शेड्यूल को ले सकता है। जिसे स्ट्रीम प्रसंस्करण (या कम से कम काल्पनिक) पूरी तरह से स्वचालित करता है। स्टैनफोर्ड में किए गए परीक्षणों से पता चला कि कंपाइलर ने मेमोरी को शेड्यूल करने में उतना ही अच्छा या बेहतर कार्य किया है जितना कि आपने बहुत प्रयास के साथ हाथ से ट्यून किया था।
प्रमाण यह है कि बहुत से क्लस्टर हो सकते हैं क्योंकि अंतर-क्लस्टर संचार दुर्लभ माना जाता है। आंतरिक रूप से हालांकि, प्रत्येक क्लस्टर एएलयू की बहुत कम मात्रा का कुशलतापूर्वक दोहन कर सकता है क्योंकि अन्तः क्लस्टर संचार सामान्य है और इस प्रकार अत्यधिक कुशल होने की आवश्यकता है। उन एएलयू को डेटा के साथ रखने के लिए प्रत्येक एएलयू स्थानीय रजिस्टर फ़ाइलों (एलआरएफ) से बना है, जो मूल रूप से इसके उपयोग योग्य रजिस्टर हैं।
यह तीन-स्तरीय डेटा एक्सेस पैटर्न, अस्थायी डेटा को धीमी मेमोरी से दूर रखना से आसान बनाता है। इस प्रकार सिलिकॉन कार्यान्वयन अत्यधिक कुशल और विद्युत की बचत करने वाला बन गया है।
हार्डवेयर मे लूप समस्या
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] जिसका उद्देश्य स्ट्रीम-आधारित सुपरकंप्यूटर विकसित करना है। मेरिमैक का उद्देश्य एक ही तकनीक से निर्मित क्लस्टर-आधारित वैज्ञानिक कंप्यूटरों की तुलना में प्रति इकाई लागत पर अधिक प्रदर्शन प्रदान करने के लिए स्ट्रीम संरचना और उन्नत अंतःसंबंध नेटवर्क का उपयोग करने का है।
- स्टैनफोर्ड के काल्पनिक परियोजना के वाणिज्यिक स्पिन-ऑफ, स्ट्रीम प्रसंस्करण्स, इंक के स्टॉर्म -1 समूह की घोषणा आईएसएससीसी 2007 में एक विशेषता प्रस्तुति के समय की गई थी। समूह में 30 जीओपीएस से लेकर 220 16-बिट जीओपीएस (अरबों ऑपरेशन) तक के चार सदस्य सम्मिलित हैं। सभी को 130 नैनोमीटर प्रक्रिया में टीएसएमसी में निर्मित किया गया है। ये उपकरण वीडियो कॉन्फ्रेंसिंग, बहु फ़ंक्शन प्रिंटर और डिजिटल वीडियो संरक्षण उपकरण सहित डीएसपी विणपन के उच्च स्तर को लक्षित करते हैं।
- जीपीयू व्यापक, उपभोक्ता-ग्रेड स्ट्रीम प्रसंस्करण हैं।[1] मुख्य रूप से एएमडी और एनवीआईडीआईए द्वारा डिजाइन किया गया है। धारा प्रसंस्करण के दृष्टिकोण से विभिन्न पीढ़ियों पर ध्यान दिया जाना चाहिए:
- R2xx/NV2x: स्ट्रीम प्रसंस्करण के लिए कई स्पष्ट समर्थन कर्नेल ऑपरेशन एपीआई में छिपे हुए थे और सामान्य उपयोग के लिए बहुत कम नम्यता प्रदान करते थे।
- R2xx/NV2x: कर्नेल स्ट्रीम संचालन स्पष्ट रूप से प्रोग्रामर के नियंत्रण में हो गया था लेकिन केवल लंबकोणीय प्रसंस्करण के लिए (अभी भी पुराने प्रतिमानों का उपयोग कर रहे थे) कोई शाखा समर्थन गंभीर रूप से नम्यता में बाधा नहीं डालता है, लेकिन कुछ प्रकार के एल्गोरिदम को विशेष रूप से कम-शुद्ध द्रव अनुरूपन मे चलाया जा सकता है।
- R3xx/NV4x: शाखा समर्थन हालांकि, निष्पादित किए जाने वाले संचालन की संख्या और जटिल प्रत्यावर्तन साथ ही सरणी स्थानांतरण पर कुछ सीमाएं अभी भी सम्मिलित हैं।
- R8xx: बफ़र्स और परमाणु संचालन को जोड़ने या उपभोग करने का समर्थन करता है। यह पीढ़ी कला की स्थिति है।
- एचपीसी को लक्षित उत्पाद लाइन के लिए एएमडी फायरस्ट्रीम का ब्रांड नाम।
- एचपीसी को लक्षित करने वाली उत्पाद श्रृंखला के लिए एनवीडिया टेस्ला का ब्रांड नाम।
- सोनी कंप्यूटर एंटरटेनमेंट, तोशिबा संगठन और आईबीएम के गठबंधन एसटीआई का सेल प्रोसेसर एक हार्डवेयर संरचना है जो उपयुक्त सॉफ्टवेयर समर्थन के साथ स्ट्रीम प्रसंस्करण की तरह कार्य कर सकती है। इसमें एक नियंत्रित प्रोसेसर, पीपीई (ऊर्जा प्रसंस्करण तत्व आईबीएम पावरपीसी) और एसआईएमडी कोप्रोसेसरों का एक समुच्चय होता है, जिन्हें एसपीई (सिनर्जिस्टिक प्रसंस्करण तत्व) कहा जाता है। प्रत्येक में स्वतंत्र प्रोग्राम गणना और निर्देश मेमोरी होती है, वास्तव में एक एमआईएमडी मशीन होती है। देशी प्रोग्रामिंग मॉडल में सभी डीएमए और प्रोग्राम शेड्यूलिंग को प्रोग्रामर पर छोड़ दिया जाता है। हार्डवेयर स्थानीय संचार के लिए प्रोसेसर के बीच एक तीव्र ध्वनि प्रदान करता है। क्योंकि निर्देशों और डेटा के लिए स्थानीय मेमोरी सीमित है, केवल वही प्रोग्राम जो इस संरचना का प्रभावी रूप से प्राप्त कर सकते हैं, उन्हें या तो छोटी मेमोरी फ़ुटप्रिंट की आवश्यकता होती है या स्ट्रीम प्रोग्रामिंग मॉडल का अनुसरण करना पड़ता है। एक उपयुक्त एल्गोरिदम के साथ सेल का प्रदर्शन शुद्ध स्ट्रीम प्रसंस्करण के साथ प्रतिस्पर्धा कर सकता है। हालांकि इसके लिए लगभग सदैव एल्गोरिदम और सॉफ्टवेयर के पूर्ण डिज़ाइन की आवश्यकता होती है।
स्ट्रीम प्रोग्रामिंग लाइब्रेरी और भाषाएँ
स्ट्रीम प्रसंस्करण के लिए अधिकांश प्रोग्रामिंग भाषाएं जावा, C या C++ से प्रारम्भ होती हैं और एक्सटेंशन जोड़ती हैं जो एप्लिकेशन विकासक को कर्नेल और स्ट्रीम को टैग करने की स्वीकृति देने के लिए विशिष्ट निर्देश प्रदान करती हैं। यह अधिकांश छायांकन भाषाओं पर भी प्रयुक्त होता है, जिन्हें कुछ स्थिति तक स्ट्रीम प्रोग्रामिंग भाषाएं माना जा सकता है।
स्ट्रीम प्रोग्रामिंग भाषाओं के गैर-व्यावसायिक उदाहरणों में सम्मिलित हैं:
- एटेजी पीएक्स मुक्त प्रसंस्करण, जेवीएम पर स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और मैपरेडस एल्गोरिदम की एक सरल अभिव्यक्ति को सक्षम बनाता है।
- ऑटो-पाइप, सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग लैब से, स्ट्रीमिंग अनुप्रयोगों के लिए एक एप्लिकेशन विकास वातावरण जो विषम प्रणालियों (सीपीयू, जीपीजीपीयू, एफपीजीए) के लिए अनुप्रयोगों को लिखने की स्वीकृति देता है। सीपीयू के लिए एप्लिकेशन को C, C++ और Java के किसी भी संयोजन में विकसित किया जा सकता है। एफपीजीए के लिए वेरिलॉग या वीएचडीएल क्यूडा का उपयोग वर्तमान में एनवीडिया जीपीजीपीयू के लिए किया जाता है। ऑटो-पाइप कई मशीनों के बीच टीसीपी कनेक्शन के समन्वय को भी संभालता है।
- एकोटेस प्रोग्रामिंग मॉडल: ओपनएमपी पर आधारित कैटेलोनिया के पॉलिटेक्निक विश्वविद्यालय की भाषा
- बीपबीप, यूक्यूएसी में फॉर्मल कंप्यूटर साइंस लैब से एक सरल और हल्का जावा-आधारित इवेंट स्ट्रीम प्रसंस्करण लाइब्रेरी।
- स्टैनफोर्ड से ब्रुक भाषा
- सीएएल अभिनेता भाषा: राइटिंग (डेटाफ्लो) एक्टर्स के लिए एक उच्च-स्तरीय प्रोग्रामिंग लैंग्वेज, जो स्टेटफुल ऑपरेटर हैं जो डेटा वस्तु् (टोकन) की इनपुट स्ट्रीम को आउटपुट स्ट्रीम में परिवर्तित कर देते हैं।
- सीएएल-2 हैल्मस्टेड यूनिवर्सिटी, स्वीडन से एक कोड जनरेशन फ्रेमवर्क है। यह सीएएल कोड को इनपुट के रूप में लेता है और अनुक्रमिक C, छेनी, समानांतर C लक्ष्यीकरण एपिफेनी संरचना, अजवा और एस्ट्रक्ट लक्ष्यीकरण एम्ब्रिक संरचना आदि सहित विभिन्न लक्ष्य विशिष्ट भाषाएँ उत्पन्न करता है।
- म्यूनिख के तकनीकी विश्वविद्यालय और डेनवर विश्वविद्यालय से डीयूपी भाषा
- एचस्ट्रीम: विषम धारा कंप्यूटिंग के लिए एक निर्देश-आधारित भाषा विस्तार।[12]
- राफ्टलिब - मुक्त स्रोत C++ स्ट्रीम प्रसंस्करण टेम्प्लेट लाइब्रेरी मूल रूप से सेंट लुइस में वाशिंगटन विश्वविद्यालय में स्ट्रीम आधारित सुपरकंप्यूटिंग प्रयोगशाला।
- एसपीएआर - रियो ग्रांडे डो सुल के पोंटिफ़िकल कैथोलिक विश्वविद्यालय में एप्लिकेशन मॉडलिंग ग्रुप (जीएमएपी) से धारा समानता को व्यक्त करने के लिए C++ डोमेन-विशिष्ट भाषा।
- वाटरलू विश्वविद्यालय एसएच पुस्तकालय
- शालोज़, मुक्त स्रोत योजना
- हर्टफोर्डशायर विश्वविद्यालय से एस-नेट समन्वय भाषा, जो समन्वय और एल्गोरिथम प्रोग्रामिंग को अलग करती है।
- एमआईटी से इसे स्ट्रीम करें।
- डब्लूएसओ-2 सिद्धि
- वेवस्क्रिप्ट कार्यात्मक स्ट्रीम प्रसंस्करण एमआईटी
- कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग को व्यापक अर्थों में स्ट्रीम प्रसंस्करण माना जा सकता है।
वाणिज्यिक कार्यान्वयन या तो सामान्य प्रयोजन के होते हैं या किसी विक्रेता द्वारा विशिष्ट हार्डवेयर से संबद्ध होते हैं। सामान्य प्रयोजन भाषाओं के उदाहरणों में सम्मिलित हैं:
- एक्सेलेरआइज़ जैकेट, मैटलैब के लिए जीपीयू इंजन का व्यावसायीकरण
- एटेजी पीएक्स जावा एक्सटेंशन जो स्ट्रीम प्रोग्रामिंग, एक्टर मॉडल और मैपरेडस एल्गोरिदम की सरल अभिव्यक्ति को सक्षम बनाता है।
- एम्बियोट, टेल्केमी का अंतः स्थापित स्ट्रीमिंग विश्लेषण अभिकर्ता है।
- फ्लडगेट, प्ले स्टेशन 3,एक्सबॉक्स-360, वाईआई और पीसी के लिए गेमब्रीओ गेम इंजन के साथ प्रदान किया गया एक स्ट्रीम प्रसंस्करण
- ओपनएचएमपीपी, मैनी-कोर प्रोग्रामिंग का एक निर्देशक विजन
- पीकस्ट्रीम,[13] ब्रुक परियोजना का एक स्पिनआउट (जून 2007 में गूगल द्वारा अधिग्रहीत)
- आईबीएम स्पेड - स्ट्रीम प्रसंस्करण एप्लिकेशन निर्देशक इंजन (बी. गेडिक, स्पेड सिस्टम एस निर्देशक स्ट्रीम प्रसंस्करण इंजन एसीएम सिगमोड 2008)
- रैपिडमाइंड, लिबश का व्यावसायीकरण (अगस्त 2009 में इंटेल द्वारा अधिग्रहित)
- टी-स्ट्रीम,[14][15] हेवलेट-पैकार्ड कैम्ब्रिज शोध संस्थान
विक्रेता-विशिष्ट भाषाओं में सम्मिलित हैं:
- एएमडी/एटीआई से ब्रूक+ (ब्रुक का एएमडी हार्डवेयर अनुकूलित कार्यान्वयन)
- एनवीडिया से सीयूडीए (कम्प्यूट यूनिफाइड डिवाइससंरचना)
- उच्च-थ्रूपुट कंप्यूटिंग के लिए इंटेल सीटी- सी
- स्ट्रीम प्रसंस्करण, इंक से स्ट्रीमसी, स्टैनफोर्ड में काल्पनिक कार्य का व्यावसायीकरण
घटना-आधारित प्रसंस्करण
- अपामा (सॉफ्टवेयर) - सॉफ्टवेयर इंक द्वारा एक संयुक्त जटिल घटना प्रसंस्करण और स्ट्रीम प्रसंस्करण इंजन
- वल्लारू
- डब्लूएसओ-2 द्वारा डब्लूएसओ-2 स्ट्रीम प्रसंस्करण
- अपाचे एनआईएफआई
बैच फ़ाइल-आधारित प्रसंस्करण (कुछ वास्तविक स्ट्रीम प्रसंस्करण का अनुकरण करता है, लेकिन सामान्य रूप से बहुत कम प्रदर्शन होता है:[clarification needed][citation needed])
निरंतर ऑपरेटर स्ट्रीम प्रसंस्करण[clarification needed]
- अपाचे फ्लैश
- वॉलमार्टलैब्स एमयूपीडी-8[16]
- एक्लिप्स स्ट्रीमशीट - स्ट्रीम प्रसंस्करण के लिए स्प्रेडशीट
स्ट्रीम प्रसंस्करण सेवाएं:
- अमेज़ॅन वेब सेवा - किनेसिस
- गूगल मेघ - डेटा संचार
- माइक्रोसॉफ्ट एज़्योर - स्ट्रीम विश्लेषण
- डेटास्ट्रीम - डेटा स्ट्रीमिंग विश्लेषणप्लेटफॉर्म
- आईबीएम संचार
- आईबीएम स्ट्रीमिंग विश्लेषण
- इवेंटडोर एसक्यूएल स्ट्रीम प्रसंस्करण
यह भी देखें
संदर्भ
- ↑ 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.