डेटाफ्लो आर्किटेक्चर

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

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

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

इतिहास
डेटा प्रवाह के लिए हार्डवेयर आर्किटेक्चर 1970 और 1980 के दशक की शुरुआत में कंप्यूटर आर्किटेक्चर अनुसंधान का एक प्रमुख विषय था। मैसाचुसेट्स की तकनीकी संस्था के जैक डेनिस ने स्टैटिक डेटाफ्लो आर्किटेक्चर के क्षेत्र का बीड़ा उठाया जबकि मैनचेस्टर डेटाफ्लो मशीन और MIT टैग की गई टोकन वास्तुकला गतिशील डेटा प्रवाह में प्रमुख परियोजनाएँ थीं।

हालाँकि, शोध से संबंधित समस्याओं पर कभी काबू नहीं पाया गया:

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

बहरहाल, 1990 के दशक से आउट-ऑफ-ऑर्डर निष्पादन (OOE) प्रमुख कंप्यूटिंग प्रतिमान बन गया है। यह प्रतिबंधित डेटा प्रवाह का एक रूप है। इस प्रतिमान ने एक निष्पादन विंडो का विचार पेश किया। निष्पादन विंडो वॉन न्यूमैन आर्किटेक्चर के अनुक्रमिक क्रम का पालन करती है, हालांकि विंडो के भीतर, डेटा निर्भरता क्रम में निर्देशों को पूरा करने की अनुमति है। यह CPU  में पूरा किया जाता है जो निष्पादन विंडो में कोड की डेटा निर्भरता को गतिशील रूप से टैग करता है। डेटा निर्भरताओं का गतिशील रूप से ट्रैक रखने की तार्किक जटिलता, आउट-ऑफ-ऑर्डर निष्पादन सीपीयू को निष्पादन इकाइयों (2-6) की एक छोटी संख्या तक सीमित करती है और निष्पादन विंडो के आकार को 32 से 200 निर्देशों की सीमा तक सीमित करती है, जो कि उससे बहुत छोटा है। पूर्ण डेटा प्रवाह मशीनों के लिए कल्पना की गई।

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

सामग्री-पता योग्य मेमोरी (CAM) का उपयोग करने वाले डिज़ाइन को डायनेमिक डेटाफ़्लो मशीन कहा जाता है। वे समांतरता को सुविधाजनक बनाने के लिए स्मृति में टैग का उपयोग करते हैं।

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

एक डेटाफ्लो कंपाइलर चर नामों का उपयोग करने के बजाय प्रत्येक निर्भरता के लिए अद्वितीय टैग बनाकर इन निर्भरताओं को रिकॉर्ड करता है। प्रत्येक निर्भरता को एक अद्वितीय टैग देकर, यह बाइनरी में गैर-निर्भर कोड सेगमेंट को ऑर्डर से बाहर और समानांतर में निष्पादित करने की अनुमति देता है। कंपाइलर डेटा प्रवाह के लिए लूप, ब्रेक स्टेटमेंट और विभिन्न प्रोग्रामिंग कंट्रोल सिंटैक्स का पता लगाता है।

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

इसे निर्देश को सक्रिय करने या सक्रिय करने के रूप में जाना जाता है। निष्पादन इकाई द्वारा एक बार निर्देश पूरा हो जाने के बाद, इसका आउटपुट डेटा CAM को (इसके टैग के साथ) भेजा जाता है। कोई भी निर्देश जो इस विशेष डेटा (इसके टैग मान द्वारा पहचाना जाता है) पर निर्भर हैं, तब निष्पादन के लिए तैयार के रूप में चिह्नित किए जाते हैं। इस तरह, बाद के निर्देशों को उचित क्रम में निष्पादित किया जाता है, दौड़ की स्थिति से बचा जाता है। यह क्रम मानव प्रोग्रामर, क्रमादेशित क्रम द्वारा परिकल्पित अनुक्रमिक क्रम से भिन्न हो सकता है।

निर्देश
एक निर्देश, इसके आवश्यक डेटा ऑपरेंड के साथ, एक निष्पादन इकाई को एक पैकेट के रूप में प्रेषित किया जाता है, जिसे एक निर्देश टोकन भी कहा जाता है। इसी तरह, आउटपुट डेटा CAM को डेटा टोकन के रूप में वापस प्रेषित किया जाता है। निर्देशों और परिणामों का पैकेटीकरण बड़े पैमाने पर तैयार निर्देशों के समानांतर निष्पादन की अनुमति देता है।

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

यह भी देखें

 * समानांतर कंप्यूटिंग
 * एक प्रकार का पौधा
 * बाइनरी मॉड्यूलर डेटाफ्लो मशीन (बीएमडीएफएम)
 * सिस्टोलिक सरणी
 * परिवहन ट्रिगर वास्तुकला
 * एक चिप पर नेटवर्क (एनओसी)
 * चिप पर सिस्टम (SoC)
 * इन-मेमोरी कंप्यूटिंग