निर्भरता विश्लेषण

संकलक सिद्धांत में, निर्भरता विश्लेषण बयानों/निर्देशों के बीच निष्पादन-आदेश बाधाओं का उत्पादन करता है। मोटे तौर पर, एक कथन S2 S1 पर निर्भर करता है यदि S1 को S2 से पहले निष्पादित किया जाना चाहिए। मोटे तौर पर, डिपेंडेंसी के दो वर्ग हैं - कंट्रोल डिपेंडेंसी और डेटा निर्भरता

निर्भरता विश्लेषण यह निर्धारित करता है कि बयानों को पुन: क्रमबद्ध या समानांतर करना सुरक्षित है या नहीं।

नियंत्रण निर्भरता
नियंत्रण निर्भरता एक ऐसी स्थिति है जिसमें एक प्रोग्राम निर्देश निष्पादित करता है यदि पिछला निर्देश इस तरह से मूल्यांकन करता है जो इसके निष्पादन की अनुमति देता है।

एक कथन S2 नियंत्रण S1 पर निर्भर है (लिखित $$S1\ \delta^c\ S2$$) अगर और केवल अगर S2 का निष्पादन सशर्त रूप से S1 द्वारा संरक्षित है। S2 नियंत्रण S1 पर निर्भर है अगर और केवल अगर $$S1 \in PDF(S2)$$ कहाँ $$PDF(S)$$ बयान के बाद प्रभुत्व सीमा है $$S$$. निम्नलिखित ऐसी नियंत्रण निर्भरता का एक उदाहरण है:

S1 अगर x > 2 गोटो L1 स2 यः=3 S3 L1: z := y + 1

यहाँ, S2 तभी चलता है जब S1 में विधेय असत्य हो।

अधिक जानकारी के लिए Data_निर्भरता#नियंत्रण_निर्भरता देखें।

डेटा निर्भरता
एक डेटा निर्भरता दो कथनों से उत्पन्न होती है जो एक ही संसाधन तक पहुँचते हैं या संशोधित करते हैं।

प्रवाह (सच) निर्भरता
S1 पर एक कथन S2 'प्रवाह पर निर्भर' है (लिखित $$S1\ \delta^f\ S2$$) अगर और केवल अगर S1 एक संसाधन को संशोधित करता है जिसे S2 पढ़ता है और S1 निष्पादन में S2 से पहले आता है। निम्नलिखित प्रवाह निर्भरता का एक उदाहरण है (रॉ: लिखने के बाद पढ़ें):

एस1 एक्स := 10 S2 y := x + c

प्रति-निर्भरता
एक कथन S2, S1 पर 'एंटीडिपेंडेंट' है (लिखा है $$S1\ \delta^a\ S2$$) अगर और केवल अगर S2 एक संसाधन को संशोधित करता है जिसे S1 पढ़ता है और S1 निष्पादन में S2 से पहले आता है। निम्नलिखित एक प्रति-निर्भरता का एक उदाहरण है (WAR: लिखने के बाद पढ़ें):

S1 x := y + c स2 य:= 10

यहाँ, S2 का मान सेट करता है  लेकिन S1 का पूर्व मान पढ़ता है.

आउटपुट निर्भरता
S1 पर एक कथन S2 'आउटपुट निर्भर' है (लिखित $$S1\ \delta^o\ S2$$) अगर और केवल अगर S1 और S2 एक ही संसाधन को संशोधित करते हैं और S1 निष्पादन में S2 से पहले आता है। निम्नलिखित आउटपुट निर्भरता का एक उदाहरण है (WAW: लिखने के बाद लिखें):

एस1 एक्स := 10 स2 एक्स := 20

यहाँ, S2 और S1 दोनों वेरिएबल सेट करते हैं.

इनपुट निर्भरता
एक कथन S2 S1 पर 'इनपुट निर्भर' है (लिखित $$S1\ \delta^i\ S2$$) अगर और केवल अगर S1 और S2 समान संसाधन पढ़ते हैं और S1 निष्पादन में S2 से पहले आता है। निम्नलिखित इनपुट निर्भरता का एक उदाहरण है (आरएआर: रीड-आफ्टर-रीड):

S1 y := x + 3 S2 z := x + 5

यहाँ, S2 और S1 दोनों वेरिएबल को एक्सेस करते हैं. यह निर्भरता पुन: व्यवस्थित करने पर रोक नहीं लगाती है।

लूप निर्भरता
लूप के भीतर कंप्यूटिंग निर्भरता की समस्या, जो कि एक महत्वपूर्ण और गैर-तुच्छ समस्या है, को लूप निर्भरता विश्लेषण द्वारा सुलझाया जाता है, जो यहां दिए गए निर्भरता ढांचे का विस्तार करता है।

यह भी देखें

 * कार्यक्रम विश्लेषण (कंप्यूटर विज्ञान)
 * स्वचालित समांतरता
 * स्वचालित वैश्वीकरण
 * लूप निर्भरता विश्लेषण
 * बहुफलकीय मॉडल का समर्थन करने वाले ढांचे
 * खतरा (कंप्यूटर वास्तुकला)
 * कार्यक्रम टुकड़ा करना
 * मृत कोड उन्मूलन