DAG Representation of Basic Blocks in Compiler Design in Hindi | DAG रिप्रेजेंटेशन
DAG Representation of Basic Blocks in Compiler Design in Hindi | DAG रिप्रेजेंटेशन
DAG (Directed Acyclic Graph) Representation क्या है?
Compiler Design में DAG (Directed Acyclic Graph) Representation एक तकनीक है, जिसका उपयोग Basic Blocks के अंदर उप-अभिव्यक्तियों (Sub-expressions) को साझा करने और कोड ऑप्टिमाइज़ेशन करने के लिए किया जाता है। यह एक गैर-दोहराव (Non-redundant) डेटा संरचना है, जो गणना को अधिक प्रभावी बनाती है।
DAG Representation की विशेषताएँ
- DAG एक **Directed Acyclic Graph** होता है, जिसमें कोई **साइकिल (Cycle)** नहीं होती।
- यह **कॉमन सब-एक्सप्रेशन्स** को पहचानता है और **Duplicate Computation** को हटाता है।
- यह **Basic Blocks** के अंदर **Expression Optimization** में मदद करता है।
Basic Blocks के लिए DAG Representation कैसे बनता है?
किसी भी Basic Block के लिए DAG Representation बनाने के लिए निम्नलिखित चरण होते हैं:
- सभी वेरिएबल्स और उनके ऑपरेशन्स के लिए नोड्स बनाएं।
- समान सब-एक्सप्रेशन्स को मर्ज करें।
- Expression Tree का उपयोग करके DAG बनाएं।
Example:
मान लीजिए हमारे पास निम्नलिखित Basic Block है:
t1 = a + b; t2 = t1 * c; t3 = a + b; t4 = t3 * d; t5 = t2 + t4;
इसका DAG Representation:
+
/
a b
| |
* *
| |
c d
/
+
DAG Representation के लाभ
| लाभ | विवरण |
|---|---|
| Common Subexpression Elimination | एक्सप्रेशन्स के पुन: उपयोग के द्वारा **Redundant Computation** को हटाता है। |
| Constant Folding | स्थिर (Constant) मानों के लिए गणना को संकलन (Compile-Time) पर निष्पादित करता है। |
| Dead Code Elimination | अनावश्यक गणनाओं को हटाकर कोड को छोटा और कुशल बनाता है। |
DAG Representation और Three-Address Code
Three-Address Code (TAC) को भी DAG से बेहतर बनाया जा सकता है।
उदाहरण:
Without DAG: t1 = a + b; t2 = t1 * c; t3 = a + b; t4 = t3 * d; t5 = t2 + t4; With DAG: t1 = a + b; t2 = t1 * c; t4 = t1 * d; t5 = t2 + t4;
निष्कर्ष
DAG Representation कंपाइलर डिजाइन में **Code Optimization** का एक महत्वपूर्ण हिस्सा है। यह **Common Subexpression Elimination, Dead Code Elimination**, और **Constant Folding** जैसी तकनीकों के माध्यम से कंपाइलर को अधिक प्रभावी बनाता है।
Related Articles
Code Improving Transformations in Compiler Design in Hindi | कोड इंप्रूविंग ट्रांसफॉर्मेशन
कोड इंप्रूविंग ट्रांसफॉर्मेशन (Code Improving Transformation...
Read More →Introduction to Global Data Flow Analysis in Compiler Design in Hindi | ग्लोबल डेटा फ्लो एनालिसिस का परिचय
ग्लोबल डेटा फ्लो एनालिसिस (Global Data Flow Analysis) क्या ह...
Read More →Loop Optimization in Compiler Design in Hindi | लूप ऑप्टिमाइजेशन
लूप ऑप्टिमाइजेशन (Loop Optimization) क्या है? Compiler Design ...
Read More →Dead Code Elimination in Compiler Design in Hindi | डेड कोड एलिमिनेशन
डेड कोड एलिमिनेशन (Dead Code Elimination) क्या है? Compiler Des...
Read More →Loops in Flow Graphs in Compiler Design in Hindi | फ्लो ग्राफ्स में लूप्स
फ्लो ग्राफ में लूप्स (Loops in Flow Graphs) क्या होते हैं?...
Read More →