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

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

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

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

इस बीच, शब्दावली का टकराव होता है, क्योंकि डेटाफ्लो शब्द का उपयोग समानांतर प्रोग्रामिंग के एक उपक्षेत्र के लिए किया जाता है: डेटाफ्लो प्रोग्रामिंग के लिए।

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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